gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge #356
0 2 0
merge default
2 files changed with 71 insertions and 2 deletions:
↑ Collapse diff ↑
Ignore white space 4 line context
... ...
@@ -811,11 +811,16 @@
811 811
        _matching = new MatchingMap(_graph);
812 812
      }
813

	
813 814
      if (!_node_potential) {
814 815
        _node_potential = new NodePotential(_graph);
815 816
      }
817

	
816 818
      if (!_blossom_set) {
817 819
        _blossom_index = new IntNodeMap(_graph);
818 820
        _blossom_set = new BlossomSet(*_blossom_index);
819 821
        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
822
      } else if (_blossom_data->size() != _blossom_num) {
823
        delete _blossom_data;
824
        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
820 825
      }
821 826

	
... ...
@@ -824,5 +829,9 @@
824 829
        _node_heap_index = new IntArcMap(_graph);
825 830
        _node_data = new RangeMap<NodeData>(_node_num,
826
                                              NodeData(*_node_heap_index));
831
                                            NodeData(*_node_heap_index));
832
      } else {
833
        delete _node_data;
834
        _node_data = new RangeMap<NodeData>(_node_num,
835
                                            NodeData(*_node_heap_index));
827 836
      }
828 837

	
... ...
@@ -830,20 +839,30 @@
830 839
        _tree_set_index = new IntIntMap(_blossom_num);
831 840
        _tree_set = new TreeSet(*_tree_set_index);
841
      } else {
842
        _tree_set_index->resize(_blossom_num);
832 843
      }
844

	
833 845
      if (!_delta1) {
834 846
        _delta1_index = new IntNodeMap(_graph);
835 847
        _delta1 = new BinHeap<Value, IntNodeMap>(*_delta1_index);
836 848
      }
849

	
837 850
      if (!_delta2) {
838 851
        _delta2_index = new IntIntMap(_blossom_num);
839 852
        _delta2 = new BinHeap<Value, IntIntMap>(*_delta2_index);
853
      } else {
854
        _delta2_index->resize(_blossom_num);
840 855
      }
856

	
841 857
      if (!_delta3) {
842 858
        _delta3_index = new IntEdgeMap(_graph);
843 859
        _delta3 = new BinHeap<Value, IntEdgeMap>(*_delta3_index);
844 860
      }
861

	
845 862
      if (!_delta4) {
846 863
        _delta4_index = new IntIntMap(_blossom_num);
847 864
        _delta4 = new BinHeap<Value, IntIntMap>(*_delta4_index);
865
      } else {
866
        _delta4_index->resize(_blossom_num);
848 867
      }
849 868
    }
... ...
@@ -1589,4 +1608,7 @@
1589 1608
      createStructures();
1590 1609

	
1610
      _blossom_node_list.clear();
1611
      _blossom_potential.clear();
1612

	
1591 1613
      for (ArcIt e(_graph); e != INVALID; ++e) {
1592 1614
        (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP;
... ...
@@ -1602,7 +1624,14 @@
1602 1624
        (*_delta4_index)[i] = _delta4->PRE_HEAP;
1603 1625
      }
1604

	
1626
      
1605 1627
      _unmatched = _node_num;
1606 1628

	
1629
      _delta1->clear();
1630
      _delta2->clear();
1631
      _delta3->clear();
1632
      _delta4->clear();
1633
      _blossom_set->clear();
1634
      _tree_set->clear();
1635

	
1607 1636
      int index = 0;
1608 1637
      for (NodeIt n(_graph); n != INVALID; ++n) {
... ...
@@ -1615,4 +1644,6 @@
1615 1644
        }
1616 1645
        (*_node_index)[n] = index;
1646
        (*_node_data)[index].heap_index.clear();
1647
        (*_node_data)[index].heap.clear();
1617 1648
        (*_node_data)[index].pot = max;
1618 1649
        _delta1->push(n, max);
... ...
@@ -2238,11 +2269,16 @@
2238 2269
        _matching = new MatchingMap(_graph);
2239 2270
      }
2271

	
2240 2272
      if (!_node_potential) {
2241 2273
        _node_potential = new NodePotential(_graph);
2242 2274
      }
2275

	
2243 2276
      if (!_blossom_set) {
2244 2277
        _blossom_index = new IntNodeMap(_graph);
2245 2278
        _blossom_set = new BlossomSet(*_blossom_index);
2246 2279
        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
2280
      } else if (_blossom_data->size() != _blossom_num) {
2281
        delete _blossom_data;
2282
        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
2247 2283
      }
2248 2284

	
... ...
@@ -2252,4 +2288,8 @@
2252 2288
        _node_data = new RangeMap<NodeData>(_node_num,
2253 2289
                                            NodeData(*_node_heap_index));
2290
      } else if (_node_data->size() != _node_num) {
2291
        delete _node_data;
2292
        _node_data = new RangeMap<NodeData>(_node_num,
2293
                                            NodeData(*_node_heap_index));
2254 2294
      }
2255 2295

	
... ...
@@ -2257,16 +2297,25 @@
2257 2297
        _tree_set_index = new IntIntMap(_blossom_num);
2258 2298
        _tree_set = new TreeSet(*_tree_set_index);
2299
      } else {
2300
        _tree_set_index->resize(_blossom_num);
2259 2301
      }
2302

	
2260 2303
      if (!_delta2) {
2261 2304
        _delta2_index = new IntIntMap(_blossom_num);
2262 2305
        _delta2 = new BinHeap<Value, IntIntMap>(*_delta2_index);
2306
      } else {
2307
        _delta2_index->resize(_blossom_num);
2263 2308
      }
2309

	
2264 2310
      if (!_delta3) {
2265 2311
        _delta3_index = new IntEdgeMap(_graph);
2266 2312
        _delta3 = new BinHeap<Value, IntEdgeMap>(*_delta3_index);
2267 2313
      }
2314

	
2268 2315
      if (!_delta4) {
2269 2316
        _delta4_index = new IntIntMap(_blossom_num);
2270 2317
        _delta4 = new BinHeap<Value, IntIntMap>(*_delta4_index);
2318
      } else {
2319
        _delta4_index->resize(_blossom_num);
2271 2320
      }
2272 2321
    }
... ...
@@ -2969,4 +3018,7 @@
2969 3018
      createStructures();
2970 3019

	
3020
      _blossom_node_list.clear();
3021
      _blossom_potential.clear();
3022

	
2971 3023
      for (ArcIt e(_graph); e != INVALID; ++e) {
2972 3024
        (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP;
... ...
@@ -2982,4 +3034,10 @@
2982 3034
      _unmatched = _node_num;
2983 3035

	
3036
      _delta2->clear();
3037
      _delta3->clear();
3038
      _delta4->clear();
3039
      _blossom_set->clear();
3040
      _tree_set->clear();
3041

	
2984 3042
      int index = 0;
2985 3043
      for (NodeIt n(_graph); n != INVALID; ++n) {
... ...
@@ -2992,4 +3050,6 @@
2992 3050
        }
2993 3051
        (*_node_index)[n] = index;
3052
        (*_node_data)[index].heap_index.clear();
3053
        (*_node_data)[index].heap.clear();
2994 3054
        (*_node_data)[index].pot = max;
2995 3055
        int blossom =
Ignore white space 4 line context
... ...
@@ -1289,4 +1289,13 @@
1289 1289
        first_free_class(-1), first_free_node(-1) {}
1290 1290

	
1291
    /// \brief Clears the union-find data structure
1292
    ///
1293
    /// Erase each item from the data structure.
1294
    void clear() {
1295
      nodes.clear();
1296
      classes.clear();
1297
      first_free_node = first_free_class = first_class = -1;
1298
    }
1299

	
1291 1300
    /// \brief Insert a new node into a new component.
1292 1301
    ///
0 comments (0 inline)