Приложения
Приложение А. Функции, константы и структуры RDS
А.4. Структуры RDS
А.4.17. RDS_VARDESCRIPTION – описание переменной блока
Структура RDS_VARDESCRIPTION используется для получения описания переменной блока и заполняется различными сервисными функциями. Примеры ее использования приведены в §2.7.4 и §2.16.1 руководства программиста.
typedef struct { DWORD servSize; // Размер этой структуры в байтах RDSINT32 Type; // Тип переменной (RDS_VARTYPE_*) DWORD Flags; // Флаги (RDS_VARFLAG_*) // Имя переменной RDSCSTR NameA; // UTF8 RDSWCSTR NameW; // UTF16 //RDSXCSTR Name; // поле-псевдоним // Имя типа структуры или NULL RDSCSTR StructTypeA; // UTF8 RDSWCSTR StructTypeW; // UTF16 //RDSXCSTR StructType; // поле-псевдоним RDSINT32 StructFields; // Число полей (только для структур) RDSINT32 DataSize; // Размер блока данных RDS_VHANDLE Var; // Идентификатор переменной RDSINT32 Rank; // Уровень переменной // Комментарий переменной RDSCSTR RemarkA; // UTF8 RDSWCSTR RemarkW; // UTF16 //RDSXCSTR Remark; // поле-псевдоним } RDS_VARDESCRIPTION; typedef RDS_VARDESCRIPTION *RDS_PVARDESCRIPTION;
Поля структуры
- servSize (DWORD)
- Размер этой структуры в байтах. Перед вызовом любой сервисной функции, работающей с этой структурой, полю servSize необходимо присвоить значение sizeof(RDS_VARDESCRIPTION).
- Type (RDSINT32)
- Символ типа переменной (одна из констант RDS_VARTYPE_*).
- Flags (DWORD)
- Набор битовых флагов переменной:
Для входов и выходов блока флаги RDS_VARFLAG_INPUT, RDS_VARFLAG_OUTPUT и RDS_VARFLAG_RUN устанавливаются не только для переменных, непосредственно находящихся в структуре переменных блока, но и для их элементов. Например, если какая-либо структура является входом, срабатывание связи которого вызывает запуск модели, флаги RDS_VARFLAG_INPUT и RDS_VARFLAG_RUN будут установлены не только у самой этой структуры, но и у всех ее полей.
RDS_VARFLAG_INPUT Переменная является входом блока (не может быть установлен одновременно с RDS_VARFLAG_OUTPUT). RDS_VARFLAG_OUTPUT Переменная является выходом блока (не может быть установлен одновременно с RDS_VARFLAG_INPUT). RDS_VARFLAG_RUN При срабатывании данного входа автоматически запускается модель (только для переменных – входов блока). RDS_VARFLAG_MENU Имя переменной присутствует в меню присоединения связи к блоку (только для входов и выходов блоков). RDS_VARFLAG_SHOWNAME Имя переменной отображается рядом с конечной точкой присоединенной к ней связи (только для входов и выходов блоков, считывается только в момент создания новой связи – далее отображение имени уже определяется параметрами точки этой связи). RDS_VARFLAG_ONEINDEX Переменная – массив, а не матрица, то есть для ее элементов используется один индекс, а не два (только для переменных типа RDS_VARTYPE_ARRAY). RDS_VARFLAG_MULTICONN При присоединении связи в меню выбора переменной не скрывать этот вход, если к нему уже присоединена связь. Обычно RDS не показывает в меню присоединения входы блока, на которые уже передаются данные по связям. Однако, при передаче сигналов присоединение нескольких связей к одному входу имеет смысл – получается сигнальная схема «ИЛИ». RDS_VARFLAG_REMNAME В точке присоединения связи показывать комментарий вместо имени. - NameA (RDSCSTR), NameW (RDSWCSTR), Name (RDSXCSTR)
- Указатель на строку во внутренней памяти RDS, в которой хранится имя данной переменной. Функция модели не должна как-либо изменять эту строку, для изменения и переименования переменных блока следует использовать вспомогательный объект, создаваемый функцией rdsVSCreateEditor.
- StructTypeA (RDSCSTR), StructTypeW (RDSWCSTR), StructType (RDSXCSTR)
- Указатель на строку во внутренней памяти RDS, в которой хранится название типа структуры, если данная переменная является структурой (тип RDS_VARTYPE_STRUCT). Функция модели не должна изменять эту строку. Если переменная структурой не является, или у структуры нет имени, в этом поле находится значение NULL.
- StructFields (RDSINT32)
- Число полей в переменной, если она является структурой (тип RDS_VARTYPE_STRUCT). Для всех остальных переменных в это поле записывается ноль.
- DataSize (RDSINT32)
- Размер в байтах блока данных этой переменной (см. §1.5 и §2.5 руководства программиста), то есть объем памяти, который занимает эта переменная в дереве переменных блока. Например, вещественная переменная двойной точности (double, тип RDS_VARTYPE_DOUBLE) занимает в памяти восемь байтов, строка (тип RDS_VARTYPE_STRING) – четыре байта, поскольку в дереве переменных хранится только указатель на строку, и т.п.
- Var (RDS_VHANDLE)
- Уникальный идентификатор данной переменной для использования в различных сервисных функциях.
- Rank (RDSINT32)
- Уровень данной переменной, то есть максимальная вложенность элементов в этой переменной. Например, для любой простой переменной уровень будет равен нулю, для массива или матрицы вещественных чисел – единице (один вложенный элемент), для матрицы матриц целых – двум (внутри этой матрицы – еще одна матрица, внутри которой – целое число, то есть в переменной два элемента, вложенных один в другой). Для структуры уровень будет числом, на единицу большим максимального уровня всех ее полей.
- RemarkA (RDSCSTR), RemarkW (RDSWCSTR), Remark (RDSXCSTR)
- Указатель на строку с комментарием переменной или на пустую строку, если его нет. Функция модели не должна как-либо изменять эту строку, для изменения и переименования переменных блока следует использовать вспомогательный объект, создаваемый функцией rdsVSCreateEditor.
См. также
RDS_BFM_VARCHECK, rdsGetBlockVar, rdsFindStructVar, rdsGetStructVar, rdsGetVarField, rdsFindBlockVar, rdsSetBlockVarFlags, rdsVSCreateEditor, rdsVSGetVarDescription.