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{
12
13
14template <typename T, size_t N>
15using InplaceStack = std::stack<T, std::inplace_vector<T, N>>;
16
17}
18
19#else
20
21#include <array>
22
23namespace MR
24{
27
28
30template <typename T, size_t N>
32{
33public:
34 const T& top() const { assert( size_ > 0 ); return data_[size_-1]; }
35 T& top() { assert( size_ > 0 ); return data_[size_-1]; }
36
37 bool empty() const { return size_ == 0; }
38 size_t size() const { return size_; }
39
40 void push( const T& value ) { assert( size_ < N ); data_[size_++] = value; }
41 void push( T&& value ) { assert( size_ < N ); data_[size_++] = std::move( value ); }
42
43 void pop() { assert( size_ > 0 ); size_--; }
44
45private:
46 std::array<T, N> data_;
47 size_t size_ = 0;
48};
49
50}
51
52#endif
Container class implementing in-place static sized stack.
Definition MRInplaceStack.h:32
const T & top() const
Definition MRInplaceStack.h:34
void pop()
Definition MRInplaceStack.h:43
bool empty() const
Definition MRInplaceStack.h:37
size_t size() const
Definition MRInplaceStack.h:38
void push(const T &value)
Definition MRInplaceStack.h:40
void push(T &&value)
Definition MRInplaceStack.h:41
T & top()
Definition MRInplaceStack.h:35
only for bindings generation
Definition MRCameraOrientationPlugin.h:8