26 #ifndef MLN_UTIL_HQUEUES_HH
27 # define MLN_UTIL_HQUEUES_HH
40 # include <mln/core/site_set/p_queue_fast.hh>
41 # include <mln/histo/array.hh>
42 # include <mln/value/set.hh>
51 template <
typename P,
typename T>
58 hqueues(
const histo::array<T>& h);
60 const p_queue_fast<P>& operator[](
unsigned i)
const;
61 p_queue_fast<P>& operator[](
unsigned i);
63 const p_queue_fast<P>& operator()(
const T& v)
const;
64 p_queue_fast<P>& operator()(
const T& v);
69 void pre_allocate_(
unsigned i);
71 const histo::array<T>& h_;
73 std::vector<bool> allocated_;
74 std::vector< p_queue_fast<P> >queues_;
78 # ifndef MLN_INCLUDE_ONLY
80 template <
typename P,
typename T>
82 hqueues<P,T>::hqueues(
const histo::array<T>& h)
84 s_ (mln::
value::set<T>::the()),
85 allocated_ (nvalues, false),
90 template <
typename P,
typename T>
93 hqueues<P,T>::pre_allocate_(
unsigned i)
95 mln_precondition(i < nvalues);
98 queues_[i].reserve(h_[i]);
104 template <
typename P,
typename T>
106 const p_queue_fast<P>&
107 hqueues<P,T>::operator[](
unsigned i)
const
109 mln_precondition(i < nvalues);
114 template <
typename P,
typename T>
117 hqueues<P,T>::operator[](
unsigned i)
119 mln_precondition(i < nvalues);
124 template <
typename P,
typename T>
126 const p_queue_fast<P>&
127 hqueues<P,T>::operator()(
const T& v)
const
129 unsigned i = s_.index_of(v);
134 template <
typename P,
typename T>
137 hqueues<P,T>::operator()(
const T& v)
139 unsigned i = s_.index_of(v);
145 template <
typename P,
typename T>
148 hqueues<P,T>::vset()
const
153 # endif // ! MLN_INCLUDE_ONLY
159 #endif // !MLN_UTIL_HQUEUES_HH