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;
|
||||
|
||||
typedef generic_hook
|
||||
< any_algorithms<typename packed_options::void_pointer>
|
||||
< AnyAlgorithm
|
||||
, any_node_traits<typename packed_options::void_pointer>
|
||||
, typename packed_options::tag
|
||||
, packed_options::link_mode
|
||||
, AnyBaseHookId
|
||||
@ -153,7 +154,8 @@ struct make_any_member_hook
|
||||
>::type packed_options;
|
||||
|
||||
typedef generic_hook
|
||||
< any_algorithms<typename packed_options::void_pointer>
|
||||
< AnyAlgorithm
|
||||
, any_node_traits<typename packed_options::void_pointer>
|
||||
, member_tag
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
@ -47,7 +47,8 @@ struct make_avl_set_base_hook
|
||||
::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, AvlTreeBaseHookId
|
||||
@ -177,7 +178,8 @@ struct make_avl_set_member_hook
|
||||
::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
@ -47,7 +47,8 @@ struct make_bs_set_base_hook
|
||||
::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, BsTreeBaseHookId
|
||||
@ -176,7 +177,8 @@ struct make_bs_set_member_hook
|
||||
::type packed_options;
|
||||
|
||||
typedef generic_hook
|
||||
< bstree_algorithms<tree_node_traits<typename packed_options::void_pointer> >
|
||||
< BsTreeAlgorithms
|
||||
, tree_node_traits<typename packed_options::void_pointer>
|
||||
, member_tag
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
@ -35,7 +35,10 @@ enum algo_types
|
||||
AvlTreeAlgorithms,
|
||||
SgTreeAlgorithms,
|
||||
SplayTreeAlgorithms,
|
||||
TreapAlgorithms
|
||||
TreapAlgorithms,
|
||||
UnorderedAlgorithms,
|
||||
UnorderedCircularSlistAlgorithms,
|
||||
AnyAlgorithm
|
||||
};
|
||||
|
||||
template<algo_types AlgoType, class NodeTraits>
|
||||
|
@ -23,8 +23,9 @@
|
||||
|
||||
#include <boost/intrusive/detail/workaround.hpp>
|
||||
#include <boost/intrusive/pointer_rebind.hpp>
|
||||
#include <cstddef>
|
||||
#include <boost/intrusive/detail/mpl.hpp>
|
||||
#include <boost/intrusive/detail/algo_type.hpp>
|
||||
#include <cstddef>
|
||||
|
||||
namespace boost {
|
||||
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 boost
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <boost/intrusive/detail/mpl.hpp>
|
||||
#include <boost/intrusive/detail/assert.hpp>
|
||||
#include <boost/intrusive/detail/node_holder.hpp>
|
||||
#include <boost/intrusive/detail/algo_type.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
namespace boost {
|
||||
@ -120,7 +121,8 @@ struct hooktags_impl
|
||||
/// @endcond
|
||||
|
||||
template
|
||||
< class NodeAlgorithms
|
||||
< boost::intrusive::algo_types Algo
|
||||
, class NodeTraits
|
||||
, class Tag
|
||||
, link_mode_type LinkMode
|
||||
, base_hook_type BaseHookType
|
||||
@ -135,20 +137,20 @@ class generic_hook
|
||||
//from the hook.
|
||||
: public detail::if_c
|
||||
< detail::is_same<Tag, member_tag>::value
|
||||
, typename NodeAlgorithms::node
|
||||
, node_holder<typename NodeAlgorithms::node, Tag, BaseHookType>
|
||||
, typename NodeTraits::node
|
||||
, node_holder<typename NodeTraits::node, Tag, BaseHookType>
|
||||
>::type
|
||||
//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
|
||||
//special typedef and obtain generic_hook's internal types in order to deduce
|
||||
//value_traits for this hook.
|
||||
, 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>
|
||||
/// @endcond
|
||||
{
|
||||
/// @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_ptr node_ptr;
|
||||
typedef typename node_algorithms::const_node_ptr const_node_ptr;
|
||||
@ -156,7 +158,7 @@ class generic_hook
|
||||
public:
|
||||
|
||||
typedef hooktags_impl
|
||||
< typename NodeAlgorithms::node_traits
|
||||
< NodeTraits
|
||||
, Tag, LinkMode, BaseHookType> hooktags;
|
||||
|
||||
node_ptr this_ptr()
|
||||
|
@ -50,7 +50,8 @@ struct make_list_base_hook
|
||||
>::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, ListBaseHookId
|
||||
@ -177,7 +178,8 @@ struct make_list_member_hook
|
||||
>::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
@ -49,7 +49,8 @@ struct make_set_base_hook
|
||||
>::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, RbTreeBaseHookId
|
||||
@ -180,7 +181,8 @@ struct make_set_member_hook
|
||||
>::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
@ -50,7 +50,8 @@ struct make_slist_base_hook
|
||||
>::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, SlistBaseHookId
|
||||
@ -178,7 +179,8 @@ struct make_slist_member_hook
|
||||
>::type packed_options;
|
||||
|
||||
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
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
@ -152,19 +152,33 @@ struct uset_algo_wrapper : public Algo
|
||||
{};
|
||||
|
||||
template<class VoidPointer, bool StoreHash, bool OptimizeMultiKey>
|
||||
struct get_uset_node_algo
|
||||
struct get_uset_node_traits
|
||||
{
|
||||
typedef typename detail::if_c
|
||||
< (StoreHash || OptimizeMultiKey)
|
||||
, unordered_node_traits<VoidPointer, StoreHash, OptimizeMultiKey>
|
||||
, 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;
|
||||
};
|
||||
|
||||
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
|
||||
|
||||
//! 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;
|
||||
|
||||
typedef generic_hook
|
||||
< typename get_uset_node_algo < typename packed_options::void_pointer
|
||||
, packed_options::store_hash
|
||||
, packed_options::optimize_multikey
|
||||
>::type
|
||||
< get_uset_algo_type <packed_options::optimize_multikey>::value
|
||||
, typename get_uset_node_traits < typename packed_options::void_pointer
|
||||
, packed_options::store_hash
|
||||
, packed_options::optimize_multikey
|
||||
>::type
|
||||
, typename packed_options::tag
|
||||
, packed_options::link_mode
|
||||
, HashBaseHookId
|
||||
@ -326,10 +341,11 @@ struct make_unordered_set_member_hook
|
||||
>::type packed_options;
|
||||
|
||||
typedef generic_hook
|
||||
< typename get_uset_node_algo< typename packed_options::void_pointer
|
||||
, packed_options::store_hash
|
||||
, packed_options::optimize_multikey
|
||||
>::type
|
||||
< get_uset_algo_type <packed_options::optimize_multikey>::value
|
||||
, typename get_uset_node_traits < typename packed_options::void_pointer
|
||||
, packed_options::store_hash
|
||||
, packed_options::optimize_multikey
|
||||
>::type
|
||||
, member_tag
|
||||
, packed_options::link_mode
|
||||
, NoBaseHookId
|
||||
|
Reference in New Issue
Block a user