YPC  0.2.0
ref.h
1 #pragma once
2 #include <atomic>
3 #include <memory>
4 
5 namespace ypc {
6 template <typename T> class ref {
7 public:
8  ref() : m_data(nullptr), m_len(0) {}
9  ref(T *data, size_t len)
10  : m_data(data),
11  m_len(len){
12  m_holder = std::shared_ptr<T>(m_data, ::ypc::ref<T>::delete_wild_pointer);
13  };
14 
15  inline size_t &len() { return m_len; }
16  inline const size_t &len() const { return m_len; }
17 
18  inline size_t &size() { return m_len; }
19  inline const size_t &size() const { return m_len; }
20 
21  inline T *data() { return m_data; }
22  inline const T *data() const { return m_data; }
23 
24  static void delete_wild_pointer(T *p) { free(p); }
25 
26 private:
27  T *m_data;
28  size_t m_len;
29  std::shared_ptr<T> m_holder;
30 };
31 
32 using bref = ref<uint8_t>;
33 } // namespace ypc
34 
ypc::ref
Definition: ref.h:6