CsPointer  2.0.0
cs_shared_array_pointer.h
1 
19 #ifndef LIB_CS_SHARED_ARRAY_POINTER_H
20 #define LIB_CS_SHARED_ARRAY_POINTER_H
21 
22 #include <cs_pointer_traits.h>
23 #include <cs_shared_pointer.h>
24 
25 #include <memory>
26 
27 namespace CsPointer {
28 
29 template <typename T>
30 class CsSharedArrayPointer : public CsSharedPointer<cs_add_missing_extent_t<T>>
31 {
32  public:
33  using element_type = typename std::shared_ptr<cs_add_missing_extent_t<T>>::element_type;
35  using pointer = element_type *;
36 
39  using Pointer = pointer;
40 
42 
44  : CsSharedPointer<cs_add_missing_extent_t<T>>(other.m_ptr)
45  {
46  }
47 
49  : CsSharedPointer<cs_add_missing_extent_t<T>>(other.m_ptr)
50  {
51  }
52 
54  {
55  this->m_ptr = other.m_ptr;
56  return *this;
57  }
58 
60  {
61  this->m_ptr = other.m_ptr;
62  return *this;
63  }
64 
66  : CsSharedPointer<cs_add_missing_extent_t<T>>(std::move(other.m_ptr))
67  {
68  }
69 
71  : CsSharedPointer<cs_add_missing_extent_t<T>>(std::move(other.m_ptr))
72  {
73  }
74 
76  {
77  this->m_ptr = std::move(other.m_ptr);
78  return *this;
79  }
80 
82  {
83  this->m_ptr = std::move(other.m_ptr);
84  return *this;
85  }
86 
87  element_type &operator*() const noexcept {
88  return this->get()[0];
89  }
90 
91  element_type & operator[](std::size_t index) const noexcept {
92  return this->get()[index];
93  }
94 };
95 
96 template <typename T, typename = typename std::enable_if_t<std::is_array_v<T>>>
97 CsSharedArrayPointer<T> make_shared(std::size_t size)
98 {
99  using Type = std::remove_extent_t<T>;
100 
101  return std::shared_ptr<T>(new Type[size]);
102 }
103 
104 } // end namespace
105 
106 #endif
CsSharedPointer< cs_add_missing_extent_t< T > > make_shared(Args &&...args)
Definition: cs_shared_pointer.h:310
element_type & operator*() const noexcept
Definition: cs_shared_array_pointer.h:87
CsSharedArrayPointer & operator=(CsSharedArrayPointer< element_type[]> &&other)
Definition: cs_shared_array_pointer.h:81
CsSharedArrayPointer & operator=(CsSharedArrayPointer< element_type > &&other)
Definition: cs_shared_array_pointer.h:75
pointer get() const noexcept
Definition: cs_shared_pointer.h:203
CsSharedArrayPointer(CsSharedArrayPointer< element_type[]> &&other)
Definition: cs_shared_array_pointer.h:70
CsSharedArrayPointer(CsSharedArrayPointer< element_type > &&other)
Definition: cs_shared_array_pointer.h:65
CsSharedArrayPointer(const CsSharedArrayPointer< element_type[]> &other)
Definition: cs_shared_array_pointer.h:48
CsSharedArrayPointer(const CsSharedArrayPointer< element_type > &other)
Definition: cs_shared_array_pointer.h:43
element_type * pointer
Definition: cs_shared_array_pointer.h:35
CsSharedArrayPointer & operator=(const CsSharedArrayPointer< element_type > &other)
Definition: cs_shared_array_pointer.h:53
pointer Pointer
Definition: cs_shared_pointer.h:43
typename cs_add_missing_extent< T >::type cs_add_missing_extent_t
Definition: cs_pointer_traits.h:35
CsWeakPointer< cs_add_missing_extent_t< T > > weak_type
Definition: cs_shared_array_pointer.h:34
element_type & operator[](std::size_t index) const noexcept
Definition: cs_shared_array_pointer.h:91
element_type ElementType
Definition: cs_shared_pointer.h:41
Stores a weak pointer to a potentially shared object.
Definition: cs_shared_pointer.h:31
CsSharedArrayPointer & operator=(const CsSharedArrayPointer< element_type[]> &other)
Definition: cs_shared_array_pointer.h:59
typename std::shared_ptr< cs_add_missing_extent_t< T > >::element_type element_type
Definition: cs_shared_array_pointer.h:33
Stores a pointer to a potentially shared object.
Definition: cs_shared_pointer.h:34
element_type * pointer
Definition: cs_shared_pointer.h:39
Stores a shared pointer to a dynamically allocated array of objects.
Definition: cs_shared_array_pointer.h:30
Namespace for the CsPointer library.