MeshLib C++ Docs
Loading...
Searching...
No Matches
MRInplaceStack.h
Go to the documentation of this file.
1#pragma once
2
3#if _cpp_lib_inplace_vector >= 202406L
4
5#include <inplace_vector>
6#include <stack>
7
8namespace MR
9{
10
11template <typename T, size_t N>
12using InplaceStack = std::stack<T, std::inplace_vector<T, N>>;
13
14} // namespace MR
15
16#else
17
18#include <array>
19
20namespace MR
21{
22
24template <typename T, size_t N>
26{
27public:
28 const T& top() const { assert( size_ > 0 ); return data_[size_-1]; }
29 T& top() { assert( size_ > 0 ); return data_[size_-1]; }
30
31 bool empty() const { return size_ == 0; }
32 size_t size() const { return size_; }
33
34 void push( const T& value ) { assert( size_ < N ); data_[size_++] = value; }
35 void push( T&& value ) { assert( size_ < N ); data_[size_++] = std::move( value ); }
36
37 void pop() { assert( size_ > 0 ); size_--; }
38
39private:
40 std::array<T, N> data_;
41 size_t size_ = 0;
42};
43
44} // namespace MR
45
46#endif
Container class implementing in-place static sized stack.
Definition MRInplaceStack.h:26
const T & top() const
Definition MRInplaceStack.h:28
void pop()
Definition MRInplaceStack.h:37
bool empty() const
Definition MRInplaceStack.h:31
size_t size() const
Definition MRInplaceStack.h:32
void push(const T &value)
Definition MRInplaceStack.h:34
void push(T &&value)
Definition MRInplaceStack.h:35
T & top()
Definition MRInplaceStack.h:29
Definition MRCameraOrientationPlugin.h:8