diff -r 3a98a1aa5a8f -r ef09eee53b09 src/hugo/array_map.h --- a/src/hugo/array_map.h Wed Sep 22 07:32:57 2004 +0000 +++ b/src/hugo/array_map.h Wed Sep 22 08:04:31 2004 +0000 @@ -29,6 +29,8 @@ template class ArrayMap : public MapRegistry::MapBase { + + template friend class ArrayMap; public: @@ -63,10 +65,6 @@ typedef std::allocator Allocator; - /** Default constructor for the map. - */ - ArrayMap() : capacity(0), values(0) {} - /** Graph and Registry initialized map constructor. */ ArrayMap(const Graph& g, MapRegistry& r) : MapBase(g, r) { @@ -118,18 +116,19 @@ */ ArrayMap& operator=(const ArrayMap& copy) { if (© == this) return *this; + + if (MapBase::getGraph() != copy.getGraph()) { + if (capacity != 0) { + MapBase::destroy(); + allocator.deallocate(values, capacity); + } - if (capacity != 0) { - MapBase::destroy(); - allocator.deallocate(values, capacity); + MapBase::operator=(copy); + capacity = copy.capacity; + if (capacity == 0) return *this; + values = allocator.allocate(capacity); } - MapBase::operator=(copy); - - capacity = copy.capacity; - if (capacity == 0) return *this; - values = allocator.allocate(capacity); - for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) { int id = KeyInfo::id(*MapBase::getGraph(), it); allocator.construct(&(values[id]), copy.values[id]); @@ -142,17 +141,20 @@ */ template ArrayMap& operator=(const ArrayMap& copy) { - if (capacity != 0) { - MapBase::destroy(); - allocator.deallocate(values, capacity); + + if (MapBase::getGraph() != copy.getGraph()) { + if (capacity != 0) { + MapBase::destroy(); + allocator.deallocate(values, capacity); + } + + MapBase::operator=(copy); + + capacity = copy.capacity; + if (capacity == 0) return *this; + values = allocator.allocate(capacity); } - MapBase::operator=(copy); - - capacity = copy.capacity; - if (capacity == 0) return *this; - values = allocator.allocate(capacity); - for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) { int id = KeyInfo::id(*MapBase::getGraph(), it); allocator.construct(&(values[id]), copy.values[id]);