node_map &CServer::get_sibling_set_writable( CNode &node ) { CNode *parent = node.get_parent_writable(); if( parent ) { return parent->get_children_writable(); } else { return m_nodes; } }
void CStateTable::add( CNode &node ) { /* add self to path map */ const string &path = node.get_path(); if( m_nodes.count( path ) > 0 ) { INTEGRA_TRACE_ERROR << "duplicate key in state table: " << path; } else { m_nodes[ path ] = &node; } /* add self to id map */ internal_id id = node.get_id(); if( m_nodes_by_id.count( id ) > 0 ) { INTEGRA_TRACE_ERROR << "duplicate key in state table: " << id; } else { m_nodes_by_id[ id ] = &node; } /* add node endpoints */ node_endpoint_map node_endpoints = node.get_node_endpoints_writable(); for( node_endpoint_map::const_iterator i = node_endpoints.begin(); i != node_endpoints.end(); i++ ) { INodeEndpoint *node_endpoint = i->second; const string &path = node_endpoint->get_path(); if( m_node_endpoints.count( path ) > 0 ) { INTEGRA_TRACE_ERROR << "duplicate key in state table: " << path; } else { m_node_endpoints[ path ] = node_endpoint; } } /* add child nodes */ node_map &children = node.get_children_writable(); for( node_map::iterator i = children.begin(); i != children.end(); i++ ) { add( *CNode::downcast_writable( i->second ) ); } }