COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/graph_concept.txt @ 404:d888ca4e6c00

Last change on this file since 404:d888ca4e6c00 was 44:e3a220fc6155, checked in by marci, 21 years ago

some informations on the upper-cased new graph concept

File size: 5.8 KB
Line 
1ETIK-OL-NOLIB-NEGRES full feature graph minimum concept.
2
3 Regota filozunk rajta hogy hogy is kene kinezni a fent emlitett concept-nek,
4most 1 egesz konkret javaslatot irnek. A fo cel, hogy lenyegeben
5minden operaciot a graf vegezzen, es az iteratorok csak vmi leiro szerepet
6toltsenek be. Azt is megfigyeltuk, hogy a fo technikai nehezseg, hogy a c++
7nem tud a visszateresi ertek alapjan megkulonboztetni fuggvenyeket. Ennek
8megfeleloen 2 javaslatot irok most. Az egyikben a fv altal kiszamolt erteket
9az egyik operandusban kapjuk vissza, a masikban egy tag-template specializacip
10eredmenyekent balra adja vissza a cuccot. Nehol referencia van irva ahol nem
11kell, ezen ne tessek fonnakadni.
12
13class Graph;
14
15class NodeIt;     
16trivialis node iterator, csak cimezni lehet vele, pl property vectort
17class EachNodeIt;
18node iterator a graf pontjainak bejarasara, NodeIt-e konvertalhato
19
20class EdgeIt;
21trivialis edge iterator, csak cimezni lehet vele, pl property vectort
22class EachEdgeIt;
23edge iterator a graf osszes elenek bejarasara
24class OutEdgeIt;
25edge iterator 1 pont ki eleinek bejarasara, EdgeIt-e konvertalhato
26class InEdgeIt;
27edge iterator 1 pont be eleinek bejarasara, EdgeIt-e konvertalhato
28class SymEdgeIt;
29edge iterator 1 pont be es ki eleinek bejarasara, EdgeIt-e konvertalhato
30
31Az iteratorok ures konstruktorai invalid iteratort konstrualnak.
32
33template<typename ValueType> class NodeMap;
34template<typename ValueType> class EdgeMap;
35
36Graph();
37default constructor
38   
39A kovetkezo cuccokbol kell valasztani:
40
41NodeIt tail(const EdgeIt) const;
42NodeIt head(const EdgeIt) const;
43
44NodeIt aNode(const OutEdgeIt) const;
45NodeIt aNode(const InEdgeIt) const;
46NodeIt aNode(const SymEdgeIt) const;
47az out, in or sym edge iterator rogzitett pontjara ad 1 NodeIt-t
48
49NodeIt bNode(const OutEdgeIt) const;
50NodeIt bNode(const InEdgeIt) const;
51NodeIt bNode(const SymEdgeIt) const;
52az out, in or sym edge iterator nem rogzitett pontjara ad 1 NodeIt-t
53
54EachNodeIt first<EachNodeIt>() const;
55EachEdgeIt first<EachEdgeIt>() const;
56OutEdgeIt first<OutEdgeIt>(const NodeIt) const;
57InEdgeIt first<InEdgeIt>(const NodeIt) const;
58SymEdgeIt first<SymEdgeIt>(const NodeIt) const;
59EachNodeIt get<EachNodeIt>(const NodeIt) const; ??? konverzio miatt
60EachEdgeIt get<EachEdgeIt>(const EdgeIt) const; ??? konverzio miatt
61OutEdgeIt get<OutEdgeIt>(const NodeIt, const EdgeIt) const; ??? konverzio miatt
62InEdgeIt get<InEdgeIt>(const NodeIt, const EdgeIt) const; ??? konverzio miatt
63SymEdgeIt get<SymEdgeIt>(const NodeIt, const EdgeIt) const; ??? konverzio miatt
64
65A masik lehetoseg pedig:
66
67void getTail(NodeIt&, const EdgeIt) const;
68void getHead(NodeIt&, const EdgeIt) const;
69
70void getANode(NodeIt&, const OutEdgeIt) const;
71void getANode(NodeIt&, const InEdgeIt) const;
72void getANode(NodeIt&, const SymEdgeIt) const;
73   
74void getBNode(NodeIt&, const OutEdgeIt) const;
75void getBNode(NodeIt&, const InEdgeIt) const;
76void getBNode(NodeIt&, const SymEdgeIt) const;
77
78void getFirst(EachNodeIt&) const;
79void getFirst(EachEdgeIt&) const;
80void getFirst(OutEdgeIt&, const NodeIt) const;
81void getFirst(InEdgeIt&, const NodeIt) const;
82void getFirst(SymEdgeIt&, const NodeIt) const;
83void get(EachNodeIt&, const NodeIt) const; ??? konverzio miatt
84void get(EachEdgeIt&, const EdgeIt) const; ??? konverzio miatt
85void get(OutEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt
86void get(InEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt
87void get(SymEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt
88
89Itt er veget az alternativ ize.
90
91Pontok azonositasara de meginkabb property vectorokhoz:
92
93int id(const NodeIt&) const;
94int id(const EdgeIt&) const;
95
96int nodeNum() const;
97int edgeNum() const;
98
99Pontok es elek hozzaadasanak metodusai:
100
101NodeIt addNode();
102EdgeIt addEdge(const NodeIt, const NodeIt);
103
104void deleteNode(const NodeIt);
105void deleteEdge(const EdgeIt);
106
107void setTail(const NodeIt); vagy void setTail(NodeIt); nem tom
108void setHead(const NodeIt); vagy void setHead(NodeIt); nem tom
109
110Hogy konnyebb legyen a progikat tesztelni, nehany stream utasitas:
111ezek nem a ListGraph metodusai
112
113friend std::ostream& operator<<(std::ostream&, const NodeIt&);
114friend std::ostream& operator<<(std::ostream&, const EdgeIt&);
115
116AZ iteratorok leptetesere ket lehetoseg van, az iterator ++ operatora, a
117masik pedig
118It G.next(It) const;
119const G.next(const It) const;
120It& G.setNext(It&) const; G.goNext(It&) const; G.moveNext(It&) const; mi a jobb szo?
121
122Kerdes: A bool valid()-nak ki kell-e jelenteni magarol, hogy const??
123NodeIt metodusai:
124NodeIt();
125bool valid() const;
126ezek nem tagfuggvenyek:
127friend bool operator==(const NodeIt&, const NodeIt&);
128friend bool operator!=(const NodeIt&, const NodeIt&);
129   
130EachNodeIt metodusai:
131ez publikusan szarmazik a NodeIt-bol, tehat a fentiek is.
132EachNodeIt();
133EachNodeIt& operator++();
134
135EdgeIt metodusai:
136EdgeIt();
137bool valid() const;
138ezek nem tagfvek:
139friend bool operator==(const EdgeIt&, const EdgeIt&);
140friend bool operator!=(const EdgeIt&, const EdgeIt&);
141ujra tagfv-ek.
142   
143EachEdgeIt metodusai:
144EdgeIt-bol szarmazik
145EachEdgeIt();
146EachEdgeIt& operator++();
147 
148OutEdgeIt metodusai:
149EdgeIt-bol szarmazik
150OutEdgeIt();
151OutEdgeIt& operator++();
152 
153InEdgeIt metodusai:
154EdgeIt-bol szarmazik
155InEdgeIt();
156InEdgeIt& operator++();
157
158SymEdgeIt metodusai:
159EdgeIt-bol szarmazik
160SymEdgeIt();
161SymEdgeIt& operator++();
162               
163Ami itt kovetkezik az mar nem lenyeg, sot valtozni fog.
164
165Node propery array-okrol:
166
167template <typename ValueType>
168class NodeMap;
169
170metodusok:
171
172NodeMap(const Graph&);
173NodeMap(const Graph&, const ValueType);
174void set(Graph::NodeIt, const ValueType);
175//void put(Graph::NodeIt, const ValueType);
176ValueType get(Graph::NodeIt) const;
177
178Ugyanez edge_property_array-okkal
179
180template <typename ValueType>
181class EdgeMap;
182
183EdgeMap(const Graph&);
184EdgeMap(const Graph&, const ValueType);
185void set(Graph::EdgeIt, const ValueType);
186//void put(Graph::EdgeIt, const ValueType);
187ValueType get(Graph::EdgeIt) const;
188
189marci@cs.elte.hu
Note: See TracBrowser for help on using the repository browser.