Статус документа
Статус документа

ГОСТ Р ИСО 10303-11-2009 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

     15.26 Универсальная функция USEDIN


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;
ENTITY circle;

centre

: point;

axis

: vector;

radius

: REAL;

END_ENTITY; ...

(* Правило "example" находит каждую точку, используемую в качестве центра окружности, и затем проверяет, что, по крайней мере, одна из этих точек расположена в начале координат *)

...
RULE example FOR (point);
LOCAL

circles : SET OF circle := [ ]; -- пустой набор окружностей

END_LOCAL;
REPEAT i := LOINDEX(point) TO HIINDEX(point);

circles := circles +

USEDIN (point [i], 'THIS_SCHEMA.CIRCLE.CENTRE' );

END_REPEAT;
WHERE R1 : SIZEOF (

QUERY(

-- начало запроса

at zero <* circles |

-- взять все точки

(at_zero.centre = point(0.0, 0.0, 0.0)) -- в 0, 0, 0

)

)>=1;

-- по крайней мере, одна

END_RULE;