FUNCTION all_members_of_es
(sv : SET [0:?] OF maths_value, es : elementary_space_enumerators) : LOGICAL;
CONSTANT base_types : SET OF STRING := ['NUMBER','COMPLEX_NUMBER_LITERAL','REAL', 'INTEGER','LOGICAL','BOOLEAN','STRING','BINARY','MATHS_SPACE', 'MATHS_FUNCTION','LIST','ELEMENTARY_SPACE_ENUMERATORS','ORDERING_TYPE', 'LOWER_UPPER','SYMMETRY_TYPE','ELEMENTARY_FUNCTION_ENUMERATORS', 'OPEN_CLOSED','SPACE_CONSTRAINT_TYPE','REPACKAGE_OPTIONS', 'EXTENSION_OPTIONS']; END_CONSTANT; LOCAL v : maths_value; key_type : STRING := ''; types : SET OF STRING; ge : generic_expression; cum : LOGICAL := TRUE; vspc : maths_space; END_LOCAL; IF NOT EXISTS (sv) OR NOT EXISTS (es) THEN RETURN (FALSE); END_IF; CASE es OF es_numbers : key_type := 'NUMBER'; es_complex_numbers : key_type := 'COMPLEX_NUMBER_LITERAL'; es_reals : key_type := 'REAL'; es_integers : key_type := 'INTEGER'; es_logicals : key_type := 'LOGICAL'; es_booleans : key_type := 'BOOLEAN'; es_strings : key_type := 'STRING'; es_binarys : key_type := 'BINARY'; es_maths_spaces : key_type := 'MATHS_SPACE'; es_maths_functions : key_type := 'MATHS_FUNCTION'; es_generics : RETURN (TRUE); END_CASE; REPEAT i := 1 TO SIZEOF (sv); IF NOT EXISTS (sv[i]) THEN RETURN (FALSE); END_IF; v := simplify_maths_value(sv[i]); types := stripped_typeof(v); IF key_type IN types THEN SKIP; END_IF; IF (es = es_numbers) AND ('COMPLEX_NUMBER_LITERAL' IN types) THEN SKIP; END_IF; IF SIZEOF (base_types * types) > 0 THEN RETURN (FALSE); END_IF; -- Must be a generic_expression which doesn't simplify and which is not a -- complex_number_literal, maths_space, or maths_function. ge := v; IF has_values_space(ge) THEN vspc := values_space_of(ge); IF NOT subspace_of_es(vspc,es) THEN IF NOT compatible_spaces(vspc,make_elementary_space(es)) THEN RETURN (FALSE); END_IF; cum := UNKNOWN; END_IF; ELSE cum := UNKNOWN; END_IF; IF cum = FALSE THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (cum); END_FUNCTION; -- all_members_of_es
|