OpenMS
Loading...
Searching...
No Matches
ExposedVector.h
Go to the documentation of this file.
1// Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2// SPDX-License-Identifier: BSD-3-Clause
3//
4// --------------------------------------------------------------------------
5// $Maintainer: Chris Bielow $
6// $Authors: Chris Bielow $
7// --------------------------------------------------------------------------
8
9#pragma once
10
11
12#include <cstddef> // for size_t
13#include <vector>
14#include <algorithm>
15#include <concepts>
16
17namespace OpenMS
18{
19 template<typename T>
20 concept LessThanComparable = requires(const T& a, const T& b) { // less and greater
21 { a < b } -> std::convertible_to<bool>;
22 };
23
24
26#define EXPOSED_VECTOR_INTERFACE(InnerElement) \
27 using ExpVec = ExposedVector< InnerElement >; \
28 using ExpVec::ExposedVector; \
29 using value_type = typename ExpVec::value_type; \
30 using iterator = typename ExpVec::iterator; \
31 using const_iterator = typename ExpVec::const_iterator; \
32 using reverse_iterator = typename ExpVec::reverse_iterator; \
33 using const_reverse_iterator = typename ExpVec::const_reverse_iterator; \
34 using size_type = typename ExpVec::size_type; \
35 using pointer = typename ExpVec::pointer; \
36 using reference = typename ExpVec::reference; \
37 using const_reference = typename ExpVec::const_reference; \
38 using difference_type = typename ExpVec::difference_type; \
39
40
60 template<class VectorElement>
62 {
63 public:
64 using VecMember = std::vector<VectorElement>;
65
66 // types
67 using value_type = typename VecMember::value_type;
68 using iterator = typename VecMember::iterator;
69 using const_iterator = typename VecMember::const_iterator;
70 using reverse_iterator = typename VecMember::reverse_iterator;
71 using const_reverse_iterator = typename VecMember::const_reverse_iterator;
72 using size_type = typename VecMember::size_type;
73 using pointer = typename VecMember::pointer;
74 using reference = typename VecMember::reference;
75 using const_reference = typename VecMember::const_reference;
76 using difference_type = typename VecMember::difference_type;
77
78 protected:
80
81 public:
82 ExposedVector() = default;
83 explicit ExposedVector(const size_t n)
84 : data_(n)
85 {
86 }
87 ExposedVector(const size_t n, const VectorElement& val) : data_(n, val)
88 {
89 }
90 template <class Iter> ExposedVector(Iter begin, Iter end)
91 : data_(begin, end)
92 {
93 }
95 ExposedVector(const ExposedVector& rhs) = default;
97 ExposedVector(ExposedVector&& rhs) noexcept = default;
98
100 ExposedVector& operator=(const ExposedVector& rhs) = default;
102 ExposedVector& operator=(ExposedVector&& rhs) noexcept = default;
103
104 iterator begin() noexcept
105 {
106 return data_.begin();
107 }
108 iterator end() noexcept
109 {
110 return data_.end();
111 }
112 const_iterator begin() const noexcept
113 {
114 return data_.begin();
115 }
116 const_iterator end() const noexcept
117 {
118 return data_.end();
119 }
120 const_iterator cbegin() const noexcept
121 {
122 return data_.cbegin();
123 }
124 const_iterator cend() const noexcept
125 {
126 return data_.cend();
127 }
128 size_t size() const noexcept
129 {
130 return data_.size();
131 }
132 void resize(const size_t new_size)
133 {
134 data_.resize(new_size);
135 }
136 void reserve(const size_t new_size)
137 {
138 data_.reserve(new_size);
139 }
140 bool empty() const noexcept
141 {
142 return data_.empty();
143 }
144 VectorElement& operator[](size_t i) noexcept
145 {
146 return data_[i];
147 }
148 const VectorElement& operator[](size_t i) const noexcept
149 {
150 return data_[i];
151 }
152 VectorElement& at(size_t i)
153 {
154 return data_.at(i);
155 }
156 const VectorElement& at(size_t i) const
157 {
158 return data_.at(i);
159 }
160 VectorElement& back() noexcept
161 {
162 return data_.back();
163 }
164 const VectorElement& back() const noexcept
165 {
166 return data_.back();
167 }
168 void push_back(const VectorElement& f)
169 {
170 data_.push_back(f);
171 }
172 void push_back(VectorElement&& f)
173 {
174 data_.push_back(std::move(f));
175 }
176 template<typename... Args>
177 decltype(auto) emplace_back(Args&&... args)
178 {
179 return data_.emplace_back(std::forward<Args>(args)...);
180 }
181 void pop_back() noexcept
182 {
183 data_.pop_back();
184 }
186 {
187 return data_.erase(where);
188 }
190 {
191 return data_.erase(from, to);
192 }
193 template<typename T>
194 iterator insert(const_iterator where, T from, T to)
195 {
196 return data_.insert(where, from, to);
197 }
198
200 void clear() noexcept
201 {
202 data_.clear();
203 }
204
207 {
208 return data_.rbegin();
209 }
210
213 {
214 return data_.rbegin();
215 }
216
219 {
220 return data_.rend();
221 }
222
225 {
226 return data_.rend();
227 }
228
231 {
232 return data_.crbegin();
233 }
234
237 {
238 return data_.crend();
239 }
240
242 void swap(ExposedVector& other) noexcept
243 {
244 data_.swap(other.data_);
245 }
246
248 template<typename InputIt>
249 void assign(InputIt first, InputIt last)
250 {
251 data_.assign(first, last);
252 }
253
255 void assign(size_type count, const VectorElement& value)
256 {
257 data_.assign(count, value);
258 }
259
261 void assign(std::initializer_list<VectorElement> init)
262 {
263 data_.assign(init);
264 }
265
267 VectorElement& front() noexcept
268 {
269 return data_.front();
270 }
271
273 const VectorElement& front() const noexcept
274 {
275 return data_.front();
276 }
277
279 size_type max_size() const noexcept
280 {
281 return data_.max_size();
282 }
283
285 size_type capacity() const noexcept
286 {
287 return data_.capacity();
288 }
289
292 {
293 data_.shrink_to_fit();
294 }
295
297 iterator insert(const_iterator pos, const VectorElement& value)
298 {
299 return data_.insert(pos, value);
300 }
301
303 iterator insert(const_iterator pos, VectorElement&& value)
304 {
305 return data_.insert(pos, std::move(value));
306 }
307
309 iterator insert(const_iterator pos, size_type count, const VectorElement& value)
310 {
311 return data_.insert(pos, count, value);
312 }
313
315 iterator insert(const_iterator pos, std::initializer_list<VectorElement> init)
316 {
317 return data_.insert(pos, init);
318 }
319
321 template<typename... Args>
323 {
324 return data_.emplace(pos, std::forward<Args>(args)...);
325 }
326
328 const VecMember& getData() const
329 {
330 return data_;
331 }
334 {
335 return data_;
336 }
337
339 bool operator==(const ExposedVector& other) const
340 {
341 return data_ == other.data_;
342 }
343
345 bool operator!=(const ExposedVector& other) const
346 {
347 return data_ != other.data_;
348 }
349
350 // Define operators only if underlying vector supports them
352 {
353 return data_ < other.data_;
354 }
355
357 {
358 return data_ <= other.data_;
359 }
360
362 {
363 return data_ > other.data_;
364 }
365
367 {
368 return data_ >= other.data_;
369 }
370 };
371} // namespace OpenMS
Definition ExposedVector.h:62
iterator insert(const_iterator where, T from, T to)
Definition ExposedVector.h:194
const VecMember & getData() const
read-only access to the underlying data
Definition ExposedVector.h:328
bool operator<=(const ExposedVector &other) const
Definition ExposedVector.h:356
void clear() noexcept
Clear all elements.
Definition ExposedVector.h:200
std::vector< VectorElement > VecMember
Definition ExposedVector.h:64
iterator insert(const_iterator pos, std::initializer_list< VectorElement > init)
Insert from initializer list.
Definition ExposedVector.h:315
typename VecMember::iterator iterator
Definition ExposedVector.h:68
const_iterator begin() const noexcept
Definition ExposedVector.h:112
iterator insert(const_iterator pos, size_type count, const VectorElement &value)
Insert n copies of value.
Definition ExposedVector.h:309
typename VecMember::const_iterator const_iterator
Definition ExposedVector.h:69
bool operator==(const ExposedVector &other) const
Equality comparison.
Definition ExposedVector.h:339
void assign(size_type count, const VectorElement &value)
Assign n copies of value.
Definition ExposedVector.h:255
void reserve(const size_t new_size)
Definition ExposedVector.h:136
typename VecMember::pointer pointer
Definition ExposedVector.h:73
bool operator!=(const ExposedVector &other) const
Inequality comparison.
Definition ExposedVector.h:345
size_t size() const noexcept
Definition ExposedVector.h:128
ExposedVector & operator=(const ExposedVector &rhs)=default
Assignment.
bool empty() const noexcept
Definition ExposedVector.h:140
ExposedVector(const size_t n)
Definition ExposedVector.h:83
void swap(ExposedVector &other) noexcept
Swap contents with another ExposedVector.
Definition ExposedVector.h:242
decltype(auto) emplace_back(Args &&... args)
Definition ExposedVector.h:177
typename VecMember::size_type size_type
Definition ExposedVector.h:72
VecMember & getData()
read access to the underlying data
Definition ExposedVector.h:333
typename VecMember::value_type value_type
Definition ExposedVector.h:67
VectorElement & back() noexcept
Definition ExposedVector.h:160
const_iterator end() const noexcept
Definition ExposedVector.h:116
iterator emplace(const_iterator pos, Args &&... args)
Emplace element at position.
Definition ExposedVector.h:322
void shrink_to_fit()
Shrink capacity to fit size.
Definition ExposedVector.h:291
typename VecMember::reverse_iterator reverse_iterator
Definition ExposedVector.h:70
bool operator>=(const ExposedVector &other) const
Definition ExposedVector.h:366
iterator insert(const_iterator pos, const VectorElement &value)
Insert single element.
Definition ExposedVector.h:297
iterator insert(const_iterator pos, VectorElement &&value)
Insert single element (move)
Definition ExposedVector.h:303
typename VecMember::const_reference const_reference
Definition ExposedVector.h:75
const VectorElement & front() const noexcept
Get first element (const)
Definition ExposedVector.h:273
ExposedVector & operator=(ExposedVector &&rhs) noexcept=default
Move Assignment.
ExposedVector(ExposedVector &&rhs) noexcept=default
Move C'tor.
typename VecMember::difference_type difference_type
Definition ExposedVector.h:76
VecMember data_
the container which holds all the data
Definition ExposedVector.h:79
bool operator<(const ExposedVector &other) const
Definition ExposedVector.h:351
void pop_back() noexcept
Definition ExposedVector.h:181
iterator begin() noexcept
Definition ExposedVector.h:104
const_iterator cend() const noexcept
Definition ExposedVector.h:124
void resize(const size_t new_size)
Definition ExposedVector.h:132
void push_back(VectorElement &&f)
Definition ExposedVector.h:172
VectorElement & at(size_t i)
Definition ExposedVector.h:152
VectorElement & front() noexcept
Get first element.
Definition ExposedVector.h:267
typename VecMember::reference reference
Definition ExposedVector.h:74
void assign(std::initializer_list< VectorElement > init)
Assign from initializer list.
Definition ExposedVector.h:261
const_reverse_iterator crbegin() const noexcept
Get const reverse iterator to beginning.
Definition ExposedVector.h:230
void assign(InputIt first, InputIt last)
Assign values from iterators.
Definition ExposedVector.h:249
ExposedVector(const size_t n, const VectorElement &val)
Definition ExposedVector.h:87
const_iterator cbegin() const noexcept
Definition ExposedVector.h:120
size_type max_size() const noexcept
Get maximum possible size.
Definition ExposedVector.h:279
const_reverse_iterator rend() const noexcept
Get const reverse iterator to end.
Definition ExposedVector.h:224
reverse_iterator rbegin() noexcept
Get reverse iterator to beginning.
Definition ExposedVector.h:206
const_reverse_iterator crend() const noexcept
Get const reverse iterator to end.
Definition ExposedVector.h:236
void push_back(const VectorElement &f)
Definition ExposedVector.h:168
reverse_iterator rend() noexcept
Get reverse iterator to end.
Definition ExposedVector.h:218
ExposedVector(const ExposedVector &rhs)=default
Copy C'tor.
const VectorElement & back() const noexcept
Definition ExposedVector.h:164
ExposedVector(Iter begin, Iter end)
Definition ExposedVector.h:90
VectorElement & operator[](size_t i) noexcept
Definition ExposedVector.h:144
const VectorElement & operator[](size_t i) const noexcept
Definition ExposedVector.h:148
bool operator>(const ExposedVector &other) const
Definition ExposedVector.h:361
size_type capacity() const noexcept
Get current capacity.
Definition ExposedVector.h:285
typename VecMember::const_reverse_iterator const_reverse_iterator
Definition ExposedVector.h:71
iterator erase(const_iterator where) noexcept
Definition ExposedVector.h:185
const VectorElement & at(size_t i) const
Definition ExposedVector.h:156
iterator erase(const_iterator from, const_iterator to) noexcept
Definition ExposedVector.h:189
iterator end() noexcept
Definition ExposedVector.h:108
const_reverse_iterator rbegin() const noexcept
Get const reverse iterator to beginning.
Definition ExposedVector.h:212
Definition ExposedVector.h:20
custom arguments to allow for looping calls
Definition WizardHelper.h:47
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19