| Face Engine SDK 5.2.0 A face detection, recognition and tracking engine.

Span.h
1 #pragma once
2
3 #include <type_traits>
4 #include <cassert>
5
6 namespace fsdk {
7
13 template<class T>
14 class Span
15 {
16 T* data_ = nullptr;
17 std::size_t size_ = 0;
18
19 public:
20 /* @brief The type of value, including cv qualifiers
21 */
22 using element_type = T;
23
24 /* @brief The type of value of each span element
25 */
26 using value_type = typename std::remove_const<T>::type;
27
28 /* @brief The type of integer used to index the span
29 */
30 using index_type = std::ptrdiff_t;
31
32 /* @brief A pointer to a span element
33 */
34 using pointer = T*;
35
36 /* @brief A reference to a span element
37 */
38 using reference = T&;
39
40 /* @brief The iterator used by the container
41 */
42 using iterator = pointer;
43
44 /* @brief The const pointer used by the container
45 */
46 using const_pointer = T const*;
47
48 /* @brief The const reference used by the container
49 */
50 using const_reference = T const&;
51
52 /* @brief The const iterator used by the container
53 */
54 using const_iterator = const_pointer;
55
56 /* @brief Initializes the empty Span.
57 */
58 Span() = default;
59
60 /* @brief Default copy constructor
61 */
62 Span(Span const&) = default;
63
64 /* @brief Default assignment
65 */
66 Span& operator=(Span const&) = default;
67
72 Span(T* data, std::size_t size)
73 : data_(data), size_(size)
74 {
75 }
76
80 template<class ContiguousContainer>
81 Span(ContiguousContainer&& container)
82 : data_(container.data())
83 , size_(container.size())
84 {
85 }
86
90 template<class ContiguousContainer>
91 Span& operator=(ContiguousContainer&& container) {
92 data_ = container.data();
93 size_ = container.size();
94 return *this;
95 }
96
100 reference
101 operator[](std::size_t index) {
102 assert(index < size_);
103 return data_[index];
104 }
105
109 const_reference
110 operator[](std::size_t index) const {
111 assert(index < size_);
112 return data_[index];
113 }
114
117 bool
118 empty() const {
119 return size_ == 0;
120 }
121
124 pointer
125 data() const {
126 return data_;
127 }
128
131 std::size_t
132 size() const {
133 return getSize();
134 }
135
138 std::size_t
139 getSize() const {
140 return size_;
141 }
142
147 void
148 setSize(std::size_t size) {
149 size_ = size;
150 }
151
154 iterator
155 begin() {
156 return data_;
157 }
158
161 const_iterator
162 begin() const {
163 return data_;
164 }
165
168 const_iterator
169 cbegin() const {
170 return data_;
171 }
172
175 iterator
176 end() {
177 return data_ + size_;
178 }
179
182 const_iterator
183 end() const {
184 return data_ + size_;
185 }
186
189 const_iterator
190 cend() const {
191 return data_ + size_;
192 }
193 };
194 }
fsdk::Span
Span. @detail Not owning data view. It incapsulated pointer to the continuous array with one or more ...
Definition: Span.h:15
fsdk::Span::end
iterator end()
Returns an iterator to one past the end of the span.
Definition: Span.h:176
fsdk::Span::empty
bool empty() const
Returns true if the span is empty.
Definition: Span.h:118
fsdk
SDK namespace.
Definition: IAGSEstimator.h:8
fsdk::Span::data
pointer data() const
Returns a pointer to the beginning of the span.
Definition: Span.h:125
fsdk::Span::setSize
void setSize(std::size_t size)
Sets the number of elements in the span. @detail Because the span is not owning, this method will no ...
Definition: Span.h:148
fsdk::Span::operator=
Span & operator=(ContiguousContainer &&container)
Assignment operator with contiguous container.
Definition: Span.h:91
fsdk::Span::size
std::size_t size() const
Returns the number of elements in the span.
Definition: Span.h:132
fsdk::Span::operator[]
reference operator[](std::size_t index)
Square brackets operator for convenient acces to underlying array; param index Array index.
Definition: Span.h:101
fsdk::Span::end
const_iterator end() const
Returns an const iterator to one past the end of the span.
Definition: Span.h:183
fsdk::Span::operator[]
const_reference operator[](std::size_t index) const
Non-modifying square brackets operator for convenient acces to underlying array; param index Array in...
Definition: Span.h:110
fsdk::Span::begin
iterator begin()
Returns an iterator to the beginning of the span.
Definition: Span.h:155
fsdk::Span::cend
const_iterator cend() const
Returns an const iterator to one past the end of the span.
Definition: Span.h:190
fsdk::Span::getSize
std::size_t getSize() const
Returns the number of elements in the span.
Definition: Span.h:139
fsdk::Span::Span
Span(T *data, std::size_t size)
Constructor by pointer and size.
Definition: Span.h:72
fsdk::Span::Span
Span(ContiguousContainer &&container)
Constructor by contiguous container.
Definition: Span.h:81
fsdk::Span::begin
const_iterator begin() const
Returns an const iterator to the beginning of the span.
Definition: Span.h:162
fsdk::Span::cbegin
const_iterator cbegin() const
Returns an iterator to the beginning of the span.
Definition: Span.h:169