bool TypeHierarchy::closure(Graph & gr,GI & gi,Nodes & vs,GI & gs,const TypeRef * t) { if(gi == gr.end()) { return false; }; if(*(gi->first) == *t) { for(Nodes::const_iterator i = vs.begin();i != vs.end();++i) { gs->second.insert(*i); //insert(vs.begin(),vs.end()); }; //gs->second.insert(vs.begin(),vs.end()); return true; }; for(Nodes::iterator n = gi->second.begin();n != gi->second.end();++n) { if(vs.find(*n) == vs.end()) { vs.insert(*n); GI tmp = gr.find(*n); if(closure(gr,tmp,vs,gs,t)) return true; }; }; return false; };
void Node::add(const string& str) { string::size_type pos = str.find(c_separator); string name = str.substr(0, pos); Node target(name); CNodeIter iter = m_nodes.find(&target); if (iter == m_nodes.end()) { iter = m_nodes.insert(new Node(name)).first; } if (pos != string::npos) { Node* pNode = *iter; pNode->add(str.substr(pos + 1)); } }
Net_Node* getNode(Net_NodeID id) { if(id == INVALID_NODE_ID) return NULL; Nodes::iterator i = nodes.find(id); if(i != nodes.end()) return i->second; return NULL; }
void add_node(int from){ if(nodes.find(from)==nodes.end()) nodes[from] = new Node(from); }