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