Класс является потомком CmaMatrix и оболочкой для интерфейсов ImaSubMatrix и ImaMatrix и предназначен для выделения подматрицы из уже существующей матрицы, называемой родительской (Parent). Подробнее смотри в описании интерфейса ImaSubMatrix.

###### Функции класса CmaSubMatrix

- CmaSubMatrix()
- CmaSubMatrix (ImaMatrix *matrix)
- CmaSubMatrix (const CmaSubMatrix &matrix)
- CmaSubMatrix (CmaCell &cell)
- ~CmaSubMatrix ()
- ImaMatrix* Parent()
- void Parent(CmaMatrix& par)
- void ClearStructure()
- bool VerifyStructure()
- void SetDim(int parentDim,int dim,int size,int *index)
- void FixDim(int parentDim,int index)
- void SetIdentityDim(int dim)

    CmaSubMatrix();

Создание новой подматрицы.

Код ошибки:

MA_ERR_NOINTERFACE если не удалось создать компонент (не вызван CoInitialize() или не зарегистрирован maCom)

    CmaSubMatrix (ImaMatrix *matrix);

Присоединение класса к существующей подматрице, заданной интерфейсом matrix.

Код ошибки:

MA_ERR_NOINTERFACE если matrix не является подматрицей

    CmaSubMatrix (const CmaSubMatrix &matrix);

Присоединение класса к существующей подматрице, заданной в классе matrix.

    CmaSubMatrix (CmaCell &cell);

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

Код ошибки:

MA_ERR_NOINTERFACE если в ячейке хранится не подматрица

    ~CmaSubMatrix ();

Уменьшение числа ссылок на интерфейс и уничтожение объекта.

    ImaMatrix* Parent();
    void Parent(CmaMatrix& par);

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

    void ClearStructure();

Сбрасывает преобразование индекса так, что преобразование индекса не производится.

    bool VerifyStructure();

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

    void SetDim(int parentDim,int dim,int size,int *index);

Функция устанавливает соответствие между размерностью parentDim родительской матрицы и размерностью dim подматрицы.
Если size=0, то таблица преобразования и аргумент index не используется.
Если size≠0 и index=0, то таблица преобразования берется из ранее заданного соответствия с тем же parentDim и длина этой таблицы (и размер подматрицы по размерности dim) устанавливается равным size.
Если size≠0 и index≠0, то таблица преобразования задается параметром index и длина этой таблицы (и размер подматрицы по размерности dim) устанавливается равным size. При этом таблица преобразования не копируется и все изменения массива index будут влиять на преобразование индексов.

Код ошибки:

MA_ERR_BAD_PARAM если parentDim или dim больше размерности соответственно родительской и данной матрицы
MA_ERR_NOTFOUND если size≠0, index=0 и таблица преобразования для размерности dim не была задана ранее

    void FixDim(int parentDim,int index);

Функция фиксирует размерность parentDim родительской матрицы и делает ее равной index.

Код ошибки:

MA_ERR_BAD_PARAM если parentDim больше, чем размерность родительской матрицы

    void SetIdentityDim(int dim);

Функция увеличивает размерность подматрицы, добавляя размерность длины 1. Параметр dim - номер добавляемой размерности. При добавлении существующие размерности dim, dim+1,dim+2... "сдвигаются" на одну, сохраняя соответствия с размерностями родительской матрицы