123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #ifndef BOOST_BIMAP_DETAIL_SET_VIEW_ITERATOR_HPP
- #define BOOST_BIMAP_DETAIL_SET_VIEW_ITERATOR_HPP
- #if defined(_MSC_VER)
- #pragma once
- #endif
- #include <boost/config.hpp>
- #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION
- #include <boost/core/serialization.hpp>
- #endif
- #include <boost/iterator/detail/enable_if.hpp>
- #include <boost/iterator/iterator_adaptor.hpp>
- #include <boost/bimap/relation/support/get_pair_functor.hpp>
- namespace boost {
- namespace bimaps {
- namespace detail {
- #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
- template< class CoreIterator > struct set_view_iterator;
- template< class CoreIterator >
- struct set_view_iterator_base
- {
- typedef iterator_adaptor
- <
- set_view_iterator< CoreIterator >,
- CoreIterator,
- BOOST_DEDUCED_TYPENAME CoreIterator::value_type::above_view
- > type;
- };
- #endif
- template< class CoreIterator >
- struct set_view_iterator : public set_view_iterator_base<CoreIterator>::type
- {
- typedef BOOST_DEDUCED_TYPENAME set_view_iterator_base<CoreIterator>::type base_;
- public:
- set_view_iterator() {}
- set_view_iterator(CoreIterator const& iter)
- : base_(iter) {}
- set_view_iterator(set_view_iterator const & iter)
- : base_(iter.base()) {}
- typename base_::reference dereference() const
- {
- return const_cast<
- BOOST_DEDUCED_TYPENAME base_::base_type::value_type*>(
- &(*this->base())
- )->get_view();
- }
- private:
- friend class boost::iterators::iterator_core_access;
- #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION
-
- template< class Archive >
- void serialize(Archive & ar, const unsigned int v)
- {
- boost::core::split_member(ar, *this, v);
- }
- friend class ::boost::serialization::access;
- template< class Archive >
- void save(Archive & ar, const unsigned int) const
- {
- ar << ::boost::serialization::make_nvp("mi_iterator",this->base());
- }
- template< class Archive >
- void load(Archive & ar, const unsigned int)
- {
- CoreIterator iter;
- ar >> ::boost::serialization::make_nvp("mi_iterator",iter);
- this->base_reference() = iter;
- }
- #endif
- };
- #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
- template< class CoreIterator > struct const_set_view_iterator;
- template< class CoreIterator >
- struct const_set_view_iterator_base
- {
- typedef iterator_adaptor
- <
- const_set_view_iterator< CoreIterator >,
- CoreIterator,
- const BOOST_DEDUCED_TYPENAME CoreIterator::value_type::above_view
- > type;
- };
- #endif
- template< class CoreIterator >
- struct const_set_view_iterator : public const_set_view_iterator_base<CoreIterator>::type
- {
- typedef BOOST_DEDUCED_TYPENAME const_set_view_iterator_base<CoreIterator>::type base_;
- public:
- const_set_view_iterator() {}
- const_set_view_iterator(CoreIterator const& iter)
- : base_(iter) {}
- const_set_view_iterator(const_set_view_iterator const & iter)
- : base_(iter.base()) {}
- const_set_view_iterator(set_view_iterator<CoreIterator> i)
- : base_(i.base()) {}
- BOOST_DEDUCED_TYPENAME base_::reference dereference() const
- {
- return this->base()->get_view();
- }
- private:
- friend class boost::iterators::iterator_core_access;
- #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION
-
- template< class Archive >
- void serialize(Archive & ar, const unsigned int v)
- {
- boost::core::split_member(ar, *this, v);
- }
- friend class ::boost::serialization::access;
- template< class Archive >
- void save(Archive & ar, const unsigned int) const
- {
- ar << ::boost::serialization::make_nvp("mi_iterator",this->base());
- }
- template< class Archive >
- void load(Archive & ar, const unsigned int)
- {
- CoreIterator iter;
- ar >> ::boost::serialization::make_nvp("mi_iterator",iter);
- this->base_reference() = iter;
- }
- #endif
- };
- }
- }
- }
- #endif
|