Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.15. Работа с матрицами и массивами
Описываются функции, выполняющие различные действия с матрицами и массивами в составе переменных блока.
А.5.15.1. Макрос RDS_ARRAYCOLS – число столбцов матрицы/массива
Макрос RDS_ARRAYCOLS возвращает число столбцов (второй индекс) в статической или динамической переменной блока, являющейся матрицей или массивом. В массиве число строк всегда равно единице, поэтому число столбцов равно числу элементов.
RDS_ARRAYCOLS(
baseaddr // Указатель на переменную
)
Определение
#define RDS_ARRAYCOLS(baseaddr) \ ( *( *((RDSINT32**)(baseaddr))+1 ) )
Параметр
- baseaddr (указатель)
- Указатель (может быть любого типа, в т.ч. и void*) на данные переменной в дереве переменных блока.
Возвращаемое значение
Число столбцов в матрице/массиве.
Примечания
По указателю baseaddr в дереве переменных блока находятся восемь байтов, описывающих матрицу или массив. Четыре первых байта занимает указатель на данные матрицы. Если матрица пуста, этот указатель будет равен NULL, если нет, в области памяти, на которую он указывает, будут размешаться два тридцатидвухбитных целых числа, в первом из которых хранится число строк матрицы, во втором – число столбцов, а за ними будут последовательно размещаться значения элементов матрицы. Макрос RDS_ARRAYCOLS возвращает второе из этих двух чисел. Массивы в RDS хранятся в памяти так же, как и матрицы, поэтому этот макрос можно применять как для матриц, так и для массивов.
Поскольку в макросе RDS_ARRAYCOLS отсутствует проверка указателя на данные матрицы на значение NULL, и он сразу обращается к этим данным, использовать его можно только после проверки на существование матрицы, например, макросом RDS_ARRAYEXISTS. При желании, вместо макросов, работающих непосредственно с данными переменной, для получения описания матрицы или массива можно использовать структуру RDS_ARRAYACCESSDATA и функции, работающие с ней.
Пример
Пример использования макроса RDS_ARRAYCOLS приведен в §2.5.3 руководства программиста.
См. также
RDS_ARRAYROWS, RDS_ARRAYEXISTS, RDS_ARRAYDATA, RDS_ARRAYACCESSDATA.