Класс определяет свойство по умолчанию Items для создания индекса и свойства для считывания/записи элементов.

###### Свойства и функции класса TmaMatrix

Чтение и изменение размеров и типа матрицы

- constructor Create(_Type:maType;Tizes:array of integer)
- constructor Create(_Type: maType; Sizes: array of integer;Name: WideString...)
- constructor Create(matrix:ImaMatrix)
- constructor Create(cell:TmaCell)
- procedure Resize(sizes:array of integer)
- procedure Clear
- property _Type:Cardinal
- property Dim:integer
- property Size[dim:integer]:integer

Чтение и запись

- property Items[index:integer]:TmaMatrix ; default
- property AsDouble: Double
- property AsLong: Integer
- property AsString: WideString
- property AsBoolean: Boolean
- property Cell:TmaCell

Работа с пустыми значениями

- procedure SetEmpty
- function IsEmpty:boolean
- property EmptyDoubleValue:double
- property EmptyLongValue:integer
- property EmptyStringValue:WideString

Буферизация

- procedure CacheMatrix(cacheMode:byte; source: TmaMatrix)
- procedure Commit

Пример

- Создание и заполнение двумерной числовой матрицы

    constructor Create(_Type:maType;Sizes:array of integer)

Создание новой матрицы с заданным типом элементов и размерами, заданными массивом sizes.

Параметры:

_Type тип создаваемой матрицы. Должен содержать комбинацию одного из флагов (MA_DOUBLE, MA_STRING, MA_LONG, MA_BOOLEAN и MA_BYTE) для указания типа данных с флагами MA_SPARSE и MA_EVAL. О значении флагов смотри в описании интерфейса ImaMatrixFactory
Sizes размеры создаваемой матрицы. Если массив sizes пустой (Sizes = []), то создается пустая матрица, что удобно,например, при чтении матрицы из потока.

    constructor Create(_Type: maType; Sizes: array of integer;
       Name: WideString; maxSize: integer = 0)

Функция позволяет создавать и использовать матрицы, размещенные в разделяемой памяти.

- Если maxSize≠0, то создается разделяемая область памяти размером maxSize с именем name и данные матрицы размещаются в ней. Созданная матрица имеет размеры sizes и доступна для чтения и записи.
- Если maxSize=0, то создается матрица с данными, уже хранящимися в разделяемой памяти с именем name. Параметр sizes в этом случае не используется, размер матрицы берется из разделяемой памяти. Созданная матрица доступна только для чтения.

Параметры:

_type тип создаваемой матрицы. Должен содержать комбинацию одного из флагов (MA_DOUBLE, MA_STRING, MA_LONG, MA_BOOLEAN и MA_BYTE) для указания типа данных с флагами MA_SPARSE и MA_EVAL. О значении флагов смотри в описании интерфейса ImaMatrixFactory
Sizes размеры создаваемой матрицы
Name имя блока разделяемой памяти, в котором находится матрица
maxSize размер блока памяти под матрицу

    constructor Create(matrix:ImaMatrix)

Присоедимяет класс к уже существующему интерфейсу.

Параметры:

matrix указатель на существующий интерфейс

    constructor Create(cell:TmaCell)

Присоедняет класс к интерфейсу матрицы, хранящейся в ячейке cell.

Параметры:

cell ячейка, из которой копируется значение

    procedure Resize(sizes:array of integer)

Изменяет размер матрицы на новый, заданный массивом sizes. Все содержимое матрицы при этом теряется.

Параметры:

Sizes новые размеры матрицы

    procedure Clear

Функция очищает матрицу, заполняя ее пустыми значениями или значениями по умолчанию. Размеры матрицы не меняются.

    property _Type:Cardinal

Свойство только для чтения. Возвращает тип значений, хранящихся в матрице.

    property Dim:integer

Свойство только для чтения. Возвращает размерность матрицы.

Возвращаемое значение:

Размерность матрицы или 0, если указатель на интерфейс, хранящийся в матрице, равен nil.

    property Size[dim:integer]:integer

Свойство только для чтения. Возвращает размер матрицы по заданной координате.

Параметры:

dim координата, по которой возвращается размерность

Возвращаемое значение:

Размер матрицы по координате dim или 0, если dim больше размерности матрицы.

    property Items[index:integer]:TmaMatrix ; default

Свойство только для чтения. Добавляет значение index к текущему индексу и возвращает Self. Это позволяет формировать индекс оператором вида "Matrix[2][10].AsDouble=...".

Параметры:

index очередная координата индекса

    property AsDouble: Double
    property AsLong: Integer
    property AsString: WideString
    property AsBoolean: Boolean

Используется для считывания и записи значений по текущему индексу. После вызова текущий индекс очищается. Эти свойства можно использовать в матрицах любого типа, при этом значение преобразуется к нужному типу.

    property Cell:TmaCell

Используется для считывания и записи значений по текущему индексу. После вызова текущий индекс очищается. Третье свойство при чтении выдает ячейку с типом данных, в котором значение хранится в матрице, а при записи так же преобразуется к типу данных иатрицы.
Вещественные и строковые матрицы могут содержать "пустые" значения, которые используются, например, для обозначения пропусков в данных. При инициализации матрицы все ее элементы устанавливаются "пустыми". При пустого считывании значения выдается константа, задаваемая функциями SetEmptyDoubleValue, SetEmptyStringValue и SetEmptyLongValue для считывания свойств AsDouble, AsString и AsLong соответственно. Целочисленные и булевские матрицы не поддерживают пустые значения и при создании инициализируются нулями или значением `false`.

    procedure SetEmpty

Функция записывает в матрицу пустое значение. Если матрица не поддерживает пустые значения, то вызовы функции игнорируются.

    function IsEmpty:boolean

Функция проверяет, будет ли значение ячейки матрицы пустым. Если матрица не поддерживает пустые значения, то функция возвращает `false`

    property EmptyDoubleValue:double
    property EmptyLongValue:integer
    property EmptyStringValue:WideString

Свойства Позволяют считывать и записывать константы, которые играют роль "пустых" значений. Эти константы выдаются, если считываемое из матрицы значение пустое. Эти константы не являются глобальными и их можно изменять в процессе работы с матрицей, при этом пустые значения в матрице остаются пустыми. При установке любого из свойств EmptyDoubleValue и EmptyLongValue оба этих свойства изменяются.
По умолчанию эти константы равны NaN для чисел и пустая строка для строк.
Если матрица не поддерживает пустые значения, то вызовы функции игнорируются.

    procedure CacheMatrix(cacheMode:byte; source: TmaMatrix)

Функция позволяет использовать данную матрицу как буфер для матрицы source или отключить буферизацию, если source=nil. При включении буферизации все данные в матрице уничтожаются и размер матрицы становится равным размеру source. Параметр cacheMode выбирает режим буферизации:

  MA_CACHE_READ
Будет создан буфер для чтения и содержимое матрицы source будет прочитано в данную матрицу.
  MA_CACHE_WRITE
Будет создан буфер для записи. При вызове функции Commit матрица source будет очищена и затем в нее будет записано содержимое данной матрицы.
  MA_CACHE_WRITE_THROUGH
Будет создан буфер для записи. При каждой операции записи в данную матрицу значение сразу же будет скопровано и в матрицу source. Вызывать функцию Commit не нужно.
  MA_CACHE_WRITE_APPEND
Будет создан буфер для записи. При вызове функции Commit все непустые элементы данной матрицы будут записаны в матрицу source.

Эта функция будет полезна при написании библиотек алгоритмов в методах, которые в процессе вычислений записывают данные во входные матрицы или считывают их из выходных матриц.

Параметры:

cacheMode режим буферизации
source буферизируемая матрица

    procedure Commit

Функция передает данные в/из буферизуемой матрицы. Конкретное действие этой функции зависит от режима буферизации:

  MA_CACHE_READ
Содержимое буферизуемой матрицы будет повторно прочитано в данную матрицу.
  MA_CACHE_WRITE
Матрица source будет очищена и затем в нее будет записано содержимое данной матрицы.
  MA_CACHE_WRITE_APPEND
Все непустые элементы данной матрицы будут записаны в матрицу source. Содержимое ячеек буферизуемой матрицы, соответствующх пустым элементам данной матрицы, не изменяется.

Пример.

Создание и заполнение двумерной числовой матрицы

    var X:TmaMatrix;
    ...
    X:=TmaMatrix(MA_DOUBLE,[168,7]);
    for i:=0 to X.Size[0] do
      for j:=0 to X.Size[1] do
        X[i][j].AsDouble:=i+j;