20 #ifndef MULTI_POLICY_H_ 21 #define MULTI_POLICY_H_ 29 #include <boost/mpl/size.hpp> 30 #include <boost/mpl/at.hpp> 31 #include <boost/mpl/range_c.hpp> 32 #include <boost/mpl/transform.hpp> 33 #include <boost/mpl/back_inserter.hpp> 34 #include <boost/mpl/vector.hpp> 35 #include <boost/mpl/for_each.hpp> 37 #include <boost/intrusive/options.hpp> 43 template<
typename Policies>
44 struct multi_policy_traits {
45 typedef Policies policy_traits;
50 typedef typename Item::policy_hook_type type;
53 typedef detail::multi_type_container<
54 typename boost::mpl::transform1<policy_traits, getHook>::type> policy_hook_type;
56 template<
class Container>
57 struct container_hook {
58 typedef policy_hook_type type;
61 template<
class Base,
class Container,
class Hook>
63 typedef boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value>
67 template<
class Number>
69 typedef typename boost::mpl::at_c<policy_traits, Number::value>::type::
70 template policy<Base, Container,
71 boost::intrusive::function_hook<detail::FunctorHook<Hook, Container,
72 Number::value>>>::type
77 typedef typename boost::mpl::transform1<policies_range, getPolicy,
78 boost::mpl::back_inserter<boost::mpl::vector0<>>>::type
81 typedef detail::multi_policy_container<Base, policies> policy_container;
83 class type :
public policy_container {
85 typedef policy policy_base;
86 typedef Container parent_trie;
89 : policy_container(base)
96 policy_container::update(item);
102 return policy_container::insert(item);
108 policy_container::lookup(item);
114 policy_container::erase(item);
120 policy_container::clear();
123 struct max_size_setter {
124 max_size_setter(policy_container& container,
size_t size)
125 : m_container(container)
134 m_container.template get<U::value>().set_max_size(m_size);
138 policy_container& m_container;
143 set_max_size(
size_t max_size)
145 boost::mpl::for_each<boost::mpl::range_c<int, 0,
146 boost::mpl::size<policy_traits>::type::value>>(
147 max_size_setter(*
this, max_size));
154 return policy_container::template get<0>().get_max_size();
160 name_getter(std::string&
name)
171 m_name += boost::mpl::at_c<policy_traits, U::value>::type::GetName();
183 boost::mpl::for_each<boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value>>(
196 #endif // MULTI_POLICY_H_ Copyright (c) 2011-2015 Regents of the University of California.
Table::const_iterator iterator
Copyright (c) 2011-2015 Regents of the University of California.