ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/hypergraphlib_node.cpp
Revision: 27
Committed: Thu Jul 5 15:26:40 2007 UTC (17 years, 10 months ago) by foucault
Original Path: magic/lib/outil/outil/src/HypergraphLib_Node.cpp
File size: 2851 byte(s)
Log Message:

File Contents

# User Rev Content
1 foucault 27 #include <iostream>
2    
3     #pragma hdrstop
4    
5     #include "HypergraphLib_platform.h"
6    
7     #include "HypergraphLib_Node.h"
8     #include "HypergraphLib_Arc.h"
9    
10    
11     namespace HypergraphLib {
12    
13     Node::Node (Graph * __owner, int __id)
14     : GraphObject(__owner, __id)
15     {
16    
17     }
18    
19     Node::Node (const Node & __from, const Graph * __owner)
20     : GraphObject (__from, __owner)
21     {
22     }
23    
24     void Node::Add (Arc *__incidentArc)
25     {
26     _arcs.insert( IntArc_Pair(__incidentArc->Id(), __incidentArc) );
27     }
28    
29     int Node::Remove (int __id)
30     {
31     int result=0;
32     MultimapArcsById::iterator it = _arcs.find ( __id );
33     result = (it != _arcs.end());
34     if (result)
35     {
36     _arcs.erase ( it );
37     it = _arcs.find ( __id );
38     }
39     else
40     {
41     std::cout << "Error: Graph::RemoveArc ( "<<__id<<" )"<<std::endl;
42     std::cout << "\t the arc was not found !\n"<<__id<<" )"<<std::endl;
43     }
44     return result;
45     }
46    
47     unsigned int Node::ArcCount (int __id)
48     {
49     return _arcs.count ( __id );
50     }
51    
52    
53     void Node::AdjacentNodes ( std::set < int > & __adjacentNodes )
54     {
55     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
56     itArcs != _arcs.end();
57     itArcs++ )
58     {
59     Arc * arc = itArcs->second;
60     for (Arc::MultimapNodesById::const_iterator itNodes = arc->Nodes().begin();
61     itNodes != arc->Nodes().end();
62     itNodes++)
63     {
64     int id = itNodes->first;
65    
66     if ( id != _id && __adjacentNodes.find(id) == __adjacentNodes.end() )
67     __adjacentNodes.insert(id);
68     }
69     }
70     }
71    
72     void Node::AdjacentNodes ( std::set < Node * > & __adjacentNodes )
73     {
74     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
75     itArcs != _arcs.end();
76     itArcs++ )
77     {
78     Arc * arc = itArcs->second;
79     for (Arc::MultimapNodesById::const_iterator itNodes = arc->Nodes().begin();
80     itNodes != arc->Nodes().end();
81     itNodes++)
82     {
83     int id = itNodes->first;
84    
85     if ( id != _id && __adjacentNodes.find(itNodes->second) == __adjacentNodes.end() )
86     __adjacentNodes.insert(itNodes->second);
87     }
88     }
89     }
90    
91    
92     Arc *
93     Node::IsAdjacentToNode ( Node * __n )
94     {
95     return IsAdjacentToNode(__n->Id());
96     }
97    
98     Arc *
99     Node::IsAdjacentToNode ( int __nodeId )
100     {
101     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
102     itArcs != _arcs.end();
103     itArcs++ )
104     {
105     Arc * arc = itArcs->second;
106    
107     if (arc->Nodes().find(__nodeId ) != arc->Nodes().end())
108     return arc;
109     }
110     return 0;
111     }
112    
113     int
114     Node::GetNbArcsToNode(Node * __other)
115     {
116     int result = 0;
117     int __nodeId = __other->Id();
118     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
119     itArcs != _arcs.end();
120     itArcs++ )
121     {
122     Arc * arc = itArcs->second;
123    
124     if (arc->Nodes().find(__nodeId ) != arc->Nodes().end())
125     result++;
126     }
127     return result;
128     }
129    
130     } // end namespace HypergraphLib