30 #ifndef _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H 
   31 #define _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H 1 
   45     : _M_shift_count(0), _M_iterate(0), _M_resize(0), _M_list_cost(0),
 
   46       _M_vector_cost(0), _M_valid(
true) { }
 
   50       _M_resize(0), _M_list_cost(0), _M_vector_cost(0), _M_valid(
true) { }
 
   56       _M_iterate(__o._M_iterate), _M_resize(__o._M_resize),
 
   57       _M_list_cost(__o._M_list_cost), _M_vector_cost(__o._M_vector_cost),
 
   58       _M_valid(__o._M_valid) { }
 
   63       _M_shift_count  += __o._M_shift_count;
 
   64       _M_iterate      += __o._M_iterate;
 
   65       _M_vector_cost  += __o._M_vector_cost;
 
   66       _M_list_cost    += __o._M_list_cost;
 
   67       _M_valid        &= __o._M_valid;
 
   68       _M_resize       += __o._M_resize;
 
   72     __write(FILE* __f)
 const 
   74       std::fprintf(__f, 
"%Zu %Zu %Zu %.0f %.0f\n", _M_shift_count,
 
   75            _M_resize, _M_iterate, _M_vector_cost, _M_list_cost);
 
   80     { 
return _M_vector_cost - _M_list_cost; }
 
   84     { 
return "change std::vector to std::list"; }
 
   88     { 
return _M_shift_count; }
 
   92     { 
return _M_iterate; }
 
   96     { 
return _M_list_cost; }
 
  100     { 
return _M_resize; }
 
  103     __set_list_cost(
float __lc)
 
  104     { _M_list_cost = __lc; }
 
  107     __set_vector_cost(
float __vc)
 
  108     { _M_vector_cost = __vc; }
 
  116     { _M_valid = 
false; }
 
  119     __opr_insert(std::size_t __pos, std::size_t __num)
 
  120     { _M_shift_count += __num - __pos; }
 
  123     __opr_iterate(std::size_t __num)
 
  124     { _M_iterate += __num; }
 
  127     __resize(std::size_t __from, std::size_t)
 
  128     { _M_resize += __from; }
 
  131     __opr_find(std::size_t __size)
 
  134       _M_iterate += 3.0 / 4.0 * __size;
 
  138     std::size_t _M_shift_count;
 
  139     std::size_t _M_iterate;
 
  140     std::size_t _M_resize;
 
  142     float _M_vector_cost;
 
  159   : 
public __trace_base<__vector2list_info, __vector2list_stack_info> 
 
  164     { __id = 
"vector-to-list"; }
 
  170     __insert(__object_t __obj, __stack_t __stack)
 
  175     __destruct(
const void* __obj)
 
  184       float __vc = __vector_cost(__res->__shift_count(), __res->__iterate(),
 
  186       float __lc = __list_cost(__res->__shift_count(), __res->__iterate(),
 
  188       __res->__set_vector_cost(__vc);
 
  189       __res->__set_list_cost(__lc);
 
  191       __retire_object(__obj);
 
  200     __opr_insert(
const void* __obj, std::size_t __pos, std::size_t __num)
 
  204     __res->__opr_insert(__pos, __num);
 
  208     __opr_iterate(
const void* __obj, std::size_t __num)
 
  212     __res->__opr_iterate(__num);
 
  216     __invalid_operator(
const void* __obj)
 
  220     __res->__set_invalid();
 
  224     __resize(
const void* __obj, std::size_t __from, std::size_t __to)
 
  228     __res->__resize(__from, __to);
 
  232     __vector_cost(std::size_t __shift, std::size_t __iterate,
 
  233           std::size_t __resize)
 
  236           * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value
 
  238           * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value
 
  240           * _GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor).__value);
 
  244     __list_cost(std::size_t __shift, std::size_t __iterate,
 
  245         std::size_t __resize)
 
  248           * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value
 
  250           * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value
 
  252           * _GLIBCXX_PROFILE_DATA(__list_resize_cost_factor).__value);
 
  256     __opr_find(
const void* __obj, std::size_t __size)
 
  260     __res->__opr_find(__size);
 
  266   __trace_vector_to_list_init()
 
  270   __trace_vector_to_list_report(FILE* __f, __warning_vector_t& __warnings)
 
  272     if (_GLIBCXX_PROFILE_DATA(_S_vector_to_list))
 
  274     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->
 
  275       __collect_warnings(__warnings);
 
  276     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__write(__f);
 
  281   __trace_vector_to_list_construct(
const void* __obj)
 
  286     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__insert(__obj, __get_stack());
 
  290   __trace_vector_to_list_destruct(
const void* __obj)
 
  295     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__destruct(__obj);
 
  299   __trace_vector_to_list_insert(
const void* __obj, std::size_t __pos,
 
  305     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_insert(__obj, __pos,
 
  310   __trace_vector_to_list_iterate(
const void* __obj, std::size_t __num = 1)
 
  315     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_iterate(__obj, __num);
 
  319   __trace_vector_to_list_invalid_operator(
const void* __obj)
 
  324     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__invalid_operator(__obj);
 
  328   __trace_vector_to_list_resize(
const void* __obj, std::size_t __from,
 
  334     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__resize(__obj, __from, __to);
 
  338   __trace_vector_to_list_find(
const void* __obj, std::size_t __size)
 
  343     _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_find(__obj, __size);
 
bool __profcxx_init()
This function must be called by each instrumentation point. 
Base class for all trace producers. 
Interface of the profiling runtime library. 
A vector-to-list instrumentation line in the stack table. 
Data structures to represent a single profiling event. 
Vector-to-list instrumentation producer. 
A vector-to-list instrumentation line in the object table. 
Data structures to represent profiling traces. 
GNU profile code for public use. 
Base class for a line in the object table.