# HG changeset patch # User alpar # Date 1082150320 0 # Node ID c98125b3f47cf09880c21ca5d1c1671323eb5025 # Parent 6046b1d0f2671370f286c76a9d30fff81f5157ef An example for a readable/writeable but non-referrable map without get() and set(). diff -r 6046b1d0f267 -r c98125b3f47c src/work/alpar/rw_nonref_map.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/work/alpar/rw_nonref_map.cc Fri Apr 16 21:18:40 2004 +0000 @@ -0,0 +1,74 @@ +#include +#include + +using namespace hugo; + +template +class CinCoutMap +{ +public: + typedef GG Graph; + typedef typename GG::Edge Edge; + + typedef Edge KeyType; + typedef TT ValueType; + + class RefType + { + Graph &G; + Edge e; + public: + RefType(Graph &_G,Edge _e) : G(_G), e(_e) { } + + operator ValueType() const + { + ValueType tmp; + std::cout << G.id(G.tail(e)) << "->" + << G.id(G.head(e)) << ": "; + std::cin >> tmp; + return tmp; + } + ValueType operator = (ValueType v) const + { + std::cout << G.id(G.tail(e)) << "->" + << G.id(G.head(e)) << ": " << v << '\n'; + return v; + } + }; + +private: + Graph &G; +public: + CinCoutMap(Graph &_G) : G(_G) { } + RefType operator[] (Edge e) const { return RefType(G,e);} +}; + +int main() +{ + typedef SmartGraph Graph; + typedef Graph::NodeIt NodeIt; + typedef Graph::OutEdgeIt OutEdgeIt; + typedef Graph::EdgeIt EdgeIt; + + Graph G; + + CinCoutMap map(G); + + Graph::EdgeMap emap(G); + + for(int i=0;i<3;i++) G.addNode(); + + for(NodeIt n(G);G.valid(n);G.next(n)) + for(NodeIt m(G);G.valid(m);G.next(m)) if(n!=m) + G.addEdge(n,m); + + //for(OutEdgeIt e(G,NodeIt(G));G.valid(e);G.next(e)) + + for(EdgeIt e(G);G.valid(e);G.next(e)) emap[e] = map[e]; + + std::cout << '\n'; + + for(EdgeIt e(G);G.valid(e);G.next(e)) map[e] = emap[e]; + +} +