ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/hypergraphlib_node.cpp
Revision: 569
Committed: Thu Oct 16 14:36:31 2014 UTC (10 years, 7 months ago) by foucault
File size: 2982 byte(s)
Log Message:
Mise à jour pour CAD4FE (Gilles) : operation 1 (tentative)

File Contents

# User Rev Content
1 francois 113 #include "gestionversion.h"
2 francois 283 #include <iostream>
3    
4     #pragma hdrstop
5    
6 francois 481 #include "hypergraphlib_platform.h"
7 francois 283
8 francois 481 #include "hypergraphlib_node.h"
9     #include "hypergraphlib_arc.h"
10 francois 283
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     }
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
131