1665   template<typename M1, typename M2>  | 
  1665   template<typename M1, typename M2>  | 
  1666   inline LessMap<M1, M2> lessMap(const M1 &m1, const M2 &m2) { | 
  1666   inline LessMap<M1, M2> lessMap(const M1 &m1, const M2 &m2) { | 
  1667     return LessMap<M1, M2>(m1,m2);  | 
  1667     return LessMap<M1, M2>(m1,m2);  | 
  1668   }  | 
  1668   }  | 
  1669   | 
  1669   | 
         | 
  1670   namespace _maps_bits { | 
         | 
  1671   | 
         | 
  1672     template <typename Value>  | 
         | 
  1673     struct Identity { | 
         | 
  1674       typedef Value argument_type;  | 
         | 
  1675       typedef Value result_type;  | 
         | 
  1676       Value operator()(const Value& val) const { | 
         | 
  1677 	return val;  | 
         | 
  1678       }  | 
         | 
  1679     };  | 
         | 
  1680   | 
         | 
  1681     template <typename _Iterator, typename Enable = void>  | 
         | 
  1682     struct IteratorTraits { | 
         | 
  1683       typedef typename std::iterator_traits<_Iterator>::value_type Value;  | 
         | 
  1684     };  | 
         | 
  1685   | 
         | 
  1686     template <typename _Iterator>  | 
         | 
  1687     struct IteratorTraits<_Iterator,  | 
         | 
  1688       typename exists<typename _Iterator::container_type>::type>  | 
         | 
  1689     { | 
         | 
  1690       typedef typename _Iterator::container_type::value_type Value;  | 
         | 
  1691     };  | 
         | 
  1692   | 
         | 
  1693   }  | 
         | 
  1694   | 
         | 
  1695   /// \brief Writable bool map for logging each \c true assigned element  | 
         | 
  1696   ///  | 
         | 
  1697   /// A \ref concepts::ReadWriteMap "read-write" bool map for logging  | 
         | 
  1698   /// each \c true assigned element, i.e it copies subsequently each  | 
         | 
  1699   /// keys set to \c true to the given iterator.  | 
         | 
  1700   ///  | 
         | 
  1701   /// \tparam It the type of the Iterator.  | 
         | 
  1702   /// \tparam Ke the type of the map's Key. The default value should  | 
         | 
  1703   /// work in most cases.  | 
         | 
  1704   ///  | 
         | 
  1705   /// \note The container of the iterator must contain enough space  | 
         | 
  1706   /// for the elements. (Or it should be an inserter iterator).  | 
         | 
  1707   ///  | 
         | 
  1708   /// \todo Revise the name of this class and give an example code.  | 
         | 
  1709   template <typename It,  | 
         | 
  1710 	    typename Ke=typename _maps_bits::IteratorTraits<It>::Value>  | 
         | 
  1711   class StoreBoolMap { | 
         | 
  1712   public:  | 
         | 
  1713     typedef It Iterator;  | 
         | 
  1714   | 
         | 
  1715     typedef Ke Key;  | 
         | 
  1716     typedef bool Value;  | 
         | 
  1717   | 
         | 
  1718     /// Constructor  | 
         | 
  1719     StoreBoolMap(Iterator it)  | 
         | 
  1720       : _begin(it), _end(it) {} | 
         | 
  1721   | 
         | 
  1722     /// Gives back the given iterator set for the first key  | 
         | 
  1723     Iterator begin() const { | 
         | 
  1724       return _begin;  | 
         | 
  1725     }  | 
         | 
  1726   | 
         | 
  1727     /// Gives back the the 'after the last' iterator  | 
         | 
  1728     Iterator end() const { | 
         | 
  1729       return _end;  | 
         | 
  1730     }  | 
         | 
  1731   | 
         | 
  1732     /// The set function of the map  | 
         | 
  1733     void set(const Key& key, Value value) const { | 
         | 
  1734       if (value) { | 
         | 
  1735 	*_end++ = key;  | 
         | 
  1736       }  | 
         | 
  1737     }  | 
         | 
  1738   | 
         | 
  1739   private:  | 
         | 
  1740     Iterator _begin;  | 
         | 
  1741     mutable Iterator _end;  | 
         | 
  1742   };  | 
         | 
  1743   | 
  1670   /// @}  | 
  1744   /// @}  | 
  1671 }  | 
  1745 }  | 
  1672   | 
  1746   | 
  1673 #endif // LEMON_MAPS_H  | 
  1747 #endif // LEMON_MAPS_H  |