You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
766 lines
16 KiB
766 lines
16 KiB
///////////////////////////////////////////////////////////////////////////// |
|
// |
|
// (C) Copyright Ion Gaztanaga 2007-2013 |
|
// |
|
// 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_FWD_HPP |
|
#define BOOST_INTRUSIVE_FWD_HPP |
|
|
|
#ifndef BOOST_CONFIG_HPP |
|
# include <boost/config.hpp> |
|
#endif |
|
# |
|
#ifndef BOOST_CSTDINT_HPP |
|
# include <boost/cstdint.hpp> |
|
#endif |
|
# |
|
#if defined(BOOST_HAS_PRAGMA_ONCE) |
|
# pragma once |
|
#endif |
|
|
|
//! \file |
|
//! This header file forward declares most Intrusive classes. |
|
//! |
|
//! It forward declares the following containers and hooks: |
|
//! - boost::intrusive::slist / boost::intrusive::slist_base_hook / boost::intrusive::slist_member_hook |
|
//! - boost::intrusive::list / boost::intrusive::list_base_hook / boost::intrusive::list_member_hook |
|
//! - boost::intrusive::bstree / boost::intrusive::bs_set / boost::intrusive::bs_multiset / |
|
//! boost::intrusive::bs_set_base_hook / boost::intrusive::bs_set_member_hook |
|
//! - boost::intrusive::rbtree / boost::intrusive::set / boost::intrusive::multiset / |
|
//! boost::intrusive::set_base_hook / boost::intrusive::set_member_hook |
|
//! - boost::intrusive::avltree / boost::intrusive::avl_set / boost::intrusive::avl_multiset / |
|
//! boost::intrusive::avl_set_base_hook / boost::intrusive::avl_set_member_hook |
|
//! - boost::intrusive::splaytree / boost::intrusive::splay_set / boost::intrusive::splay_multiset |
|
//! - boost::intrusive::sgtree / boost::intrusive::sg_set / boost::intrusive::sg_multiset |
|
//! - boost::intrusive::treap / boost::intrusive::treap_set / boost::intrusive::treap_multiset |
|
//! - boost::intrusive::hashtable / boost::intrusive::unordered_set / boost::intrusive::unordered_multiset / |
|
//! boost::intrusive::unordered_set_base_hook / boost::intrusive::unordered_set_member_hook / |
|
//! - boost::intrusive::any_base_hook / boost::intrusive::any_member_hook |
|
//! |
|
//! It forward declares the following container or hook options: |
|
//! - boost::intrusive::constant_time_size / boost::intrusive::size_type / boost::intrusive::compare / boost::intrusive::equal |
|
//! - boost::intrusive::floating_point / boost::intrusive::priority / boost::intrusive::hash |
|
//! - boost::intrusive::value_traits / boost::intrusive::member_hook / boost::intrusive::function_hook / boost::intrusive::base_hook |
|
//! - boost::intrusive::void_pointer / boost::intrusive::tag / boost::intrusive::link_mode |
|
//! - boost::intrusive::optimize_size / boost::intrusive::linear / boost::intrusive::cache_last |
|
//! - boost::intrusive::bucket_traits / boost::intrusive::store_hash / boost::intrusive::optimize_multikey |
|
//! - boost::intrusive::power_2_buckets / boost::intrusive::cache_begin / boost::intrusive::compare_hash / boost::intrusive::incremental |
|
//! |
|
//! It forward declares the following value traits utilities: |
|
//! - boost::intrusive::value_traits / boost::intrusive::derivation_value_traits / |
|
//! boost::intrusive::trivial_value_traits |
|
//! |
|
//! Finally it forward declares the following general purpose utilities: |
|
//! - boost::intrusive::pointer_plus_bits / boost::intrusive::priority_compare. |
|
|
|
#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) |
|
|
|
#include <cstddef> |
|
#include <boost/intrusive/link_mode.hpp> |
|
#include <boost/intrusive/detail/workaround.hpp> |
|
|
|
namespace boost { |
|
namespace intrusive { |
|
|
|
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) |
|
# ifdef BOOST_HAS_INTPTR_T |
|
using ::boost::uintptr_t; |
|
# else |
|
typedef std::size_t uintptr_t; |
|
# endif |
|
#endif |
|
|
|
//////////////////////////// |
|
// Node algorithms |
|
//////////////////////////// |
|
|
|
//Algorithms predeclarations |
|
template<class NodeTraits> |
|
class circular_list_algorithms; |
|
|
|
template<class NodeTraits> |
|
class circular_slist_algorithms; |
|
|
|
template<class NodeTraits> |
|
class linear_slist_algorithms; |
|
|
|
template<class NodeTraits> |
|
class bstree_algorithms; |
|
|
|
template<class NodeTraits> |
|
class rbtree_algorithms; |
|
|
|
template<class NodeTraits> |
|
class avltree_algorithms; |
|
|
|
template<class NodeTraits> |
|
class sgtree_algorithms; |
|
|
|
template<class NodeTraits> |
|
class splaytree_algorithms; |
|
|
|
template<class NodeTraits> |
|
class treap_algorithms; |
|
|
|
//////////////////////////// |
|
// Containers |
|
//////////////////////////// |
|
|
|
//slist |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class slist; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class slist_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class slist_member_hook; |
|
|
|
//list |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class list; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class list_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class list_member_hook; |
|
|
|
//rbtree/set/multiset |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class rbtree; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class multiset; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class set_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class set_member_hook; |
|
|
|
//splaytree/splay_set/splay_multiset |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class splaytree; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class splay_set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class splay_multiset; |
|
|
|
//avltree/avl_set/avl_multiset |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class avltree; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class avl_set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class avl_multiset; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class avl_set_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class avl_set_member_hook; |
|
|
|
|
|
//treap/treap_set/treap_multiset |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
, class O7 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class treap; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
, class O7 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class treap_set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
, class O7 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class treap_multiset; |
|
|
|
//sgtree/sg_set/sg_multiset |
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class sgtree; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class sg_set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class sg_multiset; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class bstree; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class bs_set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class bs_multiset; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class bs_set_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class bs_set_member_hook; |
|
|
|
//hashtable/unordered_set/unordered_multiset |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
, class O7 = void |
|
, class O8 = void |
|
, class O9 = void |
|
, class O10 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class hashtable; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
, class O7 = void |
|
, class O8 = void |
|
, class O9 = void |
|
, class O10 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class unordered_set; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class T |
|
, class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
, class O5 = void |
|
, class O6 = void |
|
, class O7 = void |
|
, class O8 = void |
|
, class O9 = void |
|
, class O10 = void |
|
> |
|
#else |
|
template<class T, class ...Options> |
|
#endif |
|
class unordered_multiset; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class unordered_set_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
, class O4 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class unordered_set_member_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class any_base_hook; |
|
|
|
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
|
template |
|
< class O1 = void |
|
, class O2 = void |
|
, class O3 = void |
|
> |
|
#else |
|
template<class ...Options> |
|
#endif |
|
class any_member_hook; |
|
|
|
//Options |
|
|
|
template<bool Enabled> |
|
struct constant_time_size; |
|
|
|
template<typename SizeType> |
|
struct size_type; |
|
|
|
template<typename Compare> |
|
struct compare; |
|
|
|
template<bool Enabled> |
|
struct floating_point; |
|
|
|
template<typename Equal> |
|
struct equal; |
|
|
|
template<typename Priority> |
|
struct priority; |
|
|
|
template<typename Hash> |
|
struct hash; |
|
|
|
template<typename ValueTraits> struct value_traits; |
|
|
|
template< typename Parent |
|
, typename MemberHook |
|
, MemberHook Parent::* PtrToMember> |
|
struct member_hook; |
|
|
|
template<typename Functor> |
|
struct function_hook; |
|
|
|
template<typename BaseHook> |
|
struct base_hook; |
|
|
|
template<typename VoidPointer> |
|
struct void_pointer; |
|
|
|
template<typename Tag> |
|
struct tag; |
|
|
|
template<link_mode_type LinkType> |
|
struct link_mode; |
|
|
|
template<bool Enabled> struct |
|
optimize_size; |
|
|
|
template<bool Enabled> |
|
struct linear; |
|
|
|
template<bool Enabled> |
|
struct cache_last; |
|
|
|
template<typename BucketTraits> |
|
struct bucket_traits; |
|
|
|
template<bool Enabled> |
|
struct store_hash; |
|
|
|
template<bool Enabled> |
|
struct optimize_multikey; |
|
|
|
template<bool Enabled> |
|
struct power_2_buckets; |
|
|
|
template<bool Enabled> |
|
struct cache_begin; |
|
|
|
template<bool Enabled> |
|
struct compare_hash; |
|
|
|
template<bool Enabled> |
|
struct incremental; |
|
|
|
//Value traits |
|
|
|
template<typename ValueTraits> |
|
struct value_traits; |
|
|
|
template< typename Parent |
|
, typename MemberHook |
|
, MemberHook Parent::* PtrToMember> |
|
struct member_hook; |
|
|
|
template< typename Functor> |
|
struct function_hook; |
|
|
|
template<typename BaseHook> |
|
struct base_hook; |
|
|
|
template<class T, class NodeTraits, link_mode_type LinkMode = safe_link> |
|
struct derivation_value_traits; |
|
|
|
template<class NodeTraits, link_mode_type LinkMode = normal_link> |
|
struct trivial_value_traits; |
|
|
|
//Additional utilities |
|
|
|
template<typename VoidPointer, std::size_t Alignment> |
|
struct max_pointer_plus_bits; |
|
|
|
template<std::size_t Alignment> |
|
struct max_pointer_plus_bits<void *, Alignment>; |
|
|
|
template<typename Pointer, std::size_t NumBits> |
|
struct pointer_plus_bits; |
|
|
|
template<typename T, std::size_t NumBits> |
|
struct pointer_plus_bits<T *, NumBits>; |
|
|
|
template<typename Ptr> |
|
struct pointer_traits; |
|
|
|
template<typename T> |
|
struct pointer_traits<T *>; |
|
|
|
} //namespace intrusive { |
|
} //namespace boost { |
|
|
|
#endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) |
|
|
|
#endif //#ifndef BOOST_INTRUSIVE_FWD_HPP
|
|
|