Текущий раздел:

Описания RDS

Приложения

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

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

А.4.17. RDS_VARDESCRIPTION – описание переменной блока

# Приложения

## Приложение А. Функции, константы и структуры 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_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 | В точке присоединения связи показывать комментарий вместо имени.

  Для входов и выходов блока флаги RDS_VARFLAG_INPUT, RDS_VARFLAG_OUTPUT и RDS_VARFLAG_RUN устанавливаются не только для переменных, непосредственно находящихся в структуре переменных блока, но и для их элементов. Например, если какая-либо структура является входом, срабатывание связи которого вызывает запуск модели, флаги RDS_VARFLAG_INPUT и RDS_VARFLAG_RUN будут установлены не только у самой этой структуры, но и у всех ее полей.
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.