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

Описания RDS

Приложения

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

А.5. Сервисные функции и макросы RDS

А.5.14. Общие функции работы с переменными блока

А.5.14.3. rdsClearRuntimeType – очистка переменной произвольного типа

# Приложения

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

### А.5. Сервисные функции и макросы RDS

#### А.5.14. Общие функции работы с переменными блока

##### А.5.14.3. rdsClearRuntimeType – очистка переменной произвольного типа

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

      void RDSCALL rdsClearRuntimeType(
        LPVOID BaseAddr    // Базовый адрес переменной
      );

Тип указателя на эту функцию

RDS_VpV

Параметр

BaseAddr(LPVOID)
  Базовый адрес переменной в дереве, то есть указатель на блок из восьми байтов, которые эта переменная занимает в дереве переменных блока (см. §2.5.6 руководства программиста).

Примечания

Вызов этой функции присваивает указанной переменной пустой фактический тип.

Пример

Модель блока-переключателя (мультиплексора), который подает на выход «y» произвольного типа элемент входного массива переменных произвольного типа «X» с номером, определяемым целым входом «N». Если «N» меньше нуля или больше числа элементов в массиве «X», выход «y» очищается, то есть ему присваивается пустой фактический тип.

Блок должен иметь следующую структуру переменных:

Смещение | Имя | Тип | Размер | Вход/выход | Пуск | Начальное значение
--- | --- | --- | --- | --- | --- | ---
0 | Start | Сигнал | 1 | Вход | ✓ | 0
1 | Ready | Сигнал | 1 | Выход |  | 0
2 | X | Массив произвольных | 8 | Вход | ✓ |
10 | N | int | 4 | Вход | ✓ | 0
14 | y | Произвольный | 8 | Выход |  |

Модель блока:

      extern "C" __declspec(dllexport) int RDSCALL MultiplexMVariant(
          int CallMode,RDS_PBLOCKDATA BlockData,LPVOID ExtParam)
      // Макросы для переменных
      #define pStart ((char *)(BlockData->VarTreeData))
      #define pReady ((char *)(pStart+1))
      #define pX ((void **)(pStart+2))
      #define pN ((int *)(pStart+10))
      #define py ((void **)(pStart+14))
      {
        switch(CallMode)
          { case RDS_BFM_VARCHECK:
              if(strcmp((char*)ExtParam,"{SSMVIV}")==0)
                return RDS_BFR_DONE;
              return RDS_BFR_BADVARSMSG;

            case RDS_BFM_MODEL:
              if(RDS_ARRAYEXISTS(pX)) // Массив X не пустой
                { int n=RDS_ARRAYROWS(pX)*RDS_ARRAYCOLS(pX),N=*pN;
                  BYTE *data=(BYTE*)RDS_ARRAYDATA(pX); // 1-й элемент
                  if(N>=0 && N<n) // Копируем в выход
                    rdsCopyRuntimeType(py,data+N*2*sizeof(void*));
                  else
                    rdsClearRuntimeType(py); // Очищаем выход
                }
              else // Нет массива X
                rdsClearRuntimeType(py); // Очищаем выход
              break;
          }
        return RDS_BFR_DONE;
      }
      #undef py
      #undef pN
      #undef pX
      #undef pReady
      #undef pStart
      //=========================================

См. также

rdsCopyRuntimeType, rdsSetRuntimeType, rdsGetBlockVarBase.