4#ifndef _Stroika_Foundation_Math_LinearAlgebra_Matrix_h_
5#define _Stroika_Foundation_Math_LinearAlgebra_Matrix_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
10#include "Stroika/Foundation/Containers/Sequence.h"
23namespace Stroika::Foundation::Math::LinearAlgebra {
30 struct DimensionType {
43 Matrix (
const DimensionType& dimensions);
44 Matrix (
size_t rows,
size_t columns);
45 Matrix (
const DimensionType& dimensions, Common::ArgByValueType<T> fillValue);
46 Matrix (
size_t rows,
size_t columns, Common::ArgByValueType<T> fillValue);
47 Matrix (
const DimensionType& dimensions,
const function<T ()>& filler);
50 static Matrix<T> Identity (
const DimensionType& dimensions);
53 nonvirtual DimensionType GetDimensions ()
const;
56 nonvirtual Containers::Sequence<Vector<T>> GetRows ()
const;
59 nonvirtual Containers::Sequence<Vector<T>> GetColumns ()
const;
62 nonvirtual T GetAt (
size_t r,
size_t c)
const;
65 nonvirtual
void SetAt (
size_t r,
size_t c, T v);
68 struct ReadOnlyTemporaryRowReference_ {
69 const Matrix<T>& fMatrix;
71 T operator[] (
size_t column)
const
73 return fMatrix.GetAt (fRow, column);
83 nonvirtual
const ReadOnlyTemporaryRowReference_ operator[] (
size_t row)
const;
86 nonvirtual Characters::String
ToString ()
const;
92 Memory::SharedByValue<Rep_> fRep_;
STRING_TYPE ToString(FLOAT_TYPE f, const ToStringOptions &options={})