ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/addin/outil/src/hypergraphlib_arc.cpp
Revision: 1156
Committed: Thu Jun 13 22:02:48 2024 UTC (14 months, 2 weeks ago) by francois
File size: 2827 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1156 //####//------------------------------------------------------------
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_arc.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:54:00 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 283 #include <iostream>
23    
24     #pragma hdrstop
25    
26 francois 481 #include "hypergraphlib_platform.h"
27     #include "hypergraphlib_arc.h"
28     #include "hypergraphlib_graph.h"
29     #include "hypergraphlib_node.h"
30 francois 283
31    
32     namespace HypergraphLib {
33    
34     Arc::Arc(Graph * __owner, int __id)
35     : GraphObject (__owner, __id)
36     {
37     }
38    
39     Arc::Arc(const Arc &__from, Graph * __owner)
40     : GraphObject(__from, __owner)
41     {
42     for (Arc::MultimapNodesById::const_iterator it = __from._nodes.begin();
43     it != __from._nodes.end();
44     it++)
45     {
46     Node * n = _owner->GetNode(it->first);
47     if (n)
48     {
49     Add (n);
50     }
51     }
52     }
53    
54     Arc::~Arc()
55     {
56    
57     }
58    
59     void Arc::Add (Node * __node)
60     {
61     _nodes.insert ( Int_Node_Pair ( __node->Id(), __node ));
62     }
63    
64     int Arc::Remove (Node * __node)
65     {
66     return Remove (__node->Id());
67     }
68    
69     int Arc::Remove (int __id)
70     {
71     int result=0;
72     MultimapNodesById::iterator it;
73     for (it = _nodes.find ( __id );
74     it != _nodes.end();
75     it = _nodes.find ( __id ), result++)
76     _nodes.erase ( it );
77    
78     /*while(it!=_nodes.end())
79     {
80     _nodes.erase ( it );
81     it = _nodes.find ( __id );
82     }*/
83    
84     return result;
85     }
86    
87     int Arc::Rank () const
88     {
89     return _nodes.size();
90     }
91    
92     int Arc::NodeCount(int __id) const
93     {
94     return _nodes.count(__id);
95     }
96    
97     Arc::MultimapNodesById & Arc::Nodes()
98     {
99     return _nodes;
100     }
101    
102     Node * Arc::First() const
103     {
104     MultimapNodesById::const_iterator it = _nodes.begin();
105     return it->second;
106     }
107    
108     Node * Arc::Last() const
109     {
110     MultimapNodesById::const_iterator it = _nodes.end();
111     it--;
112     return it->second;
113     }
114    
115     bool Arc::IsLoopOfNode(int __NodeId)
116     {
117     return (NodeCount(__NodeId ) == 2);
118     }
119    
120     bool Arc::IsLoop()
121     {
122     return (_nodes.size() == 2 && First() == Last() );
123     }
124    
125     }
126