#include "pp.h" void Cd_graph::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj ) { DEM_TRACE("Cd_graph","void Cd_graph::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj)"); // prefix class wrappers adjacencies->collectDelayBindForTrans(schema,ps,considered,currAdj); // suffix class wrappers } void Adjacency_Nlist::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj ) { DEM_TRACE("Adjacency_Nlist","void Adjacency_Nlist::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj)"); // prefix class wrappers Adjacency_list_iterator next(*this); Adjacency* each; while (each = next()) if (each->get_source()->equal(currAdj->get_source())) break; assert(each); each->collectDelayBindForTrans(schema,ps,considered,currAdj); // suffix class wrappers } void Adjacency::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj ) { DEM_TRACE("Adjacency","void Adjacency::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj)"); // prefix class wrappers if (this->get_superclasses()) this->get_superclasses()->collectDelayBindForTrans(schema,ps,considered,currAdj); // suffix class wrappers } void Vertex_List::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj ) { DEM_TRACE("Vertex_List","void Vertex_List::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj)"); // prefix class wrappers Vertex_list_iterator next(*this); Vertex* each; while (each = next()) { Adjacency_list_iterator nexta(*schema->get_adjacencies()); Adjacency* eacha; while (eacha = nexta()) if (eacha->get_source()->equal(each)) break; assert(eacha); ps->get_paths()->collectDelayBindForTrans(schema,ps,considered,currAdj,each); eacha->collectDelayBindForTrans(schema,ps,considered,currAdj); } // suffix class wrappers } void Cd_graph::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj,Vertex* currSuper ) { DEM_TRACE("Cd_graph","void Cd_graph::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj,Vertex* currSuper)"); // prefix class wrappers adjacencies->collectDelayBindForTrans(schema,ps,considered,currAdj,currSuper); // suffix class wrappers } void Adjacency_Nlist::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj,Vertex* currSuper ) { DEM_TRACE("Adjacency_Nlist","void Adjacency_Nlist::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj,Vertex* currSuper)"); // prefix class wrappers Adjacency_list_iterator next(*this); Adjacency* each; while (each = next()) if (each->get_source()->equal(currSuper)) break; if (each) each->collectDelayBindForTrans(schema,ps,considered,currAdj,currSuper); // suffix class wrappers } void Adjacency::collectDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj,Vertex* currSuper ) { DEM_TRACE("Adjacency","void Adjacency::collectDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency_List* considered,Adjacency* currAdj,Vertex* currSuper)"); // prefix class wrappers if (this->get_inarguments() == NULL && currAdj->get_inarguments() == NULL) return; if (this->get_inarguments() && currAdj->get_inarguments() && this->get_inarguments()->g_equal(currAdj->get_inarguments())) return; Adjacency_list_iterator next(*considered); Adjacency* each; while (each = next()) { if (each->get_inarguments() == NULL && this->get_inarguments() == NULL) return; if (each->get_inarguments() && this->get_inarguments() && each->get_inarguments()->g_equal(this->get_inarguments())) return; } if (!each) considered->insert(this); // suffix class wrappers } // Adjacency = Vertex // [ Vertex_Commalist ] // Neighbors // *l // [ Param_decl_Commalist ] // [ Param_decl_Commalist ] // [ Param_assignment_List ] // [ DemString ] // [ DemString ] // [ DemString ] // [ Signature_Commalist ] // [ Vertex_List ] // [ $int ] // [ DemNumber ] // [ DemNumber ] // [ DemNumber ] // "." . void Adjacency::printDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency* currAdj,Carry_or_wrapper_List* frags,Header* hdr,ofstream& strm ) { DEM_TRACE("Adjacency","void Adjacency::printDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency* currAdj,Carry_or_wrapper_List* frags,Header* hdr,ofstream& strm)"); // variables for carrying in and out // assignments for carrying in // prefix class wrappers // The current class should be checked whether it is used. // If it is not used, don't do the following. // This is FUTURE work. int r = 1; hdr->isAFunc(r); // generate signature hdr->printExtHdr(r,strm,currAdj->get_source(),this->get_inarguments()); strm << " // variable definitions for carrying in and out\n"; if (this->get_inarguments() == NULL) currAdj->get_inarguments()->genCarryVarDefs(strm); else if (currAdj->get_inarguments() != NULL) { Param_decl_Commalist* newargs = new Param_decl_Commalist(); Param_decl_list_iterator next2(*currAdj->get_inarguments()); Param_decl* each2; while (each2 = next2()) { Param_decl_list_iterator next3(*this->get_inarguments()); Param_decl* each3; while (each3 = next3()) if (each3->get_param_name()->g_equal(each2->get_param_name())) break; if (each3 == NULL) newargs->append(each2); } if (newargs->list_length()) newargs->genCarryVarDefs(strm); delete newargs; } strm << "\n"; strm << " this->"; hdr->printRepCallSig(strm,currAdj->get_inarguments()); strm << ";\n\n"; strm << "}\n\n"; // outgoing calls // suffix class wrappers // assignments for carrying out } // Adjacency_List ~ { Adjacency }. . void Adjacency_List::printDelayBindForTrans( Cd_graph* schema,Propagation_schema* ps,Adjacency* currAdj,Carry_or_wrapper_List* frags,Header* hdr,ofstream& strm ) { DEM_TRACE("Adjacency_List","void Adjacency_List::printDelayBindForTrans(Cd_graph* schema,Propagation_schema* ps,Adjacency* currAdj,Carry_or_wrapper_List* frags,Header* hdr,ofstream& strm)"); // variables for carrying in and out // assignments for carrying in // prefix class wrappers // outgoing calls Adjacency_list_iterator next_Adjacency(*this); Adjacency* each_Adjacency; while ( each_Adjacency = next_Adjacency() ) { // repetition edge prefix wrappers each_Adjacency->printDelayBindForTrans( schema , ps , currAdj , frags , hdr , strm ); // repetition edge suffix wrappers } // suffix class wrappers // assignments for carrying out }