Chris@16: ///////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // (C) Copyright Ion Gaztanaga 2007-2013 Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // See http://www.boost.org/libs/intrusive for documentation. Chris@16: // Chris@16: ///////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: #ifndef BOOST_INTRUSIVE_FWD_HPP Chris@16: #define BOOST_INTRUSIVE_FWD_HPP Chris@16: Chris@101: #ifndef BOOST_CONFIG_HPP Chris@101: # include Chris@101: #endif Chris@101: Chris@101: #if defined(BOOST_HAS_PRAGMA_ONCE) Chris@101: # pragma once Chris@101: #endif Chris@101: Chris@101: //! \file Chris@101: //! This header file forward declares most Intrusive classes. Chris@101: //! Chris@101: //! It forward declares the following containers and hooks: Chris@101: //! - boost::intrusive::slist / boost::intrusive::slist_base_hook / boost::intrusive::slist_member_hook Chris@101: //! - boost::intrusive::list / boost::intrusive::list_base_hook / boost::intrusive::list_member_hook Chris@101: //! - boost::intrusive::bstree / boost::intrusive::bs_set / boost::intrusive::bs_multiset / Chris@101: //! boost::intrusive::bs_set_base_hook / boost::intrusive::bs_set_member_hook Chris@101: //! - boost::intrusive::rbtree / boost::intrusive::set / boost::intrusive::multiset / Chris@101: //! boost::intrusive::set_base_hook / boost::intrusive::set_member_hook Chris@101: //! - boost::intrusive::avltree / boost::intrusive::avl_set / boost::intrusive::avl_multiset / Chris@101: //! boost::intrusive::avl_set_base_hook / boost::intrusive::avl_set_member_hook Chris@101: //! - boost::intrusive::splaytree / boost::intrusive::splay_set / boost::intrusive::splay_multiset Chris@101: //! - boost::intrusive::sgtree / boost::intrusive::sg_set / boost::intrusive::sg_multiset Chris@101: //! - boost::intrusive::treap / boost::intrusive::treap_set / boost::intrusive::treap_multiset Chris@101: //! - boost::intrusive::hashtable / boost::intrusive::unordered_set / boost::intrusive::unordered_multiset / Chris@101: //! boost::intrusive::unordered_set_base_hook / boost::intrusive::unordered_set_member_hook / Chris@101: //! - boost::intrusive::any_base_hook / boost::intrusive::any_member_hook Chris@101: //! Chris@101: //! It forward declares the following container or hook options: Chris@101: //! - boost::intrusive::constant_time_size / boost::intrusive::size_type / boost::intrusive::compare / boost::intrusive::equal Chris@101: //! - boost::intrusive::floating_point / boost::intrusive::priority / boost::intrusive::hash Chris@101: //! - boost::intrusive::value_traits / boost::intrusive::member_hook / boost::intrusive::function_hook / boost::intrusive::base_hook Chris@101: //! - boost::intrusive::void_pointer / boost::intrusive::tag / boost::intrusive::link_mode Chris@101: //! - boost::intrusive::optimize_size / boost::intrusive::linear / boost::intrusive::cache_last Chris@101: //! - boost::intrusive::bucket_traits / boost::intrusive::store_hash / boost::intrusive::optimize_multikey Chris@101: //! - boost::intrusive::power_2_buckets / boost::intrusive::cache_begin / boost::intrusive::compare_hash / boost::intrusive::incremental Chris@101: //! Chris@101: //! It forward declares the following value traits utilities: Chris@101: //! - boost::intrusive::value_traits / boost::intrusive::derivation_value_traits / Chris@101: //! boost::intrusive::trivial_value_traits Chris@101: //! Chris@101: //! Finally it forward declares the following general purpose utilities: Chris@101: //! - boost::intrusive::pointer_plus_bits / boost::intrusive::priority_compare. Chris@101: Chris@101: #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) Chris@101: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace intrusive { Chris@16: Chris@16: //////////////////////////// Chris@16: // Node algorithms Chris@16: //////////////////////////// Chris@16: Chris@16: //Algorithms predeclarations Chris@16: template Chris@16: class circular_list_algorithms; Chris@16: Chris@16: template Chris@16: class circular_slist_algorithms; Chris@16: Chris@16: template Chris@101: class linear_slist_algorithms; Chris@101: Chris@101: template Chris@101: class bstree_algorithms; Chris@101: Chris@101: template Chris@16: class rbtree_algorithms; Chris@16: Chris@101: template Chris@101: class avltree_algorithms; Chris@101: Chris@101: template Chris@101: class sgtree_algorithms; Chris@101: Chris@101: template Chris@101: class splaytree_algorithms; Chris@101: Chris@101: template Chris@101: class treap_algorithms; Chris@101: Chris@16: //////////////////////////// Chris@16: // Containers Chris@16: //////////////////////////// Chris@16: Chris@16: //slist Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@101: template Chris@101: < class T Chris@101: , class O1 = void Chris@101: , class O2 = void Chris@101: , class O3 = void Chris@101: , class O4 = void Chris@101: , class O5 = void Chris@101: , class O6 = void Chris@101: > Chris@101: #else Chris@101: template Chris@101: #endif Chris@101: class slist; Chris@101: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@101: template Chris@101: < class O1 = void Chris@101: , class O2 = void Chris@101: , class O3 = void Chris@101: > Chris@101: #else Chris@101: template Chris@101: #endif Chris@101: class slist_base_hook; Chris@101: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@101: template Chris@101: < class O1 = void Chris@101: , class O2 = void Chris@101: , class O3 = void Chris@101: > Chris@101: #else Chris@101: template Chris@101: #endif Chris@101: class slist_member_hook; Chris@101: Chris@101: //list Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@101: template Chris@101: < class T Chris@101: , class O1 = void Chris@101: , class O2 = void Chris@101: , class O3 = void Chris@101: , class O4 = void Chris@101: > Chris@101: #else Chris@101: template Chris@101: #endif Chris@101: class list; Chris@101: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@101: template Chris@101: < class O1 = void Chris@101: , class O2 = void Chris@101: , class O3 = void Chris@101: > Chris@101: #else Chris@101: template Chris@101: #endif Chris@101: class list_base_hook; Chris@101: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@101: template Chris@101: < class O1 = void Chris@101: , class O2 = void Chris@101: , class O3 = void Chris@101: > Chris@101: #else Chris@101: template Chris@101: #endif Chris@101: class list_member_hook; Chris@101: Chris@101: //rbtree/set/multiset Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@101: class rbtree; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@101: class set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class multiset; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class set_base_hook; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class set_member_hook; Chris@16: Chris@16: //splaytree/splay_set/splay_multiset Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class splaytree; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class splay_set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class splay_multiset; Chris@16: Chris@16: //avltree/avl_set/avl_multiset Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class avltree; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class avl_set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class avl_multiset; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class avl_set_base_hook; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class avl_set_member_hook; Chris@16: Chris@16: Chris@16: //treap/treap_set/treap_multiset Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class treap; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class treap_set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class treap_multiset; Chris@16: Chris@16: //sgtree/sg_set/sg_multiset Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class sgtree; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class sg_set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class sg_multiset; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class bstree; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class bs_set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@101: , class O5 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class bs_multiset; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class bs_set_base_hook; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class bs_set_member_hook; Chris@16: Chris@16: //hashtable/unordered_set/unordered_multiset Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: , class O5 = void Chris@16: , class O6 = void Chris@16: , class O7 = void Chris@16: , class O8 = void Chris@16: , class O9 = void Chris@16: , class O10 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class hashtable; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: , class O5 = void Chris@16: , class O6 = void Chris@16: , class O7 = void Chris@16: , class O8 = void Chris@16: , class O9 = void Chris@16: , class O10 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class unordered_set; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class T Chris@16: , class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: , class O5 = void Chris@16: , class O6 = void Chris@16: , class O7 = void Chris@16: , class O8 = void Chris@16: , class O9 = void Chris@16: , class O10 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class unordered_multiset; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class unordered_set_base_hook; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: , class O4 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class unordered_set_member_hook; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class any_base_hook; Chris@16: Chris@101: #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) Chris@16: template Chris@16: < class O1 = void Chris@16: , class O2 = void Chris@16: , class O3 = void Chris@16: > Chris@16: #else Chris@16: template Chris@16: #endif Chris@16: class any_member_hook; Chris@16: Chris@101: //Options Chris@101: Chris@101: template Chris@101: struct constant_time_size; Chris@101: Chris@101: template Chris@101: struct size_type; Chris@101: Chris@101: template Chris@101: struct compare; Chris@101: Chris@101: template Chris@101: struct floating_point; Chris@101: Chris@101: template Chris@101: struct equal; Chris@101: Chris@101: template Chris@101: struct priority; Chris@101: Chris@101: template Chris@101: struct hash; Chris@101: Chris@101: template struct value_traits; Chris@101: Chris@101: template< typename Parent Chris@101: , typename MemberHook Chris@101: , MemberHook Parent::* PtrToMember> Chris@101: struct member_hook; Chris@101: Chris@101: template Chris@101: struct function_hook; Chris@101: Chris@101: template Chris@101: struct base_hook; Chris@101: Chris@101: template Chris@101: struct void_pointer; Chris@101: Chris@101: template Chris@101: struct tag; Chris@101: Chris@101: template Chris@101: struct link_mode; Chris@101: Chris@101: template struct Chris@101: optimize_size; Chris@101: Chris@101: template Chris@101: struct linear; Chris@101: Chris@101: template Chris@101: struct cache_last; Chris@101: Chris@101: template Chris@101: struct bucket_traits; Chris@101: Chris@101: template Chris@101: struct store_hash; Chris@101: Chris@101: template Chris@101: struct optimize_multikey; Chris@101: Chris@101: template Chris@101: struct power_2_buckets; Chris@101: Chris@101: template Chris@101: struct cache_begin; Chris@101: Chris@101: template Chris@101: struct compare_hash; Chris@101: Chris@101: template Chris@101: struct incremental; Chris@101: Chris@101: //Value traits Chris@101: Chris@101: template Chris@101: struct value_traits; Chris@101: Chris@101: template< typename Parent Chris@101: , typename MemberHook Chris@101: , MemberHook Parent::* PtrToMember> Chris@101: struct member_hook; Chris@101: Chris@101: template< typename Functor> Chris@101: struct function_hook; Chris@101: Chris@101: template Chris@101: struct base_hook; Chris@101: Chris@101: template Chris@101: struct derivation_value_traits; Chris@101: Chris@101: template Chris@101: struct trivial_value_traits; Chris@101: Chris@101: //Additional utilities Chris@101: Chris@101: template Chris@101: struct max_pointer_plus_bits; Chris@101: Chris@101: template Chris@101: struct max_pointer_plus_bits; Chris@101: Chris@101: template Chris@101: struct pointer_plus_bits; Chris@101: Chris@101: template Chris@101: struct pointer_plus_bits; Chris@101: Chris@101: template Chris@101: struct pointer_traits; Chris@101: Chris@101: template Chris@101: struct pointer_traits; Chris@101: Chris@16: } //namespace intrusive { Chris@16: } //namespace boost { Chris@16: Chris@101: #endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) Chris@16: Chris@16: #endif //#ifndef BOOST_INTRUSIVE_FWD_HPP