MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
hypergraphlib_node.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// hypergraphlib_node.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:54:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include <iostream>
23 
24 #pragma hdrstop
25 
26 #include "hypergraphlib_platform.h"
27 
28 #include "hypergraphlib_node.h"
29 #include "hypergraphlib_arc.h"
30 
31 
32 namespace HypergraphLib {
33 
34 Node::Node (Graph * __owner, int __id)
35  : GraphObject(__owner, __id)
36 {
37 
38 }
39 
40 Node::Node (const Node & __from, const Graph * __owner)
41  : GraphObject (__from, __owner)
42 {
43 }
44 
45 void Node::Add (Arc *__incidentArc)
46 {
47  _arcs.insert( IntArc_Pair(__incidentArc->Id(), __incidentArc) );
48 }
49 
50 int Node::Remove (int __id)
51 {
52  int result=0;
53  MultimapArcsById::iterator it = _arcs.find ( __id );
54  result = (it != _arcs.end());
55  if (result)
56  {
57  _arcs.erase ( it );
58  }
59  else
60  {
61  std::cout << "Error: Graph::RemoveArc ( "<<__id<<" )"<<std::endl;
62  std::cout << "\t the arc was not found !\n"<<__id<<" )"<<std::endl;
63  }
64  return result;
65 }
66 
67 unsigned int Node::ArcCount (int __id)
68 {
69  return _arcs.count ( __id );
70 }
71 
72 
73 void Node::AdjacentNodes ( std::set < int > & __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(id) == __adjacentNodes.end() )
87  __adjacentNodes.insert(id);
88  }
89  }
90 }
91 
92 void Node::AdjacentNodes ( std::set < Node * > & __adjacentNodes )
93 {
94  for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
95  itArcs != _arcs.end();
96  itArcs++ )
97  {
98  Arc * arc = itArcs->second;
99  for (Arc::MultimapNodesById::const_iterator itNodes = arc->Nodes().begin();
100  itNodes != arc->Nodes().end();
101  itNodes++)
102  {
103  int id = itNodes->first;
104 
105  if ( id != _id && __adjacentNodes.find(itNodes->second) == __adjacentNodes.end() )
106  __adjacentNodes.insert(itNodes->second);
107  }
108  }
109 }
110 
111 
112 Arc *
114 {
115  return IsAdjacentToNode(__n->Id());
116 }
117 
118 Arc *
119 Node::IsAdjacentToNode ( int __nodeId )
120 {
121  for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
122  itArcs != _arcs.end();
123  itArcs++ )
124  {
125  Arc * arc = itArcs->second;
126 
127  if (arc->Nodes().find(__nodeId ) != arc->Nodes().end())
128  return arc;
129  }
130  return 0;
131 }
132 
133 int
135 {
136  int result = 0;
137  int __nodeId = __other->Id();
138  for ( MultimapArcsById::const_iterator itArcs = _arcs.begin();
139  itArcs != _arcs.end();
140  itArcs++ )
141  {
142  Arc * arc = itArcs->second;
143 
144  if (arc->Nodes().find(__nodeId ) != arc->Nodes().end())
145  result++;
146  }
147  return result;
148 }
149 
150 } // end namespace HypergraphLib
151 
hypergraphlib_arc.h
HypergraphLib::Node::IntArc_Pair
std::pair< int, Arc * > IntArc_Pair
Definition: hypergraphlib_node.h:38
HypergraphLib::Node::IsAdjacentToNode
Arc * IsAdjacentToNode(int __nodeId)
Definition: hypergraphlib_node.cpp:119
HypergraphLib::Arc
Definition: hypergraphlib_arc.h:37
HypergraphLib
Definition: hypergraphlib_arc.cpp:32
HypergraphLib::Node::GetNbArcsToNode
int GetNbArcsToNode(Node *__other)
Definition: hypergraphlib_node.cpp:134
HypergraphLib::Node::_arcs
MultimapArcsById _arcs
Definition: hypergraphlib_node.h:92
HypergraphLib::GraphObject
Definition: hypergraphlib_graphobject.h:31
HypergraphLib::Node::Add
void Add(Arc *)
Definition: hypergraphlib_node.cpp:45
HypergraphLib::Node::Remove
int Remove(int __id)
Definition: hypergraphlib_node.cpp:50
HypergraphLib::GraphObject::Id
int Id() const
Definition: hypergraphlib_graphobject.cpp:47
HypergraphLib::Node::ArcCount
unsigned int ArcCount(int __id)
Definition: hypergraphlib_node.cpp:67
HypergraphLib::Node::Node
Node(Graph *__owner, int __id)
Definition: hypergraphlib_node.cpp:34
hypergraphlib_platform.h
HypergraphLib::Node::AdjacentNodes
void AdjacentNodes(std::set< int > &__adjacentNodes)
Definition: hypergraphlib_node.cpp:73
HypergraphLib::GraphObject::_id
const int _id
Definition: hypergraphlib_graphobject.h:43
HypergraphLib::Node
Definition: hypergraphlib_node.h:35
hypergraphlib_node.h
HypergraphLib::Arc::Nodes
MultimapNodesById & Nodes()
Definition: hypergraphlib_arc.cpp:97