PST SDK  5.2.0.0-0eac0f6
PstArray.h
Go to the documentation of this file.
1 // Copyright PS-Tech B.V. All Rights Reserved.
2 
3 #pragma once
4 
5 #include "TrackerExceptions.h"
6 
7 #include <cstddef>
8 #include <cassert>
9 
10 namespace PSTech
11 {
12 namespace Utils
13 {
18  template<typename T, size_t Size>
19  class PstArray
20  {
21  public:
22  typedef T value_type;
23  typedef size_t size_type;
24  typedef T* pointer;
25  typedef const T* const_pointer;
26  typedef T& reference;
27  typedef const T& const_reference;
28  typedef T* iterator;
29  typedef const T* const_iterator;
30 
34  constexpr size_type size() const
35  {
36  return Size;
37  }
38 
40  constexpr bool empty() const
41  {
42  return Size == 0;
43  }
44 
47  {
48  return _array;
49  }
50 
53  {
54  return _array;
55  }
56 
63  {
64  check_bounds(index);
65  return _array[index];
66  }
67 
74  {
75  check_bounds(index);
76  return _array[index];
77  }
78 
81  {
82  assert(Size > 0);
83  return _array[0];
84  }
85 
88  {
89  assert(Size > 0);
90  return _array[0];
91  }
92 
95  {
96  assert(Size > 0);
97  return _array[Size - 1];
98  }
99 
102  {
103  assert(Size > 0);
104  return _array[Size - 1];
105  }
106 
109  {
110  return _array;
111  }
112 
115  {
116  return _array;
117  }
118 
121  {
122  return _array;
123  }
124 
127  {
128  return _array + Size;
129  }
130 
133  {
134  return _array + Size;
135  }
136 
139  {
140  return _array + Size;
141  }
142 
145  {
146  assert(index < Size);
147  return _array[index];
148  }
149 
152  {
153  assert(index < Size);
154  return _array[index];
155  }
156 
158  bool operator==(const PstArray<T, Size>& array) const
159  {
160  for (size_t index = 0; index < Size; ++index)
161  {
162  if (_array[index] != array[index])
163  {
164  return false;
165  }
166  }
167  return true;
168  }
169 
171  bool operator!=(const PstArray<T, Size>& array) const
172  {
173  return !(*this == array);
174  }
175 
178 
179  private:
181  {
182  if (index >= Size)
183  {
184  throw OutOfRangeException(("Requested index out of range: " + std::to_string(index) + " >= " + std::to_string(Size)).c_str());
185  }
186  }
187  };
188 }
189 }
PSTech::Utils::PstArray::operator!=
bool operator!=(const PstArray< T, Size > &array) const
Definition: PstArray.h:171
PSTech::Utils::PstArray::back
reference back()
Definition: PstArray.h:101
PSTech::Utils::PstArray::at
const_reference at(size_type index) const
Definition: PstArray.h:62
PSTech::Utils::PstArray
Definition: PstArray.h:19
PSTech::Utils::PstArray::iterator
T * iterator
Definition: PstArray.h:28
PSTech::Utils::PstArray::front
const_reference front() const
Definition: PstArray.h:80
PSTech::Utils::PstArray::data
const_pointer data() const
Definition: PstArray.h:46
PSTech::Utils::PstArray::front
reference front()
Definition: PstArray.h:87
PSTech::Utils::PstArray::empty
constexpr bool empty() const
Definition: PstArray.h:40
PSTech::Utils::PstArray::cend
const_iterator cend() const
Definition: PstArray.h:126
PSTech::Utils::PstArray::reference
T & reference
Definition: PstArray.h:26
PSTech::OutOfRangeException
Definition: TrackerExceptions.h:54
PSTech::Utils::PstArray::operator[]
const_reference operator[](size_type index) const
Definition: PstArray.h:144
PSTech::Utils::PstArray::const_reference
const typedef T & const_reference
Definition: PstArray.h:27
TrackerExceptions.h
PSTech::Utils::PstArray::begin
iterator begin()
Definition: PstArray.h:120
PSTech::Utils::PstArray::check_bounds
void check_bounds(size_type index)
Definition: PstArray.h:180
PSTech::Utils::PstArray::at
reference at(size_type index)
Definition: PstArray.h:73
PSTech::Utils::PstArray::size
constexpr size_type size() const
Definition: PstArray.h:34
PSTech::Utils::PstArray::operator==
bool operator==(const PstArray< T, Size > &array) const
Definition: PstArray.h:158
PSTech::Utils::PstArray::const_iterator
const typedef T * const_iterator
Definition: PstArray.h:29
PSTech::Utils::PstArray::value_type
T value_type
Definition: PstArray.h:22
PSTech::Utils::PstArray::_array
value_type _array[Size]
Definition: PstArray.h:177
PSTech::Utils::PstArray::size_type
size_t size_type
Definition: PstArray.h:23
PSTech::Utils::PstArray::back
const_reference back() const
Definition: PstArray.h:94
PSTech
Definition: PstArray.h:10
PSTech::Utils::PstArray::begin
const_iterator begin() const
Definition: PstArray.h:114
PSTech::Utils::PstArray::pointer
T * pointer
Definition: PstArray.h:24
PSTech::Utils::PstArray::cbegin
const_iterator cbegin() const
Definition: PstArray.h:108
PSTech::Utils::PstArray::const_pointer
const typedef T * const_pointer
Definition: PstArray.h:25
PSTech::Utils::PstArray::data
pointer data()
Definition: PstArray.h:52
PSTech::Utils::PstArray::end
const_iterator end() const
Definition: PstArray.h:132
PSTech::Utils::PstArray::end
iterator end()
Definition: PstArray.h:138