Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.6. Операции с блоками и связями
А.5.6.20. rdsGetBlockLink – найти очередную связь, соединенную с блоком
Функция rdsGetBlockLink возвращает идентификатор очередной (первой или следующей, в зависимости от параметров) связи, соединенной с заданным блоком.
RDS_CHANDLE RDSCALL rdsGetBlockLink( RDS_BHANDLE Block, // Блок RDS_CHANDLE Conn, // Предыдущая найденная связь BOOL Inputs, // Перебирать связи ко входам BOOL Outputs, // Перебирать связи от выходов RDS_PPOINTDESCRIPTION pPoint // Заполняемое описание точки );
Тип указателя на эту функцию
RDS_ChBhChBBPd
Параметры
- Block (RDS_BHANDLE)
- Идентификатор блока, с которым должна быть соединена связь.
- Conn (RDS_CHANDLE)
- Идентификатор предыдущей найденной связи. В этом параметре передают NULL, если нужно найти самую первую связь, присоединенную к блоку, или результат предыдущего вызова этой функции, если нужно найти следующую связь.
- Inputs (BOOL)
- TRUE, если нужно искать среди связей, соединенных со входами блока Block, и FALSE, если такие связи нужно пропускать.
- Outputs (BOOL)
- TRUE, если нужно искать среди связей, соединенных с выходами блока Block, и FALSE, если такие связи нужно пропускать.
- pPoint (RDS_PPOINTDESCRIPTION)
- Указатель на заполняемую функцией структуру описания точки связи RDS_POINTDESCRIPTION, соединяющей блок Block с найденной связью. Если вызывающей программе не нужно это описание, в этом параметре можно передать NULL.
Возвращаемое значение
Идентификатор найденной связи (RDS_CHANDLE) или NULL, если больше связей не найдено (то есть Conn была последней связью, соединенной с блоком Block).
Примечания
Эта функция позволяет последовательно перебрать все связи, соединенные с указанным блоком. Для этого нужно сначала вызвать ее с параметром NULL для поиска самой первой связи, а затем вызывать в цикле, каждый раз передавая в параметре Conn идентификатор предыдущей найденной связи, то есть результат ее прошлого вызова. Цикл нужно завершить тогда, когда функция вернет NULL, указывая на то, что больше соединенных связей нет:
RDS_CHANDLE cn=NULL; for(;;) { // Очередная связь, соединенная с блоком Block cn=rdsGetBlockLink(Block,cn,TRUE,TRUE,NULL); if(cn==NULL) // Больше нет связей break; // Какие-то действия со связью cn ... }
Такой перебор может использоваться, например, для визуального выделения связей, или при анализе графа схемы.
Параметры Inputs и Outputs определяют допустимые направления связей – включать ли в поиск связи, соединенные с входами и выходами блока соответственно. Хотя бы один из них должен иметь значение TRUE, иначе функция не найдет ни одной связи. Функция перебирает связи в порядке, определяемом внутренней логикой RDS, программист никак не может изменить этот порядок.
Пример
Примеры использования функции rdsGetBlockLink приведены в §2.7.4 и §2.13.4 руководства программиста.
См. также
RDS_POINTDESCRIPTION, rdsEnumConnectedBlocks, rdsEnumConnectedBlocksByVar.