ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/outil/src/hypergraphlib_node.cpp
Revision: 1019
Committed: Tue Jun 4 21:16:50 2019 UTC (6 years ago) by francois
File size: 2954 byte(s)
Log Message:
restructuration de magic
outil est sorti de lib pour pouvoir etre utiliser en dehors de lib
template est merge avec outil
poly_occ et un sous projet de magic qui utilise le nouveau outil

File Contents

# User Rev Content
1 francois 283 #include <iostream>
2    
3     #pragma hdrstop
4    
5 francois 481 #include "hypergraphlib_platform.h"
6 francois 283
7 francois 481 #include "hypergraphlib_node.h"
8     #include "hypergraphlib_arc.h"
9 francois 283
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     }
38     else
39     {
40     std::cout << "Error: Graph::RemoveArc ( "<<__id<<" )"<<std::endl;
41     std::cout << "\t the arc was not found !\n"<<__id<<" )"<<std::endl;
42     }
43     return result;
44     }
45    
46     unsigned int Node::ArcCount (int __id)
47     {
48     return _arcs.count ( __id );
49     }
50    
51    
52     void Node::AdjacentNodes ( std::set < int > & __adjacentNodes )
53     {
54     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
55     itArcs != _arcs.end();
56     itArcs++ )
57     {
58     Arc * arc = itArcs->second;
59     for (Arc::MultimapNodesById::const_iterator itNodes = arc->Nodes().begin();
60     itNodes != arc->Nodes().end();
61     itNodes++)
62     {
63     int id = itNodes->first;
64    
65     if ( id != _id && __adjacentNodes.find(id) == __adjacentNodes.end() )
66     __adjacentNodes.insert(id);
67     }
68     }
69     }
70    
71     void Node::AdjacentNodes ( std::set < Node * > & __adjacentNodes )
72     {
73     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
74     itArcs != _arcs.end();
75     itArcs++ )
76     {
77     Arc * arc = itArcs->second;
78     for (Arc::MultimapNodesById::const_iterator itNodes = arc->Nodes().begin();
79     itNodes != arc->Nodes().end();
80     itNodes++)
81     {
82     int id = itNodes->first;
83    
84     if ( id != _id && __adjacentNodes.find(itNodes->second) == __adjacentNodes.end() )
85     __adjacentNodes.insert(itNodes->second);
86     }
87     }
88     }
89    
90    
91     Arc *
92     Node::IsAdjacentToNode ( Node * __n )
93     {
94     return IsAdjacentToNode(__n->Id());
95     }
96    
97     Arc *
98     Node::IsAdjacentToNode ( int __nodeId )
99     {
100     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
101     itArcs != _arcs.end();
102     itArcs++ )
103     {
104     Arc * arc = itArcs->second;
105    
106     if (arc->Nodes().find(__nodeId ) != arc->Nodes().end())
107     return arc;
108     }
109     return 0;
110     }
111    
112     int
113     Node::GetNbArcsToNode(Node * __other)
114     {
115     int result = 0;
116     int __nodeId = __other->Id();
117     for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
118     itArcs != _arcs.end();
119     itArcs++ )
120     {
121     Arc * arc = itArcs->second;
122    
123     if (arc->Nodes().find(__nodeId ) != arc->Nodes().end())
124     result++;
125     }
126     return result;
127     }
128    
129     } // end namespace HypergraphLib
130