47 template<
typename val,
int default_base>
54 m_base = default_base;
62 m_base = default_base;
63 if(m_list.size() > m_base)
64 m_list.resize(m_base);
77 if(m_list.size() > m_base )
98 return m_last_avg_val = (double)(vl/m_list.size());
100 return m_last_avg_val = (double)vl;
107 return m_list.back();
114 double m_last_avg_val;
115 std::list<value_type> m_list;
120#ifdef WINDOWS_PLATFORM
125 class timing_guard_base
128 virtual ~timing_guard_base(){};
132 class timing_guard:
public timing_guard_base
135 timing_guard(
T& avrg):m_avrg(avrg)
137 m_start_ticks = ::GetTickCount();
142 m_avrg.push(::GetTickCount()-m_start_ticks);
150 template<
class t_timing>
151 timing_guard_base* create_timing_guard(t_timing& timing){
return new timing_guard<t_timing>(timing);}
153#define BEGIN_TIMING_ZONE(timing_var) { boost::shared_ptr<math_helper::timing_guard_base> local_timing_guard_ptr(math_helper::create_timing_guard(timing_var));
154#define END_TIMING_ZONE() }
158 template<u
int64_t default_time_window>
165 m_time_window = default_time_window;
166 m_last_speed_value = 0;
173 m_chicks.push_back(ticks);
182 for(
size_t s = 0; s != count; s++)
192 return m_last_speed_value = m_chicks.size();
199 std::list<uint64_t>::iterator it = m_chicks.begin();
200 while(it != m_chicks.end())
202 if(*it + m_time_window < ticks)
203 m_chicks.erase(it++);
211 std::list<uint64_t> m_chicks;
213 size_t m_last_speed_value;
214 critical_section m_lock;
218 template<
class tlist>
221 for(
typename tlist::iterator it = t_list.begin();it!=t_list.end();it++)
223 size_t offset = rand()%t_list.size();
224 typename tlist::iterator it_2 = t_list.begin();
225 for(
size_t local_offset = 0;local_offset!=offset;local_offset++)
229 std::swap(*it_2, *it);
233 template<u
int64_t scale,
int default_
interval,
bool start_immediate = true>
240 GetSystemTimeAsFileTime(&fileTime);
241 unsigned __int64 present = 0;
242 present |= fileTime.dwHighDateTime;
243 present = present << 32;
244 present |= fileTime.dwLowDateTime;
249 gettimeofday(&tv, NULL);
250 return tv.tv_sec * 1000000 + tv.tv_usec;
257 m_last_worked_time = 0;
259 m_last_worked_time = get_time();
262 template<
class functor_t>
267 if(current_time - m_last_worked_time > m_interval)
270 m_last_worked_time = get_time();
281 template<
int default_
interval,
bool start_immediate = true>
283 template<
int default_
interval,
bool start_immediate = true>