Changes in / [741:71939d63ae77:742:8dae88c5943e] in lemon
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/Makefile.am
r728 r733 93 93 lemon/lp_base.h \ 94 94 lemon/lp_skeleton.h \ 95 lemon/list_graph.h \96 95 lemon/maps.h \ 97 96 lemon/matching.h \ -
lemon/bits/edge_set_extender.h
r664 r732 538 538 539 539 public: 540 ArcMap(const Graph& _g)540 explicit ArcMap(const Graph& _g) 541 541 : Parent(_g) {} 542 542 ArcMap(const Graph& _g, const _Value& _v) … … 562 562 563 563 public: 564 EdgeMap(const Graph& _g)564 explicit EdgeMap(const Graph& _g) 565 565 : Parent(_g) {} 566 566 -
lemon/bits/graph_extender.h
r664 r732 605 605 606 606 public: 607 NodeMap(const Graph& graph)607 explicit NodeMap(const Graph& graph) 608 608 : Parent(graph) {} 609 609 NodeMap(const Graph& graph, const _Value& value) … … 629 629 630 630 public: 631 ArcMap(const Graph& graph)631 explicit ArcMap(const Graph& graph) 632 632 : Parent(graph) {} 633 633 ArcMap(const Graph& graph, const _Value& value) … … 653 653 654 654 public: 655 EdgeMap(const Graph& graph)655 explicit EdgeMap(const Graph& graph) 656 656 : Parent(graph) {} 657 657 -
lemon/circulation.h
r688 r736 451 451 } 452 452 453 /// \brief Sets the tolerance used by algorithm. 454 /// 455 /// Sets the tolerance used by algorithm. 456 Circulation& tolerance(const Tolerance& tolerance) const { 453 /// \brief Sets the tolerance used by the algorithm. 454 /// 455 /// Sets the tolerance object used by the algorithm. 456 /// \return <tt>(*this)</tt> 457 Circulation& tolerance(const Tolerance& tolerance) { 457 458 _tol = tolerance; 458 459 return *this; … … 461 462 /// \brief Returns a const reference to the tolerance. 462 463 /// 463 /// Returns a const reference to the tolerance. 464 /// Returns a const reference to the tolerance object used by 465 /// the algorithm. 464 466 const Tolerance& tolerance() const { 465 return tolerance;467 return _tol; 466 468 } 467 469 -
lemon/maps.h
r741 r742 1902 1902 1903 1903 /// This class provides simple invertable graph maps. 1904 /// It wraps an arbitrary \ref concepts::ReadWriteMap "ReadWriteMap" 1905 /// and if a key is set to a new value then store it 1906 /// in the inverse map. 1904 /// It wraps a standard graph map (\c NodeMap, \c ArcMap or \c EdgeMap) 1905 /// and if a key is set to a new value, then stores it in the inverse map. 1907 1906 /// The values of the map can be accessed 1908 1907 /// with stl compatible forward iterator. 1909 1908 /// 1910 1909 /// This type is not reference map, so it cannot be modified with 1911 /// the subscript ionoperator.1910 /// the subscript operator. 1912 1911 /// 1913 1912 /// \tparam GR The graph type. … … 1925 1924 template Map<V>::Type Map; 1926 1925 1927 typedef std::m ap<V, K> Container;1926 typedef std::multimap<V, K> Container; 1928 1927 Container _inv_map; 1929 1928 … … 1950 1949 /// iterator on the values of the map. The values can 1951 1950 /// be accessed in the <tt>[beginValue, endValue)</tt> range. 1951 /// They are considered with multiplicity, so each value is 1952 /// traversed for each item it is assigned to. 1952 1953 class ValueIterator 1953 1954 : public std::iterator<std::forward_iterator_tag, Value> { … … 2002 2003 void set(const Key& key, const Value& val) { 2003 2004 Value oldval = Map::operator[](key); 2004 typename Container::iterator it = _inv_map.find(oldval); 2005 if (it != _inv_map.end() && it->second == key) { 2006 _inv_map.erase(it); 2005 typename Container::iterator it; 2006 for (it = _inv_map.equal_range(oldval).first; 2007 it != _inv_map.equal_range(oldval).second; ++it) { 2008 if (it->second == key) { 2009 _inv_map.erase(it); 2010 break; 2011 } 2007 2012 } 2008 2013 _inv_map.insert(std::make_pair(val, key)); … … 2018 2023 } 2019 2024 2020 /// \brief Gives back the item by its value. 2021 /// 2022 /// Gives back the item by its value. 2023 Key operator()(const Value& key) const { 2024 typename Container::const_iterator it = _inv_map.find(key); 2025 /// \brief Gives back an item by its value. 2026 /// 2027 /// This function gives back an item that is assigned to 2028 /// the given value or \c INVALID if no such item exists. 2029 /// If there are more items with the same associated value, 2030 /// only one of them is returned. 2031 Key operator()(const Value& val) const { 2032 typename Container::const_iterator it = _inv_map.find(val); 2025 2033 return it != _inv_map.end() ? it->second : INVALID; 2026 2034 } … … 2034 2042 virtual void erase(const Key& key) { 2035 2043 Value val = Map::operator[](key); 2036 typename Container::iterator it = _inv_map.find(val); 2037 if (it != _inv_map.end() && it->second == key) { 2038 _inv_map.erase(it); 2044 typename Container::iterator it; 2045 for (it = _inv_map.equal_range(val).first; 2046 it != _inv_map.equal_range(val).second; ++it) { 2047 if (it->second == key) { 2048 _inv_map.erase(it); 2049 break; 2050 } 2039 2051 } 2040 2052 Map::erase(key); … … 2048 2060 for (int i = 0; i < int(keys.size()); ++i) { 2049 2061 Value val = Map::operator[](keys[i]); 2050 typename Container::iterator it = _inv_map.find(val); 2051 if (it != _inv_map.end() && it->second == keys[i]) { 2052 _inv_map.erase(it); 2062 typename Container::iterator it; 2063 for (it = _inv_map.equal_range(val).first; 2064 it != _inv_map.equal_range(val).second; ++it) { 2065 if (it->second == keys[i]) { 2066 _inv_map.erase(it); 2067 break; 2068 } 2053 2069 } 2054 2070 } … … 2086 2102 /// \brief Subscript operator. 2087 2103 /// 2088 /// Subscript operator. It gives back the item 2089 /// that was last assigned to the given value. 2104 /// Subscript operator. It gives back an item 2105 /// that is assigned to the given value or \c INVALID 2106 /// if no such item exists. 2090 2107 Value operator[](const Key& key) const { 2091 2108 return _inverted(key); … … 2321 2338 /// 2322 2339 /// This type is a reference map, so it can be modified with the 2323 /// subscript ionoperator.2340 /// subscript operator. 2324 2341 /// 2325 2342 /// \tparam GR The graph type. … … 2688 2705 /// 2689 2706 /// This type is a reference map, so it can be modified with the 2690 /// subscript ionoperator.2707 /// subscript operator. 2691 2708 /// 2692 2709 /// \note The size of the data structure depends on the largest … … 2979 2996 /// 2980 2997 /// This type is not reference map, so it cannot be modified with 2981 /// the subscript ionoperator.2998 /// the subscript operator. 2982 2999 /// 2983 3000 /// \tparam GR The graph type. -
lemon/preflow.h
r688 r736 98 98 /// "flow of maximum value" in a digraph. 99 99 /// The preflow algorithms are the fastest known maximum 100 /// flow algorithms. The current implementation use a mixture of the100 /// flow algorithms. The current implementation uses a mixture of the 101 101 /// \e "highest label" and the \e "bound decrease" heuristics. 102 102 /// The worst case time complexity of the algorithm is \f$O(n^2\sqrt{e})\f$. … … 372 372 } 373 373 374 /// \brief Sets the tolerance used by algorithm. 375 /// 376 /// Sets the tolerance used by algorithm. 377 Preflow& tolerance(const Tolerance& tolerance) const { 374 /// \brief Sets the tolerance used by the algorithm. 375 /// 376 /// Sets the tolerance object used by the algorithm. 377 /// \return <tt>(*this)</tt> 378 Preflow& tolerance(const Tolerance& tolerance) { 378 379 _tolerance = tolerance; 379 380 return *this; … … 382 383 /// \brief Returns a const reference to the tolerance. 383 384 /// 384 /// Returns a const reference to the tolerance. 385 /// Returns a const reference to the tolerance object used by 386 /// the algorithm. 385 387 const Tolerance& tolerance() const { 386 return tolerance;388 return _tolerance; 387 389 } 388 390 -
test/circulation_test.cc
r658 r736 88 88 .supplyMap(supply) 89 89 .flowMap(flow); 90 91 const CirculationType::Elevator& elev = const_circ_test.elevator(); 92 circ_test.elevator(const_cast<CirculationType::Elevator&>(elev)); 93 CirculationType::Tolerance tol = const_circ_test.tolerance(); 94 circ_test.tolerance(tol); 90 95 91 96 circ_test.init(); -
test/maps_test.cc
r741 r742 351 351 } 352 352 353 // CrossRefMap 354 { 355 typedef SmartDigraph Graph; 356 DIGRAPH_TYPEDEFS(Graph); 357 358 checkConcept<ReadWriteMap<Node, int>, 359 CrossRefMap<Graph, Node, int> >(); 360 361 Graph gr; 362 typedef CrossRefMap<Graph, Node, char> CRMap; 363 typedef CRMap::ValueIterator ValueIt; 364 CRMap map(gr); 365 366 Node n0 = gr.addNode(); 367 Node n1 = gr.addNode(); 368 Node n2 = gr.addNode(); 369 370 map.set(n0, 'A'); 371 map.set(n1, 'B'); 372 map.set(n2, 'C'); 373 map.set(n2, 'A'); 374 map.set(n0, 'C'); 375 376 check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A', 377 "Wrong CrossRefMap"); 378 check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap"); 379 check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap"); 380 check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap"); 381 382 ValueIt it = map.beginValue(); 383 check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' && 384 it == map.endValue(), "Wrong value iterator"); 385 } 386 353 387 // Iterable bool map 354 388 { -
test/preflow_test.cc
r632 r736 95 95 PreflowType preflow_test(g, cap, n, n); 96 96 const PreflowType& const_preflow_test = preflow_test; 97 98 const PreflowType::Elevator& elev = const_preflow_test.elevator(); 99 preflow_test.elevator(const_cast<PreflowType::Elevator&>(elev)); 100 PreflowType::Tolerance tol = const_preflow_test.tolerance(); 101 preflow_test.tolerance(tol); 97 102 98 103 preflow_test -
tools/lemon-0.x-to-1.x.sh
r621 r738 36 36 -e "s/Edge\>/_Ar_c_label_/g"\ 37 37 -e "s/\<edge\>/_ar_c_label_/g"\ 38 -e "s/_edge\>/_ ar_c_label_/g"\38 -e "s/_edge\>/__ar_c_label_/g"\ 39 39 -e "s/Edges\>/_Ar_c_label_s/g"\ 40 40 -e "s/\<edges\>/_ar_c_label_s/g"\ 41 -e "s/_edges\>/_ ar_c_label_s/g"\41 -e "s/_edges\>/__ar_c_label_s/g"\ 42 42 -e "s/\([Ee]\)dge\([a-z]\)/_\1d_ge_label_\2/g"\ 43 43 -e "s/\([a-z]\)edge/\1_ed_ge_label_/g"\ … … 69 69 -e "s/_GR_APH_TY_PEDE_FS_label_/GRAPH_TYPEDEFS/g"\ 70 70 -e "s/_DIGR_APH_TY_PEDE_FS_label_/DIGRAPH_TYPEDEFS/g"\ 71 -e "s/\<digraph_adaptor\.h\>/adaptors.h/g"\ 72 -e "s/\<digraph_utils\.h\>/core.h/g"\ 73 -e "s/\<digraph_reader\.h\>/lgf_reader.h/g"\ 74 -e "s/\<digraph_writer\.h\>/lgf_writer.h/g"\ 75 -e "s/\<topology\.h\>/connectivity.h/g"\ 71 76 -e "s/DigraphToEps/GraphToEps/g"\ 72 77 -e "s/digraphToEps/graphToEps/g"\
Note: See TracChangeset
for help on using the changeset viewer.