diff --git a/lemon/bits/map_extender.h b/lemon/bits/map_extender.h --- a/lemon/bits/map_extender.h +++ b/lemon/bits/map_extender.h @@ -49,6 +49,8 @@ typedef typename Parent::Reference Reference; typedef typename Parent::ConstReference ConstReference; + typedef typename Parent::ReferenceMapTag ReferenceMapTag; + class MapIt; class ConstMapIt; @@ -82,36 +84,36 @@ typedef typename Map::Value Value; - MapIt() {} + MapIt() : map(NULL) {} - MapIt(Invalid i) : Parent(i) { } + MapIt(Invalid i) : Parent(i), map(NULL) {} - explicit MapIt(Map& _map) : map(_map) { - map.notifier()->first(*this); + explicit MapIt(Map& _map) : map(&_map) { + map->notifier()->first(*this); } MapIt(const Map& _map, const Item& item) - : Parent(item), map(_map) {} + : Parent(item), map(&_map) {} MapIt& operator++() { - map.notifier()->next(*this); + map->notifier()->next(*this); return *this; } typename MapTraits::ConstReturnValue operator*() const { - return map[*this]; + return (*map)[*this]; } typename MapTraits::ReturnValue operator*() { - return map[*this]; + return (*map)[*this]; } void set(const Value& value) { - map.set(*this, value); + map->set(*this, value); } protected: - Map& map; + Map* map; }; @@ -122,19 +124,19 @@ typedef typename Map::Value Value; - ConstMapIt() {} + ConstMapIt() : map(NULL) {} - ConstMapIt(Invalid i) : Parent(i) { } + ConstMapIt(Invalid i) : Parent(i), map(NULL) {} - explicit ConstMapIt(Map& _map) : map(_map) { - map.notifier()->first(*this); + explicit ConstMapIt(Map& _map) : map(&_map) { + map->notifier()->first(*this); } ConstMapIt(const Map& _map, const Item& item) : Parent(item), map(_map) {} ConstMapIt& operator++() { - map.notifier()->next(*this); + map->notifier()->next(*this); return *this; } @@ -143,32 +145,32 @@ } protected: - const Map& map; + const Map* map; }; class ItemIt : public Item { typedef Item Parent; public: + ItemIt() : map(NULL) {} - ItemIt() {} - ItemIt(Invalid i) : Parent(i) { } + ItemIt(Invalid i) : Parent(i), map(NULL) {} - explicit ItemIt(Map& _map) : map(_map) { - map.notifier()->first(*this); + explicit ItemIt(Map& _map) : map(&_map) { + map->notifier()->first(*this); } ItemIt(const Map& _map, const Item& item) - : Parent(item), map(_map) {} + : Parent(item), map(&_map) {} ItemIt& operator++() { - map.notifier()->next(*this); + map->notifier()->next(*this); return *this; } protected: - const Map& map; + const Map* map; }; }; @@ -191,6 +193,8 @@ typedef typename Parent::Reference Reference; typedef typename Parent::ConstReference ConstReference; + typedef typename Parent::ReferenceMapTag ReferenceMapTag; + class MapIt; class ConstMapIt; @@ -227,36 +231,36 @@ public: typedef typename Map::Value Value; - MapIt() {} + MapIt() : map(NULL) {} - MapIt(Invalid i) : Parent(i) { } + MapIt(Invalid i) : Parent(i), map(NULL) { } - explicit MapIt(Map& _map) : map(_map) { - map.graph.first(*this); + explicit MapIt(Map& _map) : map(&_map) { + map->graph.first(*this); } MapIt(const Map& _map, const Item& item) - : Parent(item), map(_map) {} + : Parent(item), map(&_map) {} MapIt& operator++() { - map.graph.next(*this); + map->graph.next(*this); return *this; } typename MapTraits::ConstReturnValue operator*() const { - return map[*this]; + return (*map)[*this]; } typename MapTraits::ReturnValue operator*() { - return map[*this]; + return (*map)[*this]; } void set(const Value& value) { - map.set(*this, value); + map->set(*this, value); } protected: - Map& map; + Map* map; }; @@ -267,53 +271,53 @@ typedef typename Map::Value Value; - ConstMapIt() {} + ConstMapIt() : map(NULL) {} - ConstMapIt(Invalid i) : Parent(i) { } + ConstMapIt(Invalid i) : Parent(i), map(NULL) { } - explicit ConstMapIt(Map& _map) : map(_map) { - map.graph.first(*this); + explicit ConstMapIt(Map& _map) : map(&_map) { + map->graph.first(*this); } ConstMapIt(const Map& _map, const Item& item) - : Parent(item), map(_map) {} + : Parent(item), map(&_map) {} ConstMapIt& operator++() { - map.graph.next(*this); + map->graph.next(*this); return *this; } typename MapTraits::ConstReturnValue operator*() const { - return map[*this]; + return (*map)[*this]; } protected: - const Map& map; + const Map* map; }; class ItemIt : public Item { typedef Item Parent; public: + ItemIt() : map(NULL) {} - ItemIt() {} - ItemIt(Invalid i) : Parent(i) { } + ItemIt(Invalid i) : Parent(i), map(NULL) { } - explicit ItemIt(Map& _map) : map(_map) { - map.graph.first(*this); + explicit ItemIt(Map& _map) : map(&_map) { + map->graph.first(*this); } ItemIt(const Map& _map, const Item& item) - : Parent(item), map(_map) {} + : Parent(item), map(&_map) {} ItemIt& operator++() { - map.graph.next(*this); + map->graph.next(*this); return *this; } protected: - const Map& map; + const Map* map; };