1.1 --- a/src/hugo/array_map.h Wed Sep 22 07:32:57 2004 +0000
1.2 +++ b/src/hugo/array_map.h Wed Sep 22 08:04:31 2004 +0000
1.3 @@ -29,6 +29,8 @@
1.4
1.5 template <typename MapRegistry, typename Value>
1.6 class ArrayMap : public MapRegistry::MapBase {
1.7 +
1.8 + template <typename MR, typename V> friend class ArrayMap;
1.9
1.10 public:
1.11
1.12 @@ -63,10 +65,6 @@
1.13 typedef std::allocator<Value> Allocator;
1.14
1.15
1.16 - /** Default constructor for the map.
1.17 - */
1.18 - ArrayMap() : capacity(0), values(0) {}
1.19 -
1.20 /** Graph and Registry initialized map constructor.
1.21 */
1.22 ArrayMap(const Graph& g, MapRegistry& r) : MapBase(g, r) {
1.23 @@ -118,18 +116,19 @@
1.24 */
1.25 ArrayMap& operator=(const ArrayMap& copy) {
1.26 if (© == this) return *this;
1.27 +
1.28 + if (MapBase::getGraph() != copy.getGraph()) {
1.29 + if (capacity != 0) {
1.30 + MapBase::destroy();
1.31 + allocator.deallocate(values, capacity);
1.32 + }
1.33
1.34 - if (capacity != 0) {
1.35 - MapBase::destroy();
1.36 - allocator.deallocate(values, capacity);
1.37 + MapBase::operator=(copy);
1.38 + capacity = copy.capacity;
1.39 + if (capacity == 0) return *this;
1.40 + values = allocator.allocate(capacity);
1.41 }
1.42
1.43 - MapBase::operator=(copy);
1.44 -
1.45 - capacity = copy.capacity;
1.46 - if (capacity == 0) return *this;
1.47 - values = allocator.allocate(capacity);
1.48 -
1.49 for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) {
1.50 int id = KeyInfo<Graph, KeyIt>::id(*MapBase::getGraph(), it);
1.51 allocator.construct(&(values[id]), copy.values[id]);
1.52 @@ -142,17 +141,20 @@
1.53 */
1.54 template <typename TT>
1.55 ArrayMap& operator=(const ArrayMap<MapRegistry, TT>& copy) {
1.56 - if (capacity != 0) {
1.57 - MapBase::destroy();
1.58 - allocator.deallocate(values, capacity);
1.59 +
1.60 + if (MapBase::getGraph() != copy.getGraph()) {
1.61 + if (capacity != 0) {
1.62 + MapBase::destroy();
1.63 + allocator.deallocate(values, capacity);
1.64 + }
1.65 +
1.66 + MapBase::operator=(copy);
1.67 +
1.68 + capacity = copy.capacity;
1.69 + if (capacity == 0) return *this;
1.70 + values = allocator.allocate(capacity);
1.71 }
1.72
1.73 - MapBase::operator=(copy);
1.74 -
1.75 - capacity = copy.capacity;
1.76 - if (capacity == 0) return *this;
1.77 - values = allocator.allocate(capacity);
1.78 -
1.79 for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) {
1.80 int id = KeyInfo<Graph, KeyIt>::id(*MapBase::getGraph(), it);
1.81 allocator.construct(&(values[id]), copy.values[id]);