318 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			318 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// (C) Copyright Ion Gaztanaga 2005-2014. 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/container for documentation.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_CONTAINER_CONTAINER_FWD_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CONFIG_HPP
							 | 
						||
| 
								 | 
							
								#  include <boost/config.hpp>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(BOOST_HAS_PRAGMA_ONCE)
							 | 
						||
| 
								 | 
							
								#  pragma once
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! \file
							 | 
						||
| 
								 | 
							
								//! This header file forward declares the following containers:
							 | 
						||
| 
								 | 
							
								//!   - boost::container::vector
							 | 
						||
| 
								 | 
							
								//!   - boost::container::stable_vector
							 | 
						||
| 
								 | 
							
								//!   - boost::container::static_vector
							 | 
						||
| 
								 | 
							
								//!   - boost::container::small_vector
							 | 
						||
| 
								 | 
							
								//!   - boost::container::slist
							 | 
						||
| 
								 | 
							
								//!   - boost::container::list
							 | 
						||
| 
								 | 
							
								//!   - boost::container::set
							 | 
						||
| 
								 | 
							
								//!   - boost::container::multiset
							 | 
						||
| 
								 | 
							
								//!   - boost::container::map
							 | 
						||
| 
								 | 
							
								//!   - boost::container::multimap
							 | 
						||
| 
								 | 
							
								//!   - boost::container::flat_set
							 | 
						||
| 
								 | 
							
								//!   - boost::container::flat_multiset
							 | 
						||
| 
								 | 
							
								//!   - boost::container::flat_map
							 | 
						||
| 
								 | 
							
								//!   - boost::container::flat_multimap
							 | 
						||
| 
								 | 
							
								//!   - boost::container::basic_string
							 | 
						||
| 
								 | 
							
								//!   - boost::container::string
							 | 
						||
| 
								 | 
							
								//!   - boost::container::wstring
							 | 
						||
| 
								 | 
							
								//!
							 | 
						||
| 
								 | 
							
								//! Forward declares the following allocators:
							 | 
						||
| 
								 | 
							
								//!   - boost::container::allocator
							 | 
						||
| 
								 | 
							
								//!   - boost::container::node_allocator
							 | 
						||
| 
								 | 
							
								//!   - boost::container::adaptive_pool
							 | 
						||
| 
								 | 
							
								//!
							 | 
						||
| 
								 | 
							
								//! Forward declares the following polymorphic resource classes:
							 | 
						||
| 
								 | 
							
								//!   - boost::container::pmr::memory_resource
							 | 
						||
| 
								 | 
							
								//!   - boost::container::pmr::polymorphic_allocator
							 | 
						||
| 
								 | 
							
								//!   - boost::container::pmr::monotonic_buffer_resource
							 | 
						||
| 
								 | 
							
								//!   - boost::container::pmr::pool_options
							 | 
						||
| 
								 | 
							
								//!   - boost::container::pmr::unsynchronized_pool_resource
							 | 
						||
| 
								 | 
							
								//!   - boost::container::pmr::synchronized_pool_resource
							 | 
						||
| 
								 | 
							
								//!
							 | 
						||
| 
								 | 
							
								//! And finally it defines the following types
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//Std forward declarations
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
							 | 
						||
| 
								 | 
							
								   #include <boost/container/detail/std_fwd.hpp>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{
							 | 
						||
| 
								 | 
							
								namespace intrusive{
							 | 
						||
| 
								 | 
							
								namespace detail{
							 | 
						||
| 
								 | 
							
								   //Create namespace to avoid compilation errors
							 | 
						||
| 
								 | 
							
								}}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{ namespace container{ namespace container_detail{
							 | 
						||
| 
								 | 
							
								   namespace bi = boost::intrusive;
							 | 
						||
| 
								 | 
							
								   namespace bid = boost::intrusive::detail;
							 | 
						||
| 
								 | 
							
								}}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{ namespace container{ namespace pmr{
							 | 
						||
| 
								 | 
							
								   namespace bi = boost::intrusive;
							 | 
						||
| 
								 | 
							
								   namespace bid = boost::intrusive::detail;
							 | 
						||
| 
								 | 
							
								}}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <cstddef>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//                             Containers
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace container {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Enumeration used to configure ordered associative containers
							 | 
						||
| 
								 | 
							
								//! with a concrete tree implementation.
							 | 
						||
| 
								 | 
							
								enum tree_type_enum
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   red_black_tree,
							 | 
						||
| 
								 | 
							
								   avl_tree,
							 | 
						||
| 
								 | 
							
								   scapegoat_tree,
							 | 
						||
| 
								 | 
							
								   splay_tree
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<class T>
							 | 
						||
| 
								 | 
							
								class new_allocator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<T> >
							 | 
						||
| 
								 | 
							
								class vector;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<T> >
							 | 
						||
| 
								 | 
							
								class stable_vector;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T, std::size_t Capacity>
							 | 
						||
| 
								 | 
							
								class static_vector;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template < class T, std::size_t N
							 | 
						||
| 
								 | 
							
								         , class Allocator= new_allocator<T> >
							 | 
						||
| 
								 | 
							
								class small_vector;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<T> >
							 | 
						||
| 
								 | 
							
								class deque;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<T> >
							 | 
						||
| 
								 | 
							
								class list;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<T> >
							 | 
						||
| 
								 | 
							
								class slist;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<tree_type_enum TreeType, bool OptimizeSize>
							 | 
						||
| 
								 | 
							
								struct tree_opt;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef tree_opt<red_black_tree, true> tree_assoc_defaults;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<Key>
							 | 
						||
| 
								 | 
							
								         ,class Options = tree_assoc_defaults >
							 | 
						||
| 
								 | 
							
								class set;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<Key>
							 | 
						||
| 
								 | 
							
								         ,class Options = tree_assoc_defaults >
							 | 
						||
| 
								 | 
							
								class multiset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class T
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<std::pair<const Key, T> >
							 | 
						||
| 
								 | 
							
								         ,class Options = tree_assoc_defaults >
							 | 
						||
| 
								 | 
							
								class map;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class T
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<std::pair<const Key, T> >
							 | 
						||
| 
								 | 
							
								         ,class Options = tree_assoc_defaults >
							 | 
						||
| 
								 | 
							
								class multimap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<Key> >
							 | 
						||
| 
								 | 
							
								class flat_set;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<Key> >
							 | 
						||
| 
								 | 
							
								class flat_multiset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class T
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<std::pair<Key, T> > >
							 | 
						||
| 
								 | 
							
								class flat_map;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Key
							 | 
						||
| 
								 | 
							
								         ,class T
							 | 
						||
| 
								 | 
							
								         ,class Compare  = std::less<Key>
							 | 
						||
| 
								 | 
							
								         ,class Allocator = new_allocator<std::pair<Key, T> > >
							 | 
						||
| 
								 | 
							
								class flat_multimap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class CharT
							 | 
						||
| 
								 | 
							
								         ,class Traits = std::char_traits<CharT>
							 | 
						||
| 
								 | 
							
								         ,class Allocator  = new_allocator<CharT> >
							 | 
						||
| 
								 | 
							
								class basic_string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef basic_string
							 | 
						||
| 
								 | 
							
								   <char
							 | 
						||
| 
								 | 
							
								   ,std::char_traits<char>
							 | 
						||
| 
								 | 
							
								   ,new_allocator<char> >
							 | 
						||
| 
								 | 
							
								string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef basic_string
							 | 
						||
| 
								 | 
							
								   <wchar_t
							 | 
						||
| 
								 | 
							
								   ,std::char_traits<wchar_t>
							 | 
						||
| 
								 | 
							
								   ,new_allocator<wchar_t> >
							 | 
						||
| 
								 | 
							
								wstring;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static const std::size_t ADP_nodes_per_block    = 256u;
							 | 
						||
| 
								 | 
							
								static const std::size_t ADP_max_free_blocks    = 2u;
							 | 
						||
| 
								 | 
							
								static const std::size_t ADP_overhead_percent   = 1u;
							 | 
						||
| 
								 | 
							
								static const std::size_t ADP_only_alignment     = 0u;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template < class T
							 | 
						||
| 
								 | 
							
								         , std::size_t NodesPerBlock   = ADP_nodes_per_block
							 | 
						||
| 
								 | 
							
								         , std::size_t MaxFreeBlocks   = ADP_max_free_blocks
							 | 
						||
| 
								 | 
							
								         , std::size_t OverheadPercent = ADP_overhead_percent
							 | 
						||
| 
								 | 
							
								         , unsigned Version = 2
							 | 
						||
| 
								 | 
							
								         >
							 | 
						||
| 
								 | 
							
								class adaptive_pool;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template < class T
							 | 
						||
| 
								 | 
							
								         , unsigned Version = 2
							 | 
						||
| 
								 | 
							
								         , unsigned int AllocationDisableMask = 0>
							 | 
						||
| 
								 | 
							
								class allocator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static const std::size_t NodeAlloc_nodes_per_block = 256u;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template
							 | 
						||
| 
								 | 
							
								   < class T
							 | 
						||
| 
								 | 
							
								   , std::size_t NodesPerBlock = NodeAlloc_nodes_per_block
							 | 
						||
| 
								 | 
							
								   , std::size_t Version = 2>
							 | 
						||
| 
								 | 
							
								class node_allocator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace pmr {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class memory_resource;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<class T>
							 | 
						||
| 
								 | 
							
								class polymorphic_allocator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class monotonic_buffer_resource;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct pool_options;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class Allocator>
							 | 
						||
| 
								 | 
							
								class resource_adaptor_imp;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class unsynchronized_pool_resource;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class synchronized_pool_resource;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}  //namespace pmr {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Default options for tree-based associative containers
							 | 
						||
| 
								 | 
							
								//!   - tree_type<red_black_tree>
							 | 
						||
| 
								 | 
							
								//!   - optimize_size<true>
							 | 
						||
| 
								 | 
							
								typedef implementation_defined tree_assoc_defaults;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Type used to tag that the input range is
							 | 
						||
| 
								 | 
							
								//! guaranteed to be ordered
							 | 
						||
| 
								 | 
							
								struct ordered_range_t
							 | 
						||
| 
								 | 
							
								{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Value used to tag that the input range is
							 | 
						||
| 
								 | 
							
								//! guaranteed to be ordered
							 | 
						||
| 
								 | 
							
								static const ordered_range_t ordered_range = ordered_range_t();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Type used to tag that the input range is
							 | 
						||
| 
								 | 
							
								//! guaranteed to be ordered and unique
							 | 
						||
| 
								 | 
							
								struct ordered_unique_range_t
							 | 
						||
| 
								 | 
							
								   : public ordered_range_t
							 | 
						||
| 
								 | 
							
								{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Value used to tag that the input range is
							 | 
						||
| 
								 | 
							
								//! guaranteed to be ordered and unique
							 | 
						||
| 
								 | 
							
								static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Type used to tag that the inserted values
							 | 
						||
| 
								 | 
							
								//! should be default initialized
							 | 
						||
| 
								 | 
							
								struct default_init_t
							 | 
						||
| 
								 | 
							
								{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Value used to tag that the inserted values
							 | 
						||
| 
								 | 
							
								//! should be default initialized
							 | 
						||
| 
								 | 
							
								static const default_init_t default_init = default_init_t();
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Type used to tag that the inserted values
							 | 
						||
| 
								 | 
							
								//! should be value initialized
							 | 
						||
| 
								 | 
							
								struct value_init_t
							 | 
						||
| 
								 | 
							
								{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//! Value used to tag that the inserted values
							 | 
						||
| 
								 | 
							
								//! should be value initialized
							 | 
						||
| 
								 | 
							
								static const value_init_t value_init = value_init_t();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace container_detail_really_deep_namespace {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//Otherwise, gcc issues a warning of previously defined
							 | 
						||
| 
								 | 
							
								//anonymous_instance and unique_instance
							 | 
						||
| 
								 | 
							
								struct dummy
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   dummy()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      (void)ordered_range;
							 | 
						||
| 
								 | 
							
								      (void)ordered_unique_range;
							 | 
						||
| 
								 | 
							
								      (void)default_init;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}  //detail_really_deep_namespace {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}}  //namespace boost { namespace container {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
							 |