You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							2.2 KiB
						
					
					
				| ///////////////////////////////////////////////////////////////////////////// | |
| // | |
| // (C) Copyright Joaquin M Lopez Munoz  2006-2009 | |
| // | |
| // 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/intrusive for documentation. | |
| // | |
| ///////////////////////////////////////////////////////////////////////////// | |
|  | |
| #ifndef BOOST_INTRUSIVE_DETAIL_EBO_HOLDER_HPP | |
| #define BOOST_INTRUSIVE_DETAIL_EBO_HOLDER_HPP | |
|  | |
| #include <boost/intrusive/detail/config_begin.hpp> | |
| #include <boost/intrusive/detail/mpl.hpp> | |
|  | |
| namespace boost { | |
| namespace intrusive { | |
| namespace detail { | |
| 
 | |
| template<typename T, bool IsEmpty = true> | |
| class ebo_functor_holder_impl | |
| { | |
|    public: | |
|    ebo_functor_holder_impl() | |
|    {} | |
|    ebo_functor_holder_impl(const T& t) | |
|       :  t_(t) | |
|    {} | |
|    template<class Arg1, class Arg2> | |
|    ebo_functor_holder_impl(const Arg1& arg1, const Arg2& arg2) | |
|       :  t_(arg1, arg2) | |
|    {} | |
| 
 | |
|    T&       get(){return t_;} | |
|    const T& get()const{return t_;} | |
| 
 | |
|    private: | |
|    T t_; | |
| }; | |
| 
 | |
| template<typename T> | |
| class ebo_functor_holder_impl<T, false> | |
|    :  public T | |
| { | |
|    public: | |
|    ebo_functor_holder_impl() | |
|    {} | |
|    ebo_functor_holder_impl(const T& t) | |
|       :  T(t) | |
|    {} | |
|    template<class Arg1, class Arg2> | |
|    ebo_functor_holder_impl(const Arg1& arg1, const Arg2& arg2) | |
|       :  T(arg1, arg2) | |
|    {} | |
| 
 | |
|    T&       get(){return *this;} | |
|    const T& get()const{return *this;} | |
| }; | |
| 
 | |
| template<typename T> | |
| class ebo_functor_holder | |
|    :  public ebo_functor_holder_impl<T, is_unary_or_binary_function<T>::value> | |
| { | |
|    private: | |
|    typedef ebo_functor_holder_impl<T, is_unary_or_binary_function<T>::value> super; | |
| 
 | |
|    public: | |
|    ebo_functor_holder(){} | |
|    ebo_functor_holder(const T& t) | |
|       :  super(t) | |
|    {} | |
| 
 | |
|    template<class Arg1, class Arg2> | |
|    ebo_functor_holder(const Arg1& arg1, const Arg2& arg2) | |
|       :  super(arg1, arg2) | |
|    {} | |
| 
 | |
|    ebo_functor_holder& operator=(const ebo_functor_holder& x) | |
|    { | |
|       this->get()=x.get(); | |
|       return *this; | |
|    } | |
| }; | |
| 
 | |
| 
 | |
| }  //namespace detail { | |
| }  //namespace intrusive { | |
| }  //namespace boost { | |
|  | |
| #include <boost/intrusive/detail/config_end.hpp> | |
|  | |
| #endif   //#ifndef BOOST_INTRUSIVE_DETAIL_EBO_HOLDER_HPP
 | |
| 
 |