Adding GraphEdgeSet and GraphNodeSet classes to graph_utils.h.
1 ETIK-OL-NOLIB-NEGRES full feature graph minimum concept.
3 Regota filozunk rajta hogy hogy is kene kinezni a fent emlitett concept-nek,
4 most 1 egesz konkret javaslatot irnek. A fo cel, hogy lenyegeben
5 minden operaciot a graf vegezzen, es az iteratorok csak vmi leiro szerepet
6 toltsenek be. Azt is megfigyeltuk, hogy a fo technikai nehezseg, hogy a c++
7 nem tud a visszateresi ertek alapjan megkulonboztetni fuggvenyeket. Ennek
8 megfeleloen 2 javaslatot irok most. Az egyikben a fv altal kiszamolt erteket
9 az egyik operandusban kapjuk vissza, a masikban egy tag-template specializacip
10 eredmenyekent balra adja vissza a cuccot. Nehol referencia van irva ahol nem
11 kell, ezen ne tessek fonnakadni.
16 trivialis node iterator, csak cimezni lehet vele, pl property vectort
18 node iterator a graf pontjainak bejarasara, NodeIt-e konvertalhato
21 trivialis edge iterator, csak cimezni lehet vele, pl property vectort
23 edge iterator a graf osszes elenek bejarasara
25 edge iterator 1 pont ki eleinek bejarasara, EdgeIt-e konvertalhato
27 edge iterator 1 pont be eleinek bejarasara, EdgeIt-e konvertalhato
29 edge iterator 1 pont be es ki eleinek bejarasara, EdgeIt-e konvertalhato
31 Az iteratorok ures konstruktorai invalid iteratort konstrualnak.
33 template<typename ValueType> class NodeMap;
34 template<typename ValueType> class EdgeMap;
39 A kovetkezo cuccokbol kell valasztani:
41 NodeIt tail(const EdgeIt) const;
42 NodeIt head(const EdgeIt) const;
44 NodeIt aNode(const OutEdgeIt) const;
45 NodeIt aNode(const InEdgeIt) const;
46 NodeIt aNode(const SymEdgeIt) const;
47 az out, in or sym edge iterator rogzitett pontjara ad 1 NodeIt-t
49 NodeIt bNode(const OutEdgeIt) const;
50 NodeIt bNode(const InEdgeIt) const;
51 NodeIt bNode(const SymEdgeIt) const;
52 az out, in or sym edge iterator nem rogzitett pontjara ad 1 NodeIt-t
54 EachNodeIt first<EachNodeIt>() const;
55 EachEdgeIt first<EachEdgeIt>() const;
56 OutEdgeIt first<OutEdgeIt>(const NodeIt) const;
57 InEdgeIt first<InEdgeIt>(const NodeIt) const;
58 SymEdgeIt first<SymEdgeIt>(const NodeIt) const;
59 EachNodeIt get<EachNodeIt>(const NodeIt) const; ??? konverzio miatt
60 EachEdgeIt get<EachEdgeIt>(const EdgeIt) const; ??? konverzio miatt
61 OutEdgeIt get<OutEdgeIt>(const NodeIt, const EdgeIt) const; ??? konverzio miatt
62 InEdgeIt get<InEdgeIt>(const NodeIt, const EdgeIt) const; ??? konverzio miatt
63 SymEdgeIt get<SymEdgeIt>(const NodeIt, const EdgeIt) const; ??? konverzio miatt
65 A masik lehetoseg pedig:
67 void getTail(NodeIt&, const EdgeIt) const;
68 void getHead(NodeIt&, const EdgeIt) const;
70 void getANode(NodeIt&, const OutEdgeIt) const;
71 void getANode(NodeIt&, const InEdgeIt) const;
72 void getANode(NodeIt&, const SymEdgeIt) const;
74 void getBNode(NodeIt&, const OutEdgeIt) const;
75 void getBNode(NodeIt&, const InEdgeIt) const;
76 void getBNode(NodeIt&, const SymEdgeIt) const;
78 void getFirst(EachNodeIt&) const;
79 void getFirst(EachEdgeIt&) const;
80 void getFirst(OutEdgeIt&, const NodeIt) const;
81 void getFirst(InEdgeIt&, const NodeIt) const;
82 void getFirst(SymEdgeIt&, const NodeIt) const;
83 void get(EachNodeIt&, const NodeIt) const; ??? konverzio miatt
84 void get(EachEdgeIt&, const EdgeIt) const; ??? konverzio miatt
85 void get(OutEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt
86 void get(InEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt
87 void get(SymEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt
89 Itt er veget az alternativ ize.
91 Pontok azonositasara de meginkabb property vectorokhoz:
93 int id(const NodeIt&) const;
94 int id(const EdgeIt&) const;
99 Pontok es elek hozzaadasanak metodusai:
102 EdgeIt addEdge(const NodeIt, const NodeIt);
104 void deleteNode(const NodeIt);
105 void deleteEdge(const EdgeIt);
107 void setTail(const NodeIt); vagy void setTail(NodeIt); nem tom
108 void setHead(const NodeIt); vagy void setHead(NodeIt); nem tom
110 Hogy konnyebb legyen a progikat tesztelni, nehany stream utasitas:
111 ezek nem a ListGraph metodusai
113 friend std::ostream& operator<<(std::ostream&, const NodeIt&);
114 friend std::ostream& operator<<(std::ostream&, const EdgeIt&);
116 AZ iteratorok leptetesere ket lehetoseg van, az iterator ++ operatora, a
119 const G.next(const It) const;
120 It& G.setNext(It&) const; G.goNext(It&) const; G.moveNext(It&) const; mi a jobb szo?
122 Kerdes: A bool valid()-nak ki kell-e jelenteni magarol, hogy const??
126 ezek nem tagfuggvenyek:
127 friend bool operator==(const NodeIt&, const NodeIt&);
128 friend bool operator!=(const NodeIt&, const NodeIt&);
130 EachNodeIt metodusai:
131 ez publikusan szarmazik a NodeIt-bol, tehat a fentiek is.
133 EachNodeIt& operator++();
139 friend bool operator==(const EdgeIt&, const EdgeIt&);
140 friend bool operator!=(const EdgeIt&, const EdgeIt&);
143 EachEdgeIt metodusai:
146 EachEdgeIt& operator++();
151 OutEdgeIt& operator++();
156 InEdgeIt& operator++();
161 SymEdgeIt& operator++();
163 Ami itt kovetkezik az mar nem lenyeg, sot valtozni fog.
165 Node propery array-okrol:
167 template <typename ValueType>
172 NodeMap(const Graph&);
173 NodeMap(const Graph&, const ValueType);
174 void set(Graph::NodeIt, const ValueType);
175 //void put(Graph::NodeIt, const ValueType);
176 ValueType get(Graph::NodeIt) const;
178 Ugyanez edge_property_array-okkal
180 template <typename ValueType>
183 EdgeMap(const Graph&);
184 EdgeMap(const Graph&, const ValueType);
185 void set(Graph::EdgeIt, const ValueType);
186 //void put(Graph::EdgeIt, const ValueType);
187 ValueType get(Graph::EdgeIt) const;