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

Описания RDS

Приложения

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

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

А.5.6. Операции с блоками и связями

А.5.6.12. rdsEnumConnectedBlocks – перебрать все соединенные блоки

# Приложения

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

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

#### А.5.6. Операции с блоками и связями

##### А.5.6.12. rdsEnumConnectedBlocks – перебрать все соединенные блоки

Функция rdsEnumConnectedBlocks вызывает пользовательскую функцию, указатель на которую передается в параметрах, для блоков, соединенных связями с заданным.

      RDS_BHANDLE RDSCALL rdsEnumConnectedBlocks(
        RDS_BHANDLE Block,        // Заданный блок
        DWORD Flags,              // Флаги (RDS_BEN_*)
        RDS_BhPdPdpV CallBack,    // Функция пользователя
        LPVOID Data               // Параметр функции пользователя
      );

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

RDS_BhBhDwCb1pV

Параметры

Block(RDS_BHANDLE)
  Идентификатор блока, связи которого перебираются. Для соединенных с ним блоков будет вызвана функция пользователя CallBack.
Flags(DWORD)
  Набор битовых флагов, управляющих работой функции, объединенных битовым ИЛИ:

  RDS_BEN_INPUTS | Вызывать функцию CallBack для блоков, соединенных связями с входами блока Block.
  RDS_BEN_OUTPUTS | Вызывать функцию CallBack для блоков, соединенных связями с выходами блока Block.
  RDS_BEN_TRACELINKS | Если этот флаг не установлен, функция CallBack будет вызываться для всех блоков, непосредственно соединенных связями с блоком Block. Если флаг установлен, RDS будет прослеживать связи до простых блоков и вызывать функцию только для них (см. ниже).

CallBack(RDS_BhPdPdpV)
  Указатель на пользовательскую функцию, которую нужно вызвать для каждого блока, удовлетворяющего параметрам функции. Пользовательская функция должна иметь следующий вид:

        BOOL RDSCALL имя_функции(
            RDS_PPOINTDESCRIPTION pNearPoint,
            RDS_PPOINTDESCRIPTION pFarPoint,
            LPVOID param)

  В параметре pNearPoint пользовательской функции передается указатель на структуру RDS_POINTDESCRIPTION, описывающую точку связи, соединяющую эту связь с блоком Block. В параметре pFarPoint передается указатель на структуру описания точки связи, соединяющей ее с найденным блоком на другом конце этой связи (идентификатор этого блока содержится в структуре описания точки). Следует помнить, что при взведенном флаге RDS_BEN_TRACELINKS эти точки могут принадлежать разным связям. В параметре param передается параметр Data функции rdsEnumConnectedBlocks (см. ниже) без какой-либо обработки. Функция пользователя должна вернуть TRUE, если перебор блоков необходимо продолжить, и FALSE, если его нужно немедленно остановить.
Data(LPVOID)
  Параметр типа void*, без изменений передаваемый в пользовательскую функцию в параметре param при каждом ее вызове.

Возвращаемое значение

Идентификатор блока (RDS_BHANDLE), для которого функция пользователя вернула FALSE. Если функция пользователя всегда возвращала TRUE (перебраны все соединенные блоки), вместо идентификатора блока возвращается NULL.

Примечания

Функция rdsEnumConnectedBlocks обычно используется для выполнения каких-либо однотипных действий над блоками, соединенными с заданным. Например, с ее помощью можно информировать блоки, соединенные с выходами данного, об изменении значения выхода (обычно так осуществляется принудительная передача данных по связям вне режима расчета, см. §1.6 руководства программиста).

Работой функции управляют битовые флаги, передаваемые в параметре Flags. Флаги RDS_BEN_INPUTS и RDS_BEN_OUTPUTS позволяют вызывать пользовательскую функцию только для блоков, соединенных с выходами данного или только для блоков, соединенных с входами (для вызова функции у всех соединенных блоков независимо от направления связи следует указать оба флага). Флаг RDS_BEN_TRACELINKS управляет прослеживанием связей внутрь и наружу подсистем. Если он сброшен, функция CallBack будет вызываться только у блоков, непосредственно соединенных с блоком Block в его родительской подсистеме, при этом вложенные подсистемы и внешние входы и выходы будут считаться конечными точками связи – RDS не будет отслеживать эту связь дальше внутрь вложенной подсистемы или наружу родительской. Если же флаг RDS_BEN_TRACELINKS взведен, функция будет отслеживать каждую связь внутрь и наружу подсистем через внешние входы и выходы и вызывать функцию CallBack только для простых блоков, находящихся в конце такой цепочки связей.

Функция перебирает соединенные блоки в порядке, определяемом внутренней логикой RDS, программист никак не может изменить этот порядок.

Параметр Data, имеющий тип LPVOID (произвольный указатель), передается в вызываемую функцию пользователя без изменений. Это единственный способ передать ей какие-либо данные: например, можно передать указатель на какую-либо структуру, а внутри пользовательской функции привести его к нужному типу и обращаться к полям этой структуры.

Пример

Пример использования функции rdsEnumConnectedBlocks приведен в §2.13.2 и §2.13.4 руководства программиста.

См. также

rdsEnumBlocks, rdsEnumConnectedBlocksByVar, rdsGetBlockLink, RDS_POINTDESCRIPTION.