# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1213464855 -7200
# Node ID d57ae6f0a335ba6ee61d0f1e4fd7f11460318268
# Parent 579979fad316ae8b42af36ac92b98eec5d3bfb3f
Rename StoreBoolMap to LoggerBoolMap (ticket #34).
diff -r 579979fad316 -r d57ae6f0a335 lemon/kruskal.h
|
a
|
b
|
|
| 229 | 229 | typedef typename In::value_type::second_type Value; |
| 230 | 230 | |
| 231 | 231 | static Value kruskal(const Graph& graph, const In& in, Out& out) { |
| 232 | | typedef StoreBoolMap<typename RemoveConst<Out>::type> Map; |
| | 232 | typedef LoggerBoolMap<typename RemoveConst<Out>::type> Map; |
| 233 | 233 | Map map(out); |
| 234 | 234 | return _kruskal_bits::kruskal(graph, in, map); |
| 235 | 235 | } |
diff -r 579979fad316 -r d57ae6f0a335 lemon/maps.h
|
a
|
b
|
|
| 1700 | 1700 | /// maps and most of them assign \c true at most once for each key. |
| 1701 | 1701 | /// In these cases it is a natural request to store each \c true |
| 1702 | 1702 | /// assigned elements (in order of the assignment), which can be |
| 1703 | | /// easily done with StoreBoolMap. |
| | 1703 | /// easily done with LoggerBoolMap. |
| 1704 | 1704 | /// |
| 1705 | | /// The simplest way of using this map is through the storeBoolMap() |
| | 1705 | /// The simplest way of using this map is through the loggerBoolMap() |
| 1706 | 1706 | /// function. |
| 1707 | 1707 | /// |
| 1708 | 1708 | /// \tparam It The type of the iterator. |
| … |
… |
|
| 1717 | 1717 | template <typename It, |
| 1718 | 1718 | typename Ke=typename _maps_bits::IteratorTraits<It>::Value> |
| 1719 | 1719 | #endif |
| 1720 | | class StoreBoolMap { |
| | 1720 | class LoggerBoolMap { |
| 1721 | 1721 | public: |
| 1722 | 1722 | typedef It Iterator; |
| 1723 | 1723 | |
| … |
… |
|
| 1725 | 1725 | typedef bool Value; |
| 1726 | 1726 | |
| 1727 | 1727 | /// Constructor |
| 1728 | | StoreBoolMap(Iterator it) |
| | 1728 | LoggerBoolMap(Iterator it) |
| 1729 | 1729 | : _begin(it), _end(it) {} |
| 1730 | 1730 | |
| 1731 | 1731 | /// Gives back the given iterator set for the first key |
| … |
… |
|
| 1750 | 1750 | Iterator _end; |
| 1751 | 1751 | }; |
| 1752 | 1752 | |
| 1753 | | /// Returns a \ref StoreBoolMap class |
| | 1753 | /// Returns a \ref LoggerBoolMap class |
| 1754 | 1754 | |
| 1755 | | /// This function just returns a \ref StoreBoolMap class. |
| | 1755 | /// This function just returns a \ref LoggerBoolMap class. |
| 1756 | 1756 | /// |
| 1757 | 1757 | /// The most important usage of it is storing certain nodes or arcs |
| 1758 | 1758 | /// that were marked \c true by an algorithm. |
| … |
… |
|
| 1760 | 1760 | /// order of Dfs algorithm, as the following examples show. |
| 1761 | 1761 | /// \code |
| 1762 | 1762 | /// std::vector<Node> v; |
| 1763 | | /// dfs(g,s).processedMap(storeBoolMap(std::back_inserter(v))).run(); |
| | 1763 | /// dfs(g,s).processedMap(loggerBoolMap(std::back_inserter(v))).run(); |
| 1764 | 1764 | /// \endcode |
| 1765 | 1765 | /// \code |
| 1766 | 1766 | /// std::vector<Node> v(countNodes(g)); |
| 1767 | | /// dfs(g,s).processedMap(storeBoolMap(v.begin())).run(); |
| | 1767 | /// dfs(g,s).processedMap(loggerBoolMap(v.begin())).run(); |
| 1768 | 1768 | /// \endcode |
| 1769 | 1769 | /// |
| 1770 | 1770 | /// \note The container of the iterator must contain enough space |
| 1771 | 1771 | /// for the elements or the iterator should be an inserter iterator. |
| 1772 | 1772 | /// |
| 1773 | | /// \note StoreBoolMap is just \ref concepts::WriteMap "writable", so |
| | 1773 | /// \note LoggerBoolMap is just \ref concepts::WriteMap "writable", so |
| 1774 | 1774 | /// it cannot be used when a readable map is needed, for example as |
| 1775 | | /// \c ReachedMap for Bfs, Dfs and Dijkstra algorithms. |
| | 1775 | /// \c ReachedMap for \ref Bfs, \ref Dfs and \ref Dijkstra algorithms. |
| 1776 | 1776 | /// |
| 1777 | | /// \relates StoreBoolMap |
| | 1777 | /// \relates LoggerBoolMap |
| 1778 | 1778 | template<typename Iterator> |
| 1779 | | inline StoreBoolMap<Iterator> storeBoolMap(Iterator it) { |
| 1780 | | return StoreBoolMap<Iterator>(it); |
| | 1779 | inline LoggerBoolMap<Iterator> loggerBoolMap(Iterator it) { |
| | 1780 | return LoggerBoolMap<Iterator>(it); |
| 1781 | 1781 | } |
| 1782 | 1782 | |
| 1783 | 1783 | /// @} |
diff -r 579979fad316 -r d57ae6f0a335 test/maps_test.cc
|
a
|
b
|
|
| 305 | 305 | "Something is wrong with EqualMap"); |
| 306 | 306 | } |
| 307 | 307 | |
| 308 | | // StoreBoolMap |
| | 308 | // LoggerBoolMap |
| 309 | 309 | { |
| 310 | 310 | typedef std::vector<int> vec; |
| 311 | 311 | vec v1; |
| 312 | 312 | vec v2(10); |
| 313 | | StoreBoolMap<std::back_insert_iterator<vec> > map1(std::back_inserter(v1)); |
| 314 | | StoreBoolMap<vec::iterator> map2(v2.begin()); |
| | 313 | LoggerBoolMap<std::back_insert_iterator<vec> > map1(std::back_inserter(v1)); |
| | 314 | LoggerBoolMap<vec::iterator> map2(v2.begin()); |
| 315 | 315 | map1.set(10, false); |
| 316 | 316 | map1.set(20, true); map2.set(20, true); |
| 317 | 317 | map1.set(30, false); map2.set(40, false); |
| … |
… |
|
| 319 | 319 | map1.set(60, true); map2.set(60, true); |
| 320 | 320 | check(v1.size() == 3 && v2.size() == 10 && |
| 321 | 321 | v1[0]==20 && v1[1]==50 && v1[2]==60 && v2[0]==20 && v2[1]==50 && v2[2]==60, |
| 322 | | "Something is wrong with StoreBoolMap"); |
| | 322 | "Something is wrong with LoggerBoolMap"); |
| 323 | 323 | |
| 324 | 324 | int i = 0; |
| 325 | | for ( StoreBoolMap<vec::iterator>::Iterator it = map2.begin(); |
| | 325 | for ( LoggerBoolMap<vec::iterator>::Iterator it = map2.begin(); |
| 326 | 326 | it != map2.end(); ++it ) |
| 327 | | check(v1[i++] == *it, "Something is wrong with StoreBoolMap"); |
| | 327 | check(v1[i++] == *it, "Something is wrong with LoggerBoolMap"); |
| 328 | 328 | } |
| 329 | 329 | |
| 330 | 330 | return 0; |