Навигация:
<< >> Оглавление Указатель

Приложения

Приложение А. Функции, константы и структуры RDS

А.4. Структуры RDS

Описываются структуры, используемые в различных сервисных функциях RDS.

А.4.1. RDS_ARRAYACCESSDATA – описание матрицы/массива

Структура RDS_ARRAYACCESSDATA может использоваться для упрощения доступа к массиву или матрице в составе статических или динамических переменных блока. Массивы и матрицы в RDS устроены одинаково (массив – это матрица с единственной строкой), поэтому эта структура описывает и массивы, и матрицы.

Работать с массивами и матрицами можно и без этой структуры, разбирая дерево переменных блока вручную или при помощи специальных макросов (см. приложение А.5.15).

  typedef struct {
     Exists;        // TRUE - массив существует (то есть не 0x0)
     Rows,Cols; // Размерность массива
     ItemSize;  // Размер элемента массива
     Data;        // Начало области данных массива
  } RDS_ARRAYACCESSDATA;
  typedef RDS_ARRAYACCESSDATA *RDS_PARRAYACCESSDATA;

Поля структуры

Exists (BOOL)
TRUE, если матрица (массив) существует, то есть имеет хотя бы один элемент, и FALSE, если она пуста.
Rows (RDSINT32)
Число строк в матрице (массиве), если она не пуста. Для непустого массива в этом поле всегда записана единица.
Cols ()
Число столбцов в матрице (массиве).
ItemSize ()
Размер одного элемента матрицы или массива в байтах. Элементы массивов и матриц хранятся в памяти последовательно, поэтому это поле можно использовать для определения указателя на элемент с нужным номером (следует помнить, что в RDS нумерация элементов массивов и матриц начинается с нуля). Например, чтобы получить смещение в байтах от начала массива к элементу с индексом 8 (то есть к его девятому элементу), нужно умножить ItemSize на восемь.
Data (LPVOID)
Указатель на нулевой (самый первый) элемент массива или матрицы. Начиная с этого указателя, элементы массива хранятся последовательно, элементы матрицы – последовательно по строкам.

Поле Data структуры RDS_ARRAYACCESSDATA имеет тип void*, то есть «указатель общего вида», поэтому для работы с элементами массива или матрицы его нужно привести к нужному типу. Например, для матрицы вещественных чисел двойной точности (double) обращение к элементу с индексом строки 2 и индексом столбца 3 будет выглядеть так:

  RDS_ARRAYACCESSDATA adata;
  // ... здесь должно быть заполнение структуры adata
  // какой-либо сервисной функцией ...
  double a_2_3=((double*)(adata.Data))[2*adata.Cols+3];

Пример

Пример использования структуры RDS_ARRAYACCESSDATA приведен в §2.5.3 руководства программиста.

См. также

rdsGetVarArrayAccessData, RDS_ARRAYITEMADDR, RDS_ARRAYITEM.


<< >> Оглавление Указатель