src/work/graph_concept.txt
author deba
Wed, 08 Sep 2004 12:06:45 +0000
changeset 822 88226d9fe821
permissions -rw-r--r--
The MapFactories have been removed from the code because
if we use macros then they increases only the complexity.

The pair iterators of the maps are separeted from the maps.

Some macros and comments has been changed.
     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