ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/hypergraphlib_node.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
Original Path: magic/lib/outil/src/HypergraphLib_Node.cpp
File size: 3016 byte(s)
Log Message:
structure de l'écriture

File Contents

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