/** return ref'd entities */ static void SCHEMA_get_entities_ref( Scope scope, Linked_List result ) { Rename * rename; DictionaryEntry de; if( scope->search_id == __SCOPE_search_id ) { return; } scope->search_id = __SCOPE_search_id; ENTITY_MARK++; /* fully REF'd schema */ LISTdo( scope->u.schema->ref_schemas, schema, Schema ) SCOPE_get_entities( schema, result ); /* don't go down remote schema's ref_schemas */ LISTod /* partially REF'd schema */ DICTdo_init( scope->u.schema->refdict, &de ); while( 0 != ( rename = ( Rename * )DICTdo( &de ) ) ) { if( DICT_type == OBJ_ENTITY ) { LISTadd( result, rename->object ); } } }
/** * \sa SCOPEget_rules() */ void SCOPE_get_rules( Scope scope, Linked_List result ) { DictionaryEntry de; Generic x; DICTdo_type_init( scope->symbol_table, &de, OBJ_RULE ); while( 0 != ( x = DICTdo( &de ) ) ) { LISTadd_last( result, x ); } }
void find_and_print( Express model ) { DictionaryEntry de; Schema s; Entity e; DICTdo_init( model->symbol_table, &de ); while( 0 != ( s = DICTdo( &de ) ) ) { printf( "Schema %s\n", s->symbol.name ); e = DICTlookup( s->symbol_table, entityName ); if( e ) { print_attrs( e ); } } }
static void SCHEMA_get_entities_use( Scope scope, Linked_List result ) { DictionaryEntry de; Rename * rename; if( scope->search_id == __SCOPE_search_id ) { return; } scope->search_id = __SCOPE_search_id; /* fully USE'd schema */ LISTdo( scope->u.schema->use_schemas, schema, Schema ) SCOPE_get_entities( schema, result ); SCHEMA_get_entities_use( schema, result ); LISTod /* partially USE'd schema */ if( scope->u.schema->usedict ) { DICTdo_init( scope->u.schema->usedict, &de ); while( 0 != ( rename = ( Rename * )DICTdo( &de ) ) ) { LISTadd( result, rename->object ); } } }