ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/HypergraphLib_Node.cpp
Revision: 176
Committed: Tue May 19 20:56:11 2009 UTC (15 years, 11 months ago) by foucault
Original Path: magic/lib/outil/outil/src/HypergraphLib_Node.cpp
File size: 2880 byte(s)
Log Message:
Mise à jour :
* CAD4FE
* outil : HypergraphLib qui est maintenant compilable sous Linux (essais mois aout 2008)
* outil : ot_mathematique.cpp suppression d'une méthode de classe inutile nécessaire pour compiler avec CodeGear Builder 2006 OT_VECTEUR_3D::OT_VECTEUR_3D(OT_VECTEUR_3D& mdd)

File Contents

# User Rev Content
1 francois 113 #include "gestionversion.h"
2 foucault 27 #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 francois 102 } // end namespace HypergraphLib
132