gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Restored (and modified) StoreBoolMap (it was removed in 7ff1c348ae0c) - also restored _maps_bits::IteratorTraits - removes the Functor template parameter from StoreBoolMap - doc changed a bit
0 1 0
default
1 file changed with 74 insertions and 0 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -1667,6 +1667,80 @@
1667 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

	
0 comments (0 inline)