Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.6. Операции с блоками и связями
А.5.6.29. rdsGetIOBlockLink – очередная связь снаружи подсистемы по идентификатору внутреннего блока-входа или выхода
Функция rdsGetIOBlockLink возвращает идентификатор очередной (первой или следующей) связи, присоединенной к переменной подсистемы, соответствующей переданному в параметрах функции идентификатору блока-входа или выхода.
RDS_CHANDLE RDSCALL rdsGetIOBlockLink( RDS_BHANDLE Block, // Блок-вход или выход RDS_CHANDLE Conn, // Предыдущая связь RDS_PPOINTDESCRIPTION pPoint // Заполняемое описание точки );
Тип указателя на эту функцию
RDS_ChBhChPd
Параметры
- Block (RDS_BHANDLE)
- Идентификатор внешнего входа или выхода, для которого нужно найти внешнюю связь.
- Conn (RDS_CHANDLE)
- Идентификатор предыдущей найденной связи, если нужно найти следующую, или NULL, если нужно найти самую первую связь.
- pPoint (RDS_PPOINTDESCRIPTION)
- Указатель на заполняемую функцией структуру описания точки соединения найденной связи с родительской подсистемой блока Block (RDS_POINTDESCRIPTION). Если вызывающей программе не нужно это описание, в этом параметре можно передать NULL.
Возвращаемое значение
Идентификатор найденной связи (RDS_CHANDLE) или NULL, если связь не найдена.
Примечания
Эта функция позволяет перебрать все связи, идущие к переменной подсистемы, соответствующей ее внутреннему блоку-внешнему входу или выходу Block. Чаще всего она используется для прослеживания связей наружу подсистемы в процессе программного анализа структуры схемы: обнаружив соединение какой-либо связи с блоком-входом или выходом, с помощью rdsGetIOBlockLink можно найти все связи, которые являются логическим продолжением этой связи снаружи подсистемы.
Для перебора всех наружных связей нужно сначала вызвать функцию с параметром Conn, равным NULL, для поиска самой первой связи, а затем вызывать ее в цикле, каждый раз передавая в параметре Conn идентификатор предыдущей найденной связи, то есть результат ее прошлого вызова. Цикл нужно завершить тогда, когда функция вернет NULL, указывая на то, что больше связей нет:
RDS_CHANDLE conn=NULL; for(;;) { // Очередная связь, соединенная с переменной, // соответствующей блоку IOBlock conn=rdsGetIOBlockLink(IOBlock,conn,NULL); if(c==NULL) // Больше нет связей break; // Какие-то действия со связью conn (снаружи подсистемы) ... }
См. также
rdsGetIOBlockByVarName, rdsGetBlockLink, RDS_POINTDESCRIPTION.