diff options
Diffstat (limited to '3rdParty/Boost/src/boost/multi_index/detail/iter_adaptor.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/multi_index/detail/iter_adaptor.hpp | 325 |
1 files changed, 0 insertions, 325 deletions
diff --git a/3rdParty/Boost/src/boost/multi_index/detail/iter_adaptor.hpp b/3rdParty/Boost/src/boost/multi_index/detail/iter_adaptor.hpp deleted file mode 100644 index 0346184..0000000 --- a/3rdParty/Boost/src/boost/multi_index/detail/iter_adaptor.hpp +++ /dev/null @@ -1,325 +0,0 @@ -/* Copyright 2003-2008 Joaquin M Lopez Munoz. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - * - * See http://www.boost.org/libs/multi_index for library home page. - */ - -#ifndef BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP -#define BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP - -#if defined(_MSC_VER)&&(_MSC_VER>=1200) -#pragma once -#endif - -#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */ -#include <boost/mpl/apply.hpp> -#include <boost/multi_index/detail/prevent_eti.hpp> -#include <boost/operators.hpp> - -namespace boost{ - -namespace multi_index{ - -namespace detail{ - -/* Poor man's version of boost::iterator_adaptor. Used instead of the - * original as compile times for the latter are significantly higher. - * The interface is not replicated exactly, only to the extent necessary - * for internal consumption. - */ - -/* NB. The purpose of the (non-inclass) global operators ==, < and - defined - * above is to partially alleviate a problem of MSVC++ 6.0 by * which - * friend-injected operators on T are not visible if T is instantiated only - * in template code where T is a dependent type. - */ - -class iter_adaptor_access -{ -public: - template<class Class> - static typename Class::reference dereference(const Class& x) - { - return x.dereference(); - } - - template<class Class> - static bool equal(const Class& x,const Class& y) - { - return x.equal(y); - } - - template<class Class> - static void increment(Class& x) - { - x.increment(); - } - - template<class Class> - static void decrement(Class& x) - { - x.decrement(); - } - - template<class Class> - static void advance(Class& x,typename Class::difference_type n) - { - x.advance(n); - } - - template<class Class> - static typename Class::difference_type distance_to( - const Class& x,const Class& y) - { - return x.distance_to(y); - } -}; - -template<typename Category> -struct iter_adaptor_selector; - -template<class Derived,class Base> -class forward_iter_adaptor_base: - public forward_iterator_helper< - Derived, - typename Base::value_type, - typename Base::difference_type, - typename Base::pointer, - typename Base::reference> -{ -public: - typedef typename Base::reference reference; - - reference operator*()const - { - return iter_adaptor_access::dereference(final()); - } - - friend bool operator==(const Derived& x,const Derived& y) - { - return iter_adaptor_access::equal(x,y); - } - - Derived& operator++() - { - iter_adaptor_access::increment(final()); - return final(); - } - -private: - Derived& final(){return *static_cast<Derived*>(this);} - const Derived& final()const{return *static_cast<const Derived*>(this);} -}; - -template<class Derived,class Base> -bool operator==( - const forward_iter_adaptor_base<Derived,Base>& x, - const forward_iter_adaptor_base<Derived,Base>& y) -{ - return iter_adaptor_access::equal( - static_cast<const Derived&>(x),static_cast<const Derived&>(y)); -} - -template<> -struct iter_adaptor_selector<std::forward_iterator_tag> -{ - template<class Derived,class Base> - struct apply - { - typedef forward_iter_adaptor_base<Derived,Base> type; - }; -}; - -template<class Derived,class Base> -class bidirectional_iter_adaptor_base: - public bidirectional_iterator_helper< - Derived, - typename Base::value_type, - typename Base::difference_type, - typename Base::pointer, - typename Base::reference> -{ -public: - typedef typename Base::reference reference; - - reference operator*()const - { - return iter_adaptor_access::dereference(final()); - } - - friend bool operator==(const Derived& x,const Derived& y) - { - return iter_adaptor_access::equal(x,y); - } - - Derived& operator++() - { - iter_adaptor_access::increment(final()); - return final(); - } - - Derived& operator--() - { - iter_adaptor_access::decrement(final()); - return final(); - } - -private: - Derived& final(){return *static_cast<Derived*>(this);} - const Derived& final()const{return *static_cast<const Derived*>(this);} -}; - -template<class Derived,class Base> -bool operator==( - const bidirectional_iter_adaptor_base<Derived,Base>& x, - const bidirectional_iter_adaptor_base<Derived,Base>& y) -{ - return iter_adaptor_access::equal( - static_cast<const Derived&>(x),static_cast<const Derived&>(y)); -} - -template<> -struct iter_adaptor_selector<std::bidirectional_iterator_tag> -{ - template<class Derived,class Base> - struct apply - { - typedef bidirectional_iter_adaptor_base<Derived,Base> type; - }; -}; - -template<class Derived,class Base> -class random_access_iter_adaptor_base: - public random_access_iterator_helper< - Derived, - typename Base::value_type, - typename Base::difference_type, - typename Base::pointer, - typename Base::reference> -{ -public: - typedef typename Base::reference reference; - typedef typename Base::difference_type difference_type; - - reference operator*()const - { - return iter_adaptor_access::dereference(final()); - } - - friend bool operator==(const Derived& x,const Derived& y) - { - return iter_adaptor_access::equal(x,y); - } - - friend bool operator<(const Derived& x,const Derived& y) - { - return iter_adaptor_access::distance_to(x,y)>0; - } - - Derived& operator++() - { - iter_adaptor_access::increment(final()); - return final(); - } - - Derived& operator--() - { - iter_adaptor_access::decrement(final()); - return final(); - } - - Derived& operator+=(difference_type n) - { - iter_adaptor_access::advance(final(),n); - return final(); - } - - Derived& operator-=(difference_type n) - { - iter_adaptor_access::advance(final(),-n); - return final(); - } - - friend difference_type operator-(const Derived& x,const Derived& y) - { - return iter_adaptor_access::distance_to(y,x); - } - -private: - Derived& final(){return *static_cast<Derived*>(this);} - const Derived& final()const{return *static_cast<const Derived*>(this);} -}; - -template<class Derived,class Base> -bool operator==( - const random_access_iter_adaptor_base<Derived,Base>& x, - const random_access_iter_adaptor_base<Derived,Base>& y) -{ - return iter_adaptor_access::equal( - static_cast<const Derived&>(x),static_cast<const Derived&>(y)); -} - -template<class Derived,class Base> -bool operator<( - const random_access_iter_adaptor_base<Derived,Base>& x, - const random_access_iter_adaptor_base<Derived,Base>& y) -{ - return iter_adaptor_access::distance_to( - static_cast<const Derived&>(x),static_cast<const Derived&>(y))>0; -} - -template<class Derived,class Base> -typename random_access_iter_adaptor_base<Derived,Base>::difference_type -operator-( - const random_access_iter_adaptor_base<Derived,Base>& x, - const random_access_iter_adaptor_base<Derived,Base>& y) -{ - return iter_adaptor_access::distance_to( - static_cast<const Derived&>(y),static_cast<const Derived&>(x)); -} - -template<> -struct iter_adaptor_selector<std::random_access_iterator_tag> -{ - template<class Derived,class Base> - struct apply - { - typedef random_access_iter_adaptor_base<Derived,Base> type; - }; -}; - -template<class Derived,class Base> -struct iter_adaptor_base -{ - typedef iter_adaptor_selector< - typename Base::iterator_category> selector; - typedef typename prevent_eti< - selector, - typename mpl::apply2< - selector,Derived,Base>::type - >::type type; -}; - -template<class Derived,class Base> -class iter_adaptor:public iter_adaptor_base<Derived,Base>::type -{ -protected: - iter_adaptor(){} - explicit iter_adaptor(const Base& b_):b(b_){} - - const Base& base_reference()const{return b;} - Base& base_reference(){return b;} - -private: - Base b; -}; - -} /* namespace multi_index::detail */ - -} /* namespace multi_index */ - -} /* namespace boost */ - -#endif |