Util--  1.1
dynamic_pool.hh
Go to the documentation of this file.
1 #ifndef __UTILS_SLABS_H__
2 #define __UTILS_SLABS_H__
3 
4 #include <vector>
5 #include <boost/cstdint.hpp>
6 
7 namespace utilmm
8 {
9  namespace pools
10  {
11  template<typename T>
12  class dynamic_auto;
13 
24  {
25  template<typename T>
26  friend class dynamic_auto;
27 
28  public:
29  typedef boost::uint32_t size_t;
30 
31  private:
32  typedef boost::uint8_t byte_t;
33 
34  struct item_t
35  {
36  size_t size;
37  byte_t payload[];
38  };
39 
40  typedef std::vector<item_t*> Buffers;
41 
42  static item_t* get_base(void* ptr);
43 
44  size_t m_size;
45  Buffers m_listpool, m_free;
46 
47  public:
48  dynamic_pool();
49  ~dynamic_pool();
50 
51  void* allocate(size_t size);
52  void deallocate(void* vbuffer);
53  };
54 
55 
56  template<typename T>
57  class dynamic_auto
58  {
59  T* m_ptr;
60 
61  struct safe_bool_struct
62  { void method(); };
63  typedef void (safe_bool_struct::*safe_bool)();
64 
65  public:
66  dynamic_auto(T* t) throw()
67  : m_ptr(t) {}
68 
70  {
71  if (m_ptr)
72  delete[] dynamic_pool::get_base(m_ptr);
73  }
74 
75  dynamic_auto(dynamic_auto const& copy) throw()
76  {
77  m_ptr = copy.m_ptr;
78  copy.m_ptr = 0;
79  }
80 
81  void reset(T* t) throw()
82  { m_ptr = t; }
83 
84  operator safe_bool() const throw()
85  { return m_ptr ? &safe_bool_struct::method : 0; }
86 
87  T* get() throw() { return m_ptr; }
88  T const* get() const throw() { return m_ptr; }
89  T* release() throw()
90  {
91  T* temp = m_ptr;
92  m_ptr = 0;
93  return temp;
94  }
95  };
96 
97  }
98 }
99 
100 #endif
101 
102 
dynamic_auto(dynamic_auto const &copy)
Definition: dynamic_pool.hh:75
void * allocate(size_t size)
Definition: dynamic_pool.hh:12
void reset(T *t)
Definition: dynamic_pool.hh:81
void deallocate(void *vbuffer)
boost::uint32_t size_t
Definition: dynamic_pool.hh:29
~dynamic_auto()
Definition: dynamic_pool.hh:69
T * release()
Definition: dynamic_pool.hh:89
Definition: dynamic_pool.hh:23
dynamic_auto(T *t)
Definition: dynamic_pool.hh:66

Generated on Tue Oct 9 2018 10:12:45 for Util-- by doxygen 1.8.6
SourceForge.net Project Page