... | ... |
@@ -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)