FUNCTION USEDIN (T : GENERIC ; R : STRING) : BAG OF GENERIC_ENTITY;
Функция USEDIN возвращает все экземпляры объекта, в которых используется указанный экземпляр объекта в указанной роли.
Параметры:
a) Т - любой экземпляр любого объектного типа данных.
b) R - строка, содержащая полностью уточненное имя атрибута (роли), в соответствии с 15.20.
Результат: все экземпляры объекта, в которых используется указанный экземпляр объекта в указанной роли, возвращаются в форме пакета (типа данных BAG).
Если экземпляр Т не исполняет никаких ролей или роль R не указана, то возвращается пустой пакет.
Если R представлен пустой строкой, то документируется каждое использование Т. Проверяют все взаимосвязи, направленные к Т. Если взаимосвязь исходит от атрибута с именем R, то экземпляр объекта, содержащий данный атрибут, добавляется к возвращаемому пакету. Отметим, что, если Т не используется, то возвращается пустой пакет.
Пример - Данный пример показывает, как может быть использовано правило для проверки того, что должна существовать точка (объект point) в начале координат, используемая как центр окружности. Заметим, что в данном примере выражение QUERY (см. 12.6.7) используется в качестве параметра функции SIZEOF.
ENTITY point; | ||||||||||
х, у, z : REAL; | ||||||||||
END_ENTITY; | ||||||||||
centre | : point; | |||||||||
axis | : vector; | |||||||||
radius | : REAL; | |||||||||
END_ENTITY; ... (* Правило "example" находит каждую точку, используемую в качестве центра окружности, и затем проверяет, что, по крайней мере, одна из этих точек расположена в начале координат *) ... | ||||||||||
circles : SET OF circle := [ ]; -- пустой набор окружностей | ||||||||||
END_LOCAL; | ||||||||||
circles := circles + | ||||||||||
USEDIN (point [i], 'THIS_SCHEMA.CIRCLE.CENTRE' ); | ||||||||||
END_REPEAT; | ||||||||||
QUERY( | -- начало запроса | |||||||||
at zero <* circles | | -- взять все точки | |||||||||
(at_zero.centre = point(0.0, 0.0, 0.0)) -- в 0, 0, 0 | ||||||||||
) | ||||||||||
)>=1; | -- по крайней мере, одна | |||||||||
END_RULE; |