diff --git a/src/Numerics/LinearAlgebra/Storage/Indexers/Static/PackedStorageIndexer.cs b/src/Numerics/LinearAlgebra/Storage/Indexers/Static/PackedStorageIndexer.cs new file mode 100644 index 00000000..6d4eba54 --- /dev/null +++ b/src/Numerics/LinearAlgebra/Storage/Indexers/Static/PackedStorageIndexer.cs @@ -0,0 +1,50 @@ +namespace MathNet.Numerics.LinearAlgebra.Storage.Indexers.Static +{ + using System; + using Properties; + + /// + /// A class for managing indexing when using Packed Storage indexer, which is a column-major packing scheme for dense Symmetric, Hermitian or Triangular square matrices. + /// + public abstract class PackedStorageIndexer : StaticStorageIndexer + { + /// + /// Number of rows or columns. + /// + protected readonly int Order; + + /// + /// Length of the stored data. + /// + private readonly int _dataLength; + + /// + /// Initializes a new instance of the class. + /// + /// + /// The order of the matrix. + /// + /// is out of range. + protected PackedStorageIndexer(int order) + { + if (order <= 0) + { + throw new ArgumentOutOfRangeException(Resources.MatrixRowsOrColumnsMustBePositive); + } + + Order = order; + _dataLength = order * (order + 1) / 2; + } + + /// + /// Gets the length of the stored data. + /// + public override int DataLength + { + get + { + return _dataLength; + } + } + } +} diff --git a/src/Numerics/Numerics.csproj b/src/Numerics/Numerics.csproj index 4e1d798f..9d2198d4 100644 --- a/src/Numerics/Numerics.csproj +++ b/src/Numerics/Numerics.csproj @@ -142,6 +142,7 @@ +