forked from boostorg/intrusive
Reduce simbol length using alog_types instead of algorithms directly in generic_hook.
This commit is contained in:
@ -48,7 +48,8 @@ struct make_any_base_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< any_algorithms<typename packed_options::void_pointer>
|
< AnyAlgorithm
|
||||||
|
, any_node_traits<typename packed_options::void_pointer>
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, AnyBaseHookId
|
, AnyBaseHookId
|
||||||
@ -153,7 +154,8 @@ struct make_any_member_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< any_algorithms<typename packed_options::void_pointer>
|
< AnyAlgorithm
|
||||||
|
, any_node_traits<typename packed_options::void_pointer>
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
@ -47,7 +47,8 @@ struct make_avl_set_base_hook
|
|||||||
::type packed_options;
|
::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< avltree_algorithms<avltree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size> >
|
< AvlTreeAlgorithms
|
||||||
|
, avltree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size>
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, AvlTreeBaseHookId
|
, AvlTreeBaseHookId
|
||||||
@ -177,7 +178,8 @@ struct make_avl_set_member_hook
|
|||||||
::type packed_options;
|
::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< avltree_algorithms<avltree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size> >
|
< AvlTreeAlgorithms
|
||||||
|
, avltree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size>
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
@ -47,7 +47,8 @@ struct make_bs_set_base_hook
|
|||||||
::type packed_options;
|
::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< bstree_algorithms<tree_node_traits<typename packed_options::void_pointer> >
|
< BsTreeAlgorithms
|
||||||
|
, tree_node_traits<typename packed_options::void_pointer>
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, BsTreeBaseHookId
|
, BsTreeBaseHookId
|
||||||
@ -176,7 +177,8 @@ struct make_bs_set_member_hook
|
|||||||
::type packed_options;
|
::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< bstree_algorithms<tree_node_traits<typename packed_options::void_pointer> >
|
< BsTreeAlgorithms
|
||||||
|
, tree_node_traits<typename packed_options::void_pointer>
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
@ -35,7 +35,10 @@ enum algo_types
|
|||||||
AvlTreeAlgorithms,
|
AvlTreeAlgorithms,
|
||||||
SgTreeAlgorithms,
|
SgTreeAlgorithms,
|
||||||
SplayTreeAlgorithms,
|
SplayTreeAlgorithms,
|
||||||
TreapAlgorithms
|
TreapAlgorithms,
|
||||||
|
UnorderedAlgorithms,
|
||||||
|
UnorderedCircularSlistAlgorithms,
|
||||||
|
AnyAlgorithm
|
||||||
};
|
};
|
||||||
|
|
||||||
template<algo_types AlgoType, class NodeTraits>
|
template<algo_types AlgoType, class NodeTraits>
|
||||||
|
@ -23,8 +23,9 @@
|
|||||||
|
|
||||||
#include <boost/intrusive/detail/workaround.hpp>
|
#include <boost/intrusive/detail/workaround.hpp>
|
||||||
#include <boost/intrusive/pointer_rebind.hpp>
|
#include <boost/intrusive/pointer_rebind.hpp>
|
||||||
#include <cstddef>
|
|
||||||
#include <boost/intrusive/detail/mpl.hpp>
|
#include <boost/intrusive/detail/mpl.hpp>
|
||||||
|
#include <boost/intrusive/detail/algo_type.hpp>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace intrusive {
|
namespace intrusive {
|
||||||
@ -279,6 +280,17 @@ class any_algorithms
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
///@cond
|
||||||
|
|
||||||
|
template<class NodeTraits>
|
||||||
|
struct get_algo<AnyAlgorithm, NodeTraits>
|
||||||
|
{
|
||||||
|
typedef typename pointer_rebind<typename NodeTraits::node_ptr, void>::type void_pointer;
|
||||||
|
typedef any_algorithms<void_pointer> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
///@endcond
|
||||||
|
|
||||||
} //namespace intrusive
|
} //namespace intrusive
|
||||||
} //namespace boost
|
} //namespace boost
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <boost/intrusive/detail/mpl.hpp>
|
#include <boost/intrusive/detail/mpl.hpp>
|
||||||
#include <boost/intrusive/detail/assert.hpp>
|
#include <boost/intrusive/detail/assert.hpp>
|
||||||
#include <boost/intrusive/detail/node_holder.hpp>
|
#include <boost/intrusive/detail/node_holder.hpp>
|
||||||
|
#include <boost/intrusive/detail/algo_type.hpp>
|
||||||
#include <boost/static_assert.hpp>
|
#include <boost/static_assert.hpp>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
@ -120,7 +121,8 @@ struct hooktags_impl
|
|||||||
/// @endcond
|
/// @endcond
|
||||||
|
|
||||||
template
|
template
|
||||||
< class NodeAlgorithms
|
< boost::intrusive::algo_types Algo
|
||||||
|
, class NodeTraits
|
||||||
, class Tag
|
, class Tag
|
||||||
, link_mode_type LinkMode
|
, link_mode_type LinkMode
|
||||||
, base_hook_type BaseHookType
|
, base_hook_type BaseHookType
|
||||||
@ -135,20 +137,20 @@ class generic_hook
|
|||||||
//from the hook.
|
//from the hook.
|
||||||
: public detail::if_c
|
: public detail::if_c
|
||||||
< detail::is_same<Tag, member_tag>::value
|
< detail::is_same<Tag, member_tag>::value
|
||||||
, typename NodeAlgorithms::node
|
, typename NodeTraits::node
|
||||||
, node_holder<typename NodeAlgorithms::node, Tag, BaseHookType>
|
, node_holder<typename NodeTraits::node, Tag, BaseHookType>
|
||||||
>::type
|
>::type
|
||||||
//If this is the a default-tagged base hook derive from a class that
|
//If this is the a default-tagged base hook derive from a class that
|
||||||
//will define an special internal typedef. Containers will be able to detect this
|
//will define an special internal typedef. Containers will be able to detect this
|
||||||
//special typedef and obtain generic_hook's internal types in order to deduce
|
//special typedef and obtain generic_hook's internal types in order to deduce
|
||||||
//value_traits for this hook.
|
//value_traits for this hook.
|
||||||
, public hook_tags_definer
|
, public hook_tags_definer
|
||||||
< generic_hook<NodeAlgorithms, Tag, LinkMode, BaseHookType>
|
< generic_hook<Algo, NodeTraits, Tag, LinkMode, BaseHookType>
|
||||||
, detail::is_same<Tag, dft_tag>::value*BaseHookType>
|
, detail::is_same<Tag, dft_tag>::value*BaseHookType>
|
||||||
/// @endcond
|
/// @endcond
|
||||||
{
|
{
|
||||||
/// @cond
|
/// @cond
|
||||||
typedef NodeAlgorithms node_algorithms;
|
typedef typename get_algo<Algo, NodeTraits>::type node_algorithms;
|
||||||
typedef typename node_algorithms::node node;
|
typedef typename node_algorithms::node node;
|
||||||
typedef typename node_algorithms::node_ptr node_ptr;
|
typedef typename node_algorithms::node_ptr node_ptr;
|
||||||
typedef typename node_algorithms::const_node_ptr const_node_ptr;
|
typedef typename node_algorithms::const_node_ptr const_node_ptr;
|
||||||
@ -156,7 +158,7 @@ class generic_hook
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
typedef hooktags_impl
|
typedef hooktags_impl
|
||||||
< typename NodeAlgorithms::node_traits
|
< NodeTraits
|
||||||
, Tag, LinkMode, BaseHookType> hooktags;
|
, Tag, LinkMode, BaseHookType> hooktags;
|
||||||
|
|
||||||
node_ptr this_ptr()
|
node_ptr this_ptr()
|
||||||
|
@ -50,7 +50,8 @@ struct make_list_base_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< circular_list_algorithms<list_node_traits<typename packed_options::void_pointer> >
|
< CircularListAlgorithms
|
||||||
|
, list_node_traits<typename packed_options::void_pointer>
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, ListBaseHookId
|
, ListBaseHookId
|
||||||
@ -177,7 +178,8 @@ struct make_list_member_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< circular_list_algorithms<list_node_traits<typename packed_options::void_pointer> >
|
< CircularListAlgorithms
|
||||||
|
, list_node_traits<typename packed_options::void_pointer>
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
@ -49,7 +49,8 @@ struct make_set_base_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< rbtree_algorithms<rbtree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size> >
|
< RbTreeAlgorithms
|
||||||
|
, rbtree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size>
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, RbTreeBaseHookId
|
, RbTreeBaseHookId
|
||||||
@ -180,7 +181,8 @@ struct make_set_member_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< rbtree_algorithms<rbtree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size> >
|
< RbTreeAlgorithms
|
||||||
|
, rbtree_node_traits<typename packed_options::void_pointer, packed_options::optimize_size>
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
@ -50,7 +50,8 @@ struct make_slist_base_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< circular_slist_algorithms<slist_node_traits<typename packed_options::void_pointer> >
|
< CircularSListAlgorithms
|
||||||
|
, slist_node_traits<typename packed_options::void_pointer>
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, SlistBaseHookId
|
, SlistBaseHookId
|
||||||
@ -178,7 +179,8 @@ struct make_slist_member_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< circular_slist_algorithms<slist_node_traits<typename packed_options::void_pointer> >
|
< CircularSListAlgorithms
|
||||||
|
, slist_node_traits<typename packed_options::void_pointer>
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
@ -152,19 +152,33 @@ struct uset_algo_wrapper : public Algo
|
|||||||
{};
|
{};
|
||||||
|
|
||||||
template<class VoidPointer, bool StoreHash, bool OptimizeMultiKey>
|
template<class VoidPointer, bool StoreHash, bool OptimizeMultiKey>
|
||||||
struct get_uset_node_algo
|
struct get_uset_node_traits
|
||||||
{
|
{
|
||||||
typedef typename detail::if_c
|
typedef typename detail::if_c
|
||||||
< (StoreHash || OptimizeMultiKey)
|
< (StoreHash || OptimizeMultiKey)
|
||||||
, unordered_node_traits<VoidPointer, StoreHash, OptimizeMultiKey>
|
, unordered_node_traits<VoidPointer, StoreHash, OptimizeMultiKey>
|
||||||
, slist_node_traits<VoidPointer>
|
, slist_node_traits<VoidPointer>
|
||||||
>::type node_traits_type;
|
|
||||||
typedef typename detail::if_c
|
|
||||||
< OptimizeMultiKey
|
|
||||||
, unordered_algorithms<node_traits_type>
|
|
||||||
, uset_algo_wrapper< circular_slist_algorithms<node_traits_type> >
|
|
||||||
>::type type;
|
>::type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<bool OptimizeMultiKey>
|
||||||
|
struct get_uset_algo_type
|
||||||
|
{
|
||||||
|
static const algo_types value = OptimizeMultiKey ? UnorderedAlgorithms : UnorderedCircularSlistAlgorithms;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class NodeTraits>
|
||||||
|
struct get_algo<UnorderedAlgorithms, NodeTraits>
|
||||||
|
{
|
||||||
|
typedef unordered_algorithms<NodeTraits> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class NodeTraits>
|
||||||
|
struct get_algo<UnorderedCircularSlistAlgorithms, NodeTraits>
|
||||||
|
{
|
||||||
|
typedef uset_algo_wrapper< circular_slist_algorithms<NodeTraits> > type;
|
||||||
|
};
|
||||||
|
|
||||||
/// @endcond
|
/// @endcond
|
||||||
|
|
||||||
//! Helper metafunction to define a \c unordered_set_base_hook that yields to the same
|
//! Helper metafunction to define a \c unordered_set_base_hook that yields to the same
|
||||||
@ -187,10 +201,11 @@ struct make_unordered_set_base_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< typename get_uset_node_algo < typename packed_options::void_pointer
|
< get_uset_algo_type <packed_options::optimize_multikey>::value
|
||||||
, packed_options::store_hash
|
, typename get_uset_node_traits < typename packed_options::void_pointer
|
||||||
, packed_options::optimize_multikey
|
, packed_options::store_hash
|
||||||
>::type
|
, packed_options::optimize_multikey
|
||||||
|
>::type
|
||||||
, typename packed_options::tag
|
, typename packed_options::tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, HashBaseHookId
|
, HashBaseHookId
|
||||||
@ -326,10 +341,11 @@ struct make_unordered_set_member_hook
|
|||||||
>::type packed_options;
|
>::type packed_options;
|
||||||
|
|
||||||
typedef generic_hook
|
typedef generic_hook
|
||||||
< typename get_uset_node_algo< typename packed_options::void_pointer
|
< get_uset_algo_type <packed_options::optimize_multikey>::value
|
||||||
, packed_options::store_hash
|
, typename get_uset_node_traits < typename packed_options::void_pointer
|
||||||
, packed_options::optimize_multikey
|
, packed_options::store_hash
|
||||||
>::type
|
, packed_options::optimize_multikey
|
||||||
|
>::type
|
||||||
, member_tag
|
, member_tag
|
||||||
, packed_options::link_mode
|
, packed_options::link_mode
|
||||||
, NoBaseHookId
|
, NoBaseHookId
|
||||||
|
Reference in New Issue
Block a user