20 #ifndef RANDOM_POLICY_H_    21 #define RANDOM_POLICY_H_    25 #include "ns3/random-variable-stream.h"    26 #include "ns3/double.h"    28 #include <boost/intrusive/options.hpp>    29 #include <boost/intrusive/set.hpp>    38 struct random_policy_traits {
    46   struct policy_hook_type : 
public boost::intrusive::set_member_hook<> {
    50   template<
class Container>
    51   struct container_hook {
    52     typedef boost::intrusive::member_hook<Container, policy_hook_type, &Container::policy_hook_>
    56   template<
class Base, 
class Container, 
class Hook>
    61       return static_cast<typename policy_container::value_traits::hook_type*>(
    62                policy_container::value_traits::to_node_ptr(*item))->randomOrder;
    65     static const uint32_t&
    66     get_order(
typename Container::const_iterator item)
    68       return static_cast<const typename policy_container::value_traits::hook_type*>(
    69                policy_container::value_traits::to_node_ptr(*item))->randomOrder;
    73     struct MemberHookLess {
    75       operator()(
const Key& a, 
const Key& b)
 const    77         return get_order(&a) < get_order(&b);
    81     typedef boost::intrusive::multiset<Container,
    82                                        boost::intrusive::compare<MemberHookLess<Container>>,
    83                                        Hook> policy_container;
    86     class type : 
public policy_container {
    88       typedef policy policy_base; 
    89       typedef Container parent_trie;
    93         , u_rand(CreateObject<UniformRandomVariable>())
    96         u_rand->SetAttribute(
"Min", DoubleValue(0));
    97         u_rand->SetAttribute(
"Max", DoubleValue(std::numeric_limits<uint32_t>::max()));
   109         get_order(item) = u_rand->GetValue();
   111         if (max_size_ != 0 && policy_container::size() >= max_size_) {
   112           if (MemberHookLess<Container>()(*item, *policy_container::begin())) {
   119             base_.erase(&(*policy_container::begin()));
   123         policy_container::insert(*item);
   136         policy_container::erase(policy_container::s_iterator_to(*item));
   142         policy_container::clear();
   146       set_max_size(
size_t max_size)
   148         max_size_ = max_size;
   159         : base_(*((Base*)0)){};
   163       Ptr<UniformRandomVariable> u_rand;
   175 #endif // RANDOM_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.