1*38fd1498Szrj // -*- C++ -*- 2*38fd1498Szrj // 3*38fd1498Szrj // Copyright (C) 2009-2018 Free Software Foundation, Inc. 4*38fd1498Szrj // 5*38fd1498Szrj // This file is part of the GNU ISO C++ Library. This library is free 6*38fd1498Szrj // software; you can redistribute it and/or modify it under the 7*38fd1498Szrj // terms of the GNU General Public License as published by the 8*38fd1498Szrj // Free Software Foundation; either version 3, or (at your option) 9*38fd1498Szrj // any later version. 10*38fd1498Szrj // 11*38fd1498Szrj // This library is distributed in the hope that it will be useful, 12*38fd1498Szrj // but WITHOUT ANY WARRANTY; without even the implied warranty of 13*38fd1498Szrj // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*38fd1498Szrj // GNU General Public License for more details. 15*38fd1498Szrj 16*38fd1498Szrj // Under Section 7 of GPL version 3, you are granted additional 17*38fd1498Szrj // permissions described in the GCC Runtime Library Exception, version 18*38fd1498Szrj // 3.1, as published by the Free Software Foundation. 19*38fd1498Szrj 20*38fd1498Szrj // You should have received a copy of the GNU General Public License along 21*38fd1498Szrj // with this library; see the file COPYING3. If not see 22*38fd1498Szrj // <http://www.gnu.org/licenses/>. 23*38fd1498Szrj 24*38fd1498Szrj /** @file profile/impl/profiler_vector_size.h 25*38fd1498Szrj * @brief Collection of vector size traces. 26*38fd1498Szrj */ 27*38fd1498Szrj 28*38fd1498Szrj // Written by Lixia Liu and Silvius Rus. 29*38fd1498Szrj 30*38fd1498Szrj #ifndef _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H 31*38fd1498Szrj #define _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H 1 32*38fd1498Szrj 33*38fd1498Szrj #include "profile/impl/profiler.h" 34*38fd1498Szrj #include "profile/impl/profiler_node.h" 35*38fd1498Szrj #include "profile/impl/profiler_trace.h" 36*38fd1498Szrj #include "profile/impl/profiler_state.h" 37*38fd1498Szrj #include "profile/impl/profiler_container_size.h" 38*38fd1498Szrj 39*38fd1498Szrj namespace __gnu_profile 40*38fd1498Szrj { 41*38fd1498Szrj /** @brief Hashtable size instrumentation trace producer. */ 42*38fd1498Szrj class __trace_vector_size 43*38fd1498Szrj : public __trace_container_size 44*38fd1498Szrj { 45*38fd1498Szrj public: __trace_vector_size()46*38fd1498Szrj __trace_vector_size() 47*38fd1498Szrj : __trace_container_size() 48*38fd1498Szrj { __id = "vector-size"; } 49*38fd1498Szrj }; 50*38fd1498Szrj 51*38fd1498Szrj inline void __trace_vector_size_init()52*38fd1498Szrj __trace_vector_size_init() 53*38fd1498Szrj { _GLIBCXX_PROFILE_DATA(_S_vector_size) = new __trace_vector_size(); } 54*38fd1498Szrj 55*38fd1498Szrj inline void __trace_vector_size_free()56*38fd1498Szrj __trace_vector_size_free() 57*38fd1498Szrj { delete _GLIBCXX_PROFILE_DATA(_S_vector_size); } 58*38fd1498Szrj 59*38fd1498Szrj inline void __trace_vector_size_report(FILE * __f,__warning_vector_t & __warnings)60*38fd1498Szrj __trace_vector_size_report(FILE* __f, __warning_vector_t& __warnings) 61*38fd1498Szrj { __trace_report(_GLIBCXX_PROFILE_DATA(_S_vector_size), __f, __warnings); } 62*38fd1498Szrj 63*38fd1498Szrj inline __container_size_info* __trace_vector_size_construct(std::size_t __num)64*38fd1498Szrj __trace_vector_size_construct(std::size_t __num) 65*38fd1498Szrj { 66*38fd1498Szrj if (!__profcxx_init()) 67*38fd1498Szrj return 0; 68*38fd1498Szrj 69*38fd1498Szrj if (!__reentrance_guard::__get_in()) 70*38fd1498Szrj return 0; 71*38fd1498Szrj 72*38fd1498Szrj __reentrance_guard __get_out; 73*38fd1498Szrj return _GLIBCXX_PROFILE_DATA(_S_vector_size)-> 74*38fd1498Szrj __insert(__get_stack(), __num); 75*38fd1498Szrj } 76*38fd1498Szrj 77*38fd1498Szrj inline void __trace_vector_size_resize(__container_size_info * __obj_info,std::size_t __from,std::size_t __to)78*38fd1498Szrj __trace_vector_size_resize(__container_size_info* __obj_info, 79*38fd1498Szrj std::size_t __from, std::size_t __to) 80*38fd1498Szrj { 81*38fd1498Szrj if (!__obj_info) 82*38fd1498Szrj return; 83*38fd1498Szrj 84*38fd1498Szrj __obj_info->__resize(__from, __to); 85*38fd1498Szrj } 86*38fd1498Szrj 87*38fd1498Szrj inline void __trace_vector_size_destruct(__container_size_info * __obj_info,std::size_t __num,std::size_t __inum)88*38fd1498Szrj __trace_vector_size_destruct(__container_size_info* __obj_info, 89*38fd1498Szrj std::size_t __num, std::size_t __inum) 90*38fd1498Szrj { 91*38fd1498Szrj if (!__obj_info) 92*38fd1498Szrj return; 93*38fd1498Szrj 94*38fd1498Szrj _GLIBCXX_PROFILE_DATA(_S_vector_size)-> 95*38fd1498Szrj __destruct(__obj_info, __num, __inum); 96*38fd1498Szrj } 97*38fd1498Szrj 98*38fd1498Szrj } // namespace __gnu_profile 99*38fd1498Szrj 100*38fd1498Szrj #endif /* _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H */ 101