ГОСТ Р ИСО 13584-25—2010
7.4.4 Функция compatible_aggregate_type_and_value
Функция compatible_aggregate_typo_and_value обеспечивает проверку совместимости типов
entity_instance_type_for_aggregate и aggregato_entityJnstance_value
Сначала данная функция вычисляет тип элементов, содержащихся в агрегированном значении val.
Если конечныйтипданныхагрегированногозначения недоступен, функция возвращаетзначение UNKNOWN
(неизвестно). Если типом агрегированного значения (агрегата) является named_typo, для определения
конечноготипа элементов вызывают функциюdata_type_final_type.
При вычислении окончательного типа проверяют каждый из возможныхагрегированныхтипов (спи
сок, множество, мультимножество, массив инабор подмножеств).
Для каждого агрегата функция выполняет проверку того, что нижняя и верхняя границы значений
соответствуют верхней инижней границам значений при объявлении типа.
Обработку агрегированноготипаданных массива проводят следующим образом.
Длятипа данных массива и его значений функция выполняет проверку того, соответствует ли размер
списка сохраняемых значений the_valuo размеру, указанному при объявлении типа.
Для списка или массива значений, в которых запрещены повторяющиесяэлементы, функция прово
дит проверку того, чтобы ни одно из значений не повторялось в списке tho_vaiue дважды. Для массива,
в элементах которого недопускается использование значений поумолчанию, функция проводит проверку
отсутствия в списке the_value неопределенных значений null_valuo.
После этого функция проводит проверку совместимости всех значений из списка the_valuo с соот
ветствующими типами данных элементов type_of_element. Для проверки совместимости типов и значе
ний данная функция вызывает функцию compatiblo_final_type_and_value путем рекурсивного неявного
вызова.
Спецификация EXPRESS:
*)
FUNCTIONcompatible_aggregate_type_and_va!ue(
the_data_type: entity_instanco_type_for_aggregate.
val: aggregate_entity_instance_value): LOGICAL;
LOCAL
elements: LIST OF nuli_or_primitive_value;
type_of_elements: data_type.
result: LOGICAL;
tmp: LISTOF primitive value := [];
ENDJ.OCAL.
elements;= val.the_value.values;
- - вычисление типа элементов, входящих в агрегат
IF(’ISO13584JEC61630_DICTIONARY_SCHEMA.NAMED_TYPE’ IN
TYPEOF(the_data_type.type_structure.value_type))
THEN
IF(data_type_typeof(the_data_type.type_stajcture.
value_type\named_type.referred_type) =[))
THEN
(*конечная область значений типа неизвестна *)
RETURN(UNKNOWN).
ENDJF;
type_of_elements :=data_type_final_type(the_data_type.
typo_structure.value_type\named_type.referred_type)[1);
ELSE
type_of_e!ements :=the_data_type.type_structure.value_type;
ENDJF;
- - проверка того, что значение агрегата совместимо с его типом, указанным в объявлении
агрегата
IF0ISO135&4_AGGREGATE_VALUE_SCHEMA.LIST_VALUE‘
INTYPEOF (val.the_value))
AND NOT
(’IS013584JEC61360_DICTIONARY_AGGREGATE_EXTENSION_SCHEMA’+
’.LIST_TYPE’ INTYPEOF(the_dataJype.type_structure))
17