115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /* Copyright 2003-2015 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_ORDERED_INDEX_HPP | ||
|  | #define BOOST_MULTI_INDEX_ORDERED_INDEX_HPP | ||
|  | 
 | ||
|  | #if defined(_MSC_VER) | ||
|  | #pragma once | ||
|  | #endif | ||
|  | 
 | ||
|  | #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */ | ||
|  | #include <boost/multi_index/detail/ord_index_impl.hpp> | ||
|  | #include <boost/multi_index/ordered_index_fwd.hpp> | ||
|  | 
 | ||
|  | namespace boost{ | ||
|  | 
 | ||
|  | namespace multi_index{ | ||
|  | 
 | ||
|  | namespace detail{ | ||
|  | 
 | ||
|  | /* no augment policy for plain ordered indices */ | ||
|  | 
 | ||
|  | struct null_augment_policy | ||
|  | { | ||
|  |   template<typename OrderedIndexImpl> | ||
|  |   struct augmented_interface | ||
|  |   { | ||
|  |     typedef OrderedIndexImpl type; | ||
|  |   }; | ||
|  | 
 | ||
|  |   template<typename OrderedIndexNodeImpl> | ||
|  |   struct augmented_node | ||
|  |   { | ||
|  |     typedef OrderedIndexNodeImpl type; | ||
|  |   }; | ||
|  | 
 | ||
|  |   template<typename Pointer> static void add(Pointer,Pointer){} | ||
|  |   template<typename Pointer> static void remove(Pointer,Pointer){} | ||
|  |   template<typename Pointer> static void copy(Pointer,Pointer){} | ||
|  |   template<typename Pointer> static void rotate_left(Pointer,Pointer){} | ||
|  |   template<typename Pointer> static void rotate_right(Pointer,Pointer){} | ||
|  | 
 | ||
|  | #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING) | ||
|  |   /* invariant stuff */ | ||
|  | 
 | ||
|  |   template<typename Pointer> static bool invariant(Pointer){return true;} | ||
|  | 
 | ||
|  | #endif | ||
|  | }; | ||
|  | 
 | ||
|  | } /* namespace multi_index::detail */ | ||
|  | 
 | ||
|  | /* ordered_index specifiers */ | ||
|  | 
 | ||
|  | template<typename Arg1,typename Arg2,typename Arg3> | ||
|  | struct ordered_unique | ||
|  | { | ||
|  |   typedef typename detail::ordered_index_args< | ||
|  |     Arg1,Arg2,Arg3>                                index_args; | ||
|  |   typedef typename index_args::tag_list_type::type tag_list_type; | ||
|  |   typedef typename index_args::key_from_value_type key_from_value_type; | ||
|  |   typedef typename index_args::compare_type        compare_type; | ||
|  | 
 | ||
|  |   template<typename Super> | ||
|  |   struct node_class | ||
|  |   { | ||
|  |     typedef detail::ordered_index_node<detail::null_augment_policy,Super> type; | ||
|  |   }; | ||
|  | 
 | ||
|  |   template<typename SuperMeta> | ||
|  |   struct index_class | ||
|  |   { | ||
|  |     typedef detail::ordered_index< | ||
|  |       key_from_value_type,compare_type, | ||
|  |       SuperMeta,tag_list_type,detail::ordered_unique_tag, | ||
|  |       detail::null_augment_policy>                        type; | ||
|  |   }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename Arg1,typename Arg2,typename Arg3> | ||
|  | struct ordered_non_unique | ||
|  | { | ||
|  |   typedef detail::ordered_index_args< | ||
|  |     Arg1,Arg2,Arg3>                                index_args; | ||
|  |   typedef typename index_args::tag_list_type::type tag_list_type; | ||
|  |   typedef typename index_args::key_from_value_type key_from_value_type; | ||
|  |   typedef typename index_args::compare_type        compare_type; | ||
|  | 
 | ||
|  |   template<typename Super> | ||
|  |   struct node_class | ||
|  |   { | ||
|  |     typedef detail::ordered_index_node<detail::null_augment_policy,Super> type; | ||
|  |   }; | ||
|  | 
 | ||
|  |   template<typename SuperMeta> | ||
|  |   struct index_class | ||
|  |   { | ||
|  |     typedef detail::ordered_index< | ||
|  |       key_from_value_type,compare_type, | ||
|  |       SuperMeta,tag_list_type,detail::ordered_non_unique_tag, | ||
|  |       detail::null_augment_policy>                            type; | ||
|  |   }; | ||
|  | }; | ||
|  | 
 | ||
|  | } /* namespace multi_index */ | ||
|  | 
 | ||
|  | } /* namespace boost */ | ||
|  | 
 | ||
|  | #endif |