ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/hypergraphlib_node.cpp
Revision: 113
Committed: Wed Jun 25 18:44:12 2008 UTC (16 years, 10 months ago) by francois
Original Path: magic/lib/outil/outil/src/HypergraphLib_Node.cpp
File size: 2910 byte(s)
Log Message:
pb de compatibilite windows apres le passage linux de hypergraph

File Contents

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