#pragma once

#include "Vector.h"
#include <vector>

class Matrix
{
public:
    Matrix(std::size_t numRows, std::size_t numColumns);

    std::size_t getFlatIndex(std::size_t rowId, std::size_t columnId) const;

    double getItem(std::size_t rowId, std::size_t columnId) const;

    bool isIdentity() const;

    bool isSquare() const;

    bool isEqual(const Matrix& matrix) const;

    bool operator==(const Matrix& rhs) const
    {
       return isEqual(rhs);
    }

    bool operator!=(const Matrix& rhs) const
    {
      return !operator==(rhs);
    }

private:
    std::size_t mNumRows{0};
    std::size_t mNumColumns{0};
    std::vector<double> mData;
};
