| 
     1 ETIK-OL-NOLIB-NEGRES full feature graph minimum concept.   | 
         | 
     2   | 
         | 
     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.  | 
         | 
    12   | 
         | 
    13 class Graph;  | 
         | 
    14   | 
         | 
    15 class NodeIt;        | 
         | 
    16 trivialis node iterator, csak cimezni lehet vele, pl property vectort  | 
         | 
    17 class EachNodeIt;  | 
         | 
    18 node iterator a graf pontjainak bejarasara, NodeIt-e konvertalhato  | 
         | 
    19   | 
         | 
    20 class EdgeIt;  | 
         | 
    21 trivialis edge iterator, csak cimezni lehet vele, pl property vectort  | 
         | 
    22 class EachEdgeIt;  | 
         | 
    23 edge iterator a graf osszes elenek bejarasara  | 
         | 
    24 class OutEdgeIt;  | 
         | 
    25 edge iterator 1 pont ki eleinek bejarasara, EdgeIt-e konvertalhato  | 
         | 
    26 class InEdgeIt;  | 
         | 
    27 edge iterator 1 pont be eleinek bejarasara, EdgeIt-e konvertalhato  | 
         | 
    28 class SymEdgeIt;  | 
         | 
    29 edge iterator 1 pont be es ki eleinek bejarasara, EdgeIt-e konvertalhato  | 
         | 
    30   | 
         | 
    31 Az iteratorok ures konstruktorai invalid iteratort konstrualnak.   | 
         | 
    32   | 
         | 
    33 template<typename ValueType> class NodeMap;  | 
         | 
    34 template<typename ValueType> class EdgeMap;  | 
         | 
    35   | 
         | 
    36 Graph();  | 
         | 
    37 default constructor  | 
         | 
    38       | 
         | 
    39 A kovetkezo cuccokbol kell valasztani:  | 
         | 
    40   | 
         | 
    41 NodeIt tail(const EdgeIt) const;  | 
         | 
    42 NodeIt head(const EdgeIt) const;  | 
         | 
    43   | 
         | 
    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  | 
         | 
    48   | 
         | 
    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  | 
         | 
    53   | 
         | 
    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  | 
         | 
    64   | 
         | 
    65 A masik lehetoseg pedig:  | 
         | 
    66   | 
         | 
    67 void getTail(NodeIt&, const EdgeIt) const;  | 
         | 
    68 void getHead(NodeIt&, const EdgeIt) const;  | 
         | 
    69   | 
         | 
    70 void getANode(NodeIt&, const OutEdgeIt) const;  | 
         | 
    71 void getANode(NodeIt&, const InEdgeIt) const;  | 
         | 
    72 void getANode(NodeIt&, const SymEdgeIt) const;  | 
         | 
    73      | 
         | 
    74 void getBNode(NodeIt&, const OutEdgeIt) const;  | 
         | 
    75 void getBNode(NodeIt&, const InEdgeIt) const;  | 
         | 
    76 void getBNode(NodeIt&, const SymEdgeIt) const;  | 
         | 
    77   | 
         | 
    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  | 
         | 
    88   | 
         | 
    89 Itt er veget az alternativ ize.  | 
         | 
    90   | 
         | 
    91 Pontok azonositasara de meginkabb property vectorokhoz:  | 
         | 
    92   | 
         | 
    93 int id(const NodeIt&) const;  | 
         | 
    94 int id(const EdgeIt&) const;  | 
         | 
    95   | 
         | 
    96 int nodeNum() const;  | 
         | 
    97 int edgeNum() const;  | 
         | 
    98   | 
         | 
    99 Pontok es elek hozzaadasanak metodusai:  | 
         | 
   100   | 
         | 
   101 NodeIt addNode();  | 
         | 
   102 EdgeIt addEdge(const NodeIt, const NodeIt);  | 
         | 
   103   | 
         | 
   104 void deleteNode(const NodeIt);  | 
         | 
   105 void deleteEdge(const EdgeIt);  | 
         | 
   106   | 
         | 
   107 void setTail(const NodeIt); vagy void setTail(NodeIt); nem tom  | 
         | 
   108 void setHead(const NodeIt); vagy void setHead(NodeIt); nem tom  | 
         | 
   109   | 
         | 
   110 Hogy konnyebb legyen a progikat tesztelni, nehany stream utasitas:  | 
         | 
   111 ezek nem a ListGraph metodusai  | 
         | 
   112   | 
         | 
   113 friend std::ostream& operator<<(std::ostream&, const NodeIt&);  | 
         | 
   114 friend std::ostream& operator<<(std::ostream&, const EdgeIt&);  | 
         | 
   115   | 
         | 
   116 AZ iteratorok leptetesere ket lehetoseg van, az iterator ++ operatora, a   | 
         | 
   117 masik pedig   | 
         | 
   118 It G.next(It) const;  | 
         | 
   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?  | 
         | 
   121   | 
         | 
   122 Kerdes: A bool valid()-nak ki kell-e jelenteni magarol, hogy const??  | 
         | 
   123 NodeIt metodusai:  | 
         | 
   124 NodeIt();  | 
         | 
   125 bool valid() const;  | 
         | 
   126 ezek nem tagfuggvenyek:  | 
         | 
   127 friend bool operator==(const NodeIt&, const NodeIt&);  | 
         | 
   128 friend bool operator!=(const NodeIt&, const NodeIt&);  | 
         | 
   129       | 
         | 
   130 EachNodeIt metodusai:  | 
         | 
   131 ez publikusan szarmazik a NodeIt-bol, tehat a fentiek is.  | 
         | 
   132 EachNodeIt();  | 
         | 
   133 EachNodeIt& operator++();  | 
         | 
   134   | 
         | 
   135 EdgeIt metodusai:  | 
         | 
   136 EdgeIt();  | 
         | 
   137 bool valid() const;  | 
         | 
   138 ezek nem tagfvek:  | 
         | 
   139 friend bool operator==(const EdgeIt&, const EdgeIt&);  | 
         | 
   140 friend bool operator!=(const EdgeIt&, const EdgeIt&);  | 
         | 
   141 ujra tagfv-ek.  | 
         | 
   142      | 
         | 
   143 EachEdgeIt metodusai:  | 
         | 
   144 EdgeIt-bol szarmazik  | 
         | 
   145 EachEdgeIt();  | 
         | 
   146 EachEdgeIt& operator++();  | 
         | 
   147    | 
         | 
   148 OutEdgeIt metodusai:  | 
         | 
   149 EdgeIt-bol szarmazik  | 
         | 
   150 OutEdgeIt();  | 
         | 
   151 OutEdgeIt& operator++();  | 
         | 
   152    | 
         | 
   153 InEdgeIt metodusai:   | 
         | 
   154 EdgeIt-bol szarmazik  | 
         | 
   155 InEdgeIt();  | 
         | 
   156 InEdgeIt& operator++();  | 
         | 
   157   | 
         | 
   158 SymEdgeIt metodusai:  | 
         | 
   159 EdgeIt-bol szarmazik  | 
         | 
   160 SymEdgeIt();  | 
         | 
   161 SymEdgeIt& operator++();  | 
         | 
   162 		  | 
         | 
   163 Ami itt kovetkezik az mar nem lenyeg, sot valtozni fog.  | 
         | 
   164   | 
         | 
   165 Node propery array-okrol:  | 
         | 
   166   | 
         | 
   167 template <typename ValueType>  | 
         | 
   168 class NodeMap;   | 
         | 
   169   | 
         | 
   170 metodusok:  | 
         | 
   171   | 
         | 
   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;  | 
         | 
   177   | 
         | 
   178 Ugyanez edge_property_array-okkal  | 
         | 
   179   | 
         | 
   180 template <typename ValueType>  | 
         | 
   181 class EdgeMap;  | 
         | 
   182   | 
         | 
   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;  | 
         | 
   188   | 
         | 
   189 marci@cs.elte.hu  |