Ячейка данных способна хранить значение любого типа, как простого, так и объектного. Ячейки используются при записи и чтении данных в матрицах. Из ячеек составляются списки параметров.
Функции класса CmaSubMatrix


CmaCell ();

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

Код ошибки:

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

CmaCell (ImaCell *cell);

Получение доступа к ячейке, заданной своим интерфейсом.
CmaCell (CmaCell &cell);

Создание копии класса-оболочки CmaCell. Указатель на интерфейс копируется и счетчик ссылок на него увеличивается.
~CmaCell ();
Уменьшение числа ссылок на интерфейс и уничтожение объекта.
maType Type();

Функция возвращает тип значения, хранящегося в ячейке.
operator int ();
operator boolean ();
operator double ();
maString AsString ();

Операторы позволяют считывать значения необъектных типов данных из ячейки.
int operator= (int rvalue);
boolean operator= (boolean rvalue);
double operator= (double rvalue);
maString operator= (maString rvalue);

Операторы позволяют записывать значения необъектных типов данных в ячейку.
CmaCell& Default (double rvalue);
CmaCell& Default (maString rvalue);

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

Функцию Default можно вызвать один раз для какой угодно ячейки, чтобы установить значение по умолчанию для всех последующих ячеек. Её также можно вызывать для каждой конкретной ячейки непосредственно перед выполнением преобразования типа (см. пример). Функция Default реализуется через статические члены, однако сама не является статической, поскольку возвращает ссылку на *this:
СmaMatrix& operator= (CmaMatrix& rvalue);
CmaList&   operator= (CmaList& rvalue);
CmaStream& operator= (CmaStream& rvalue);
CmaAlgorithm& operator= (CmaAlgorithm& rvalue);

Операторы позволяют записывать значения объектных типов в ячейку. Для создания объекта (матрицы, списка, метода или потока) по ячейке необходимо воспользоваться конструктором соответствующего объекта с аргументом CmaCell&.
void Copy(CmaCell& source);

Функция копирует содержимое из ячейки source. В отличие от конструктора копируется только содержимое ячейки, но не указатель на нее. Если ячейка source хранит объект, то увеличивается число ссылок на него.
bool  IsEmpty();

Возвращает true если в ячейке - пустое значение (типа MA_EMPTY)
void Clear();

Очищает ячейку (устанавливает ее тип в MA_EMPTY и, если в ячейке хранился объект, уменьшает число ссылок на него).
CmaCell& operator[] (long i);
CmaCell& operator[] (maString i);
Класс переопределяет оператор [ ], чтобы сократить код обращения к спискам, хранящимся в ячейках. Если ячейка не является списком, то новый список создается и заносится в ячейку, затирая её прежнее значение. Несуществующие элементы добавляются в список автоматически:
int Size();

Выдает размер списка, хранящегося в ячейке или 0, если в ячейке списка нет.
void SetConversionStrings(maConvertStrings strings);

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

Функция возвращает формат преобразования, используемый данной ячейкой.
void ClearConversionStrings();

Функция восстанавливает формат преобразования, заданный по умолчанию
Пример. Считывание и запись параметров.
CmaList Param = MethodTune.Param();
double alpha = Param["coeff"][0].Default(0.0);
double beta = Param["coeff"][1].Default(1.0);
CmaMatrix weight = Param["weight"];
int n = weight.Size(0);
for (int i=0; i<n; i++) {
	Param["circle"][i]["x"] = cos(2*PI*i/double(n));
	Param["circle"][i]["y"] = sin(2*PI*i/double(n));
}