/* * Main file for the Demeter tree-prop tool. * * tree-prop checks whether the given cd has the tree property and whether * its inheritance hierarchy is multiple or single inheritance. * * $Log: main.C,v $ * Revision 5.4.1.2 1994/10/13 02:15:05 demeter * *** empty log message *** * * Revision 5.4.1.1 1994/05/12 19:04:57 demeter * *** empty log message *** * * Revision 5.4 1994/05/12 19:04:56 demeter * *** empty log message *** * * Revision 5.3.1.1 1994/01/26 19:04:31 huersch * No changes. * * Revision 5.3 1994/01/26 19:04:29 huersch * *** empty log message *** * * Revision 5.2.1.1 1994/01/24 18:49:32 huersch * No changes. * * Revision 5.2 1994/01/24 18:49:26 huersch * *** empty log message *** * * Revision 5.1.1.1 1993/11/15 15:31:27 demeter * *** empty log message *** * * Revision 5.1 1993/11/15 15:31:26 demeter * *** empty log message *** * * Revision 5.0.1.2 1993/10/12 14:41:46 huersch * Installed new command evaluation, uniformed and beautified code. * */ #include "treeprop.h" #include #include void out_of_store() { cerr << "tree-prop: operator new failed, out of store.\n"; exit( 1 ); } #ifndef __GNUC__ extern PF set_new_handler( PF ); #else extern "C" PF set_new_handler( PF ); #endif extern int _demeter_hash(const char* classname); int greeting = _demeter_hash("Greeting"); char *GEN_DIR = getenv("GEN_DIR"); int main( int argc, char *argv[],char *envp[] ) { if (GEN_DIR == NULL) GEN_DIR = "./scanner/"; // just to make sure // command line evaluation const int MAXPATH = 256; char dem_in[MAXPATH]; switch ( argc ) { case 1: strcpy( dem_in, "notmod/cds/cd-param-exp" ); break; // default argument case 2: strcpy( dem_in, argv[1] ); break; default: cerr << "\nUsage: tree-prop [class-dictionary]." << endl; exit( 1 ); } set_new_handler( &out_of_store ); cout <<"\nDemeter utilities -- tree property checker:\n"; /* Parse in cd */ Demeter_in *iDemeter_in = new Demeter_in(); iDemeter_in = (Demeter_in*)iDemeter_in -> g_parse( dem_in ); if ( !iDemeter_in ) { cerr << "tree-prop error: parsing " << dem_in << " failed." << endl; exit ( 1 ); } /* construct set of item sets. */ DemNumber *biggestcardinallity_in = new DemNumber(0); Item_set_list *itemsets_in = new Item_set_list(); Set_of_item_sets *isetofitemsets = new Set_of_item_sets( biggestcardinallity_in , itemsets_in ); iDemeter_in->construct_set_of_item_sets( isetofitemsets ); isetofitemsets->display_sorted(); /* construct belongs to sets */ Belongs_to_set_list *ibelongstosets = new Belongs_to_set_list(); Set_of_belongs_to_sets *isetofbelongstosets = new Set_of_belongs_to_sets(ibelongstosets); isetofitemsets->construct_set_of_belongs_to_sets( isetofbelongstosets); /* tree property check */ int tree_property = 0; Tree_structure_list *itreestructtlist = new Tree_structure_list(); Set_of_tree_structures *isetoftreestructures = new Set_of_tree_structures( itreestructtlist ); if(!isetofbelongstosets->tree_property_checker(isetoftreestructures)){ cout << "\nThe given collection of sets does " << "NOT have the tree property.\n"; cout << "The intersected sets are:\n"; isetofitemsets->diagnostics(); } else{ tree_property = 1; cout << "\nThe given collection of sets DOES have the tree property.\n"; } /* single inheritance reporter */ int single_inheritance = 1; cout << "\n\nDemeter utilities -- Inheritance reporter:\n"; single_inheritance = iDemeter_in->inheritance_reporter(); cout << endl; return ( 0 ); }