6#include "MRPch/MRBindingMacros.h"
21template <
typename T,
typename I>
26 using reference =
typename std::vector<T>::reference;
28 using iterator =
typename std::vector<T>::iterator;
41 Vector( std::vector<T> && vec ) :
vec_( std::move( vec ) ) { }
43 template<
class InputIt >
44 Vector( InputIt first, InputIt last ) :
vec_( first, last ) { }
46 Vector( std::initializer_list<T> init ) :
vec_( init ) { }
53 [[nodiscard]]
bool empty()
const {
return vec_.empty(); }
55 [[nodiscard]] std::size_t
size()
const {
return vec_.size(); }
63 [[nodiscard]] std::size_t
capacity()
const {
return vec_.capacity(); }
69 assert( i <
vec_.size() );
74 assert( i <
vec_.size() );
88 auto reserved =
vec_.capacity();
89 if ( reserved > 0 && newSize > reserved )
91 while ( newSize > reserved )
93 vec_.reserve( reserved );
95 vec_.resize( newSize, value );
103 const size_t p = pos;
104 if (
const auto sz =
size(); p + len > sz )
114 for (
size_t i = 0; i < len; ++i )
127 if ( i + 1 >
size() )
137 T& emplace_back( Args&&... args ) {
return vec_.emplace_back( std::forward<Args>(args)... ); }
145 [[nodiscard]]
I beginId()
const {
return I(
size_t(0) ); }
169#if defined( MR_PARSING_FOR_ANY_BINDINGS ) || defined( MR_COMPILING_ANY_BINDINGS )
170 static_assert(
sizeof(T) > 0 );
176[[nodiscard]]
inline T
getAt(
const std::vector<T>& a,
size_t id, T def = {} )
178 return id < a.size() ? a[id] : def;
182template <
typename T,
typename I>
185 return getAt( a.
vec_,
size_t(
id ), def );
#define MR_LIFETIMEBOUND
Definition MRMacros.h:81
#define MR_LIFETIME_CAPTURE_BY_NESTED(x)
Definition MRMacros.h:86
#define MR_REQUIRES_IF_SUPPORTED(...)
Definition MRMacros.h:34
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:23
reference back() MR_LIFETIMEBOUND
Definition MRVector.h:142
void push_back(T &&t MR_LIFETIME_CAPTURE_BY_NESTED(this))
Definition MRVector.h:133
void pop_back()
Definition MRVector.h:134
Vector()=default
creates empty vector
MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std::constructible_from< T, Args &&... >) T &emplace_back(Args &&... args)
Definition MRVector.h:136
void clear()
Definition MRVector.h:51
typename std::vector< Node >::iterator iterator
Definition MRVector.h:28
std::size_t size() const
Definition MRVector.h:55
void resizeWithReserve(size_t newSize) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
doubles reserved memory until resize(newSize) can be done without reallocation
Definition MRVector.h:79
std::size_t capacity() const
Definition MRVector.h:63
void resize(size_t newSize) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
Definition MRVector.h:57
const_reference operator[](I i) const MR_LIFETIMEBOUND
Definition MRVector.h:67
reference autoResizeAt(I i) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
this accessor automatically adjusts the size of the vector
Definition MRVector.h:125
const T * data() const MR_LIFETIMEBOUND
Definition MRVector.h:154
typename std::vector< Node >::reference reference
Definition MRVector.h:26
MR_BIND_IGNORE_PY friend auto end(const Vector< T, I > &a)
Definition MRVector.h:163
const_reference front() const MR_LIFETIMEBOUND
Definition MRVector.h:139
const_reference back() const MR_LIFETIMEBOUND
Definition MRVector.h:141
void push_back(const T &t MR_LIFETIME_CAPTURE_BY_NESTED(this))
Definition MRVector.h:132
Vector(InputIt first, InputIt last)
Definition MRVector.h:44
Vector(std::vector< T > &&vec)
moves data from the given std::vector<T>
Definition MRVector.h:41
T getAt(const Buffer< T, I > &bmap MR_LIFETIMEBOUND_NESTED, I key, T def={})
given some buffer map and a key, returns the value associated with the key, or default value if key i...
Definition MRBuffer.h:128
reference operator[](I i) MR_LIFETIMEBOUND
Definition MRVector.h:72
void reserve(size_t capacity)
Definition MRVector.h:65
I beginId() const
returns the identifier of the first element
Definition MRVector.h:145
class MRMESH_CLASS I
Definition MRMeshFwd.h:137
void resizeNoInit(size_t targetSize) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
resizes the vector skipping initialization of its elements (more precisely initializing them using ( ...
Definition MRVector.h:61
size_t heapBytes() const
returns the amount of memory this object occupies on heap
Definition MRVector.h:159
I backId() const
returns the identifier of the back() element
Definition MRVector.h:148
void resizeWithReserve(size_t newSize, const T &value) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
doubles reserved memory until resize(newSize, value) can be done without reallocation
Definition MRVector.h:86
Vector(std::initializer_list< T > init)
Definition MRVector.h:46
reference front() MR_LIFETIMEBOUND
Definition MRVector.h:140
bool operator!=(const Vector &b) const MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
Definition MRVector.h:49
typename std::vector< Node >::const_reference const_reference
Definition MRVector.h:27
T * data() MR_LIFETIMEBOUND
Definition MRVector.h:153
MR_BIND_IGNORE_PY friend auto begin(Vector< T, I > &a)
Definition MRVector.h:162
typename std::vector< Node >::value_type value_type
Definition MRVector.h:25
MR_BIND_IGNORE_PY friend auto begin(const Vector< T, I > &a)
Definition MRVector.h:161
bool operator==(const Vector &b) const MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
Definition MRVector.h:48
void autoResizeSet(I i, T val) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
sets the element i to the given value, adjusting the size of the vector to include new element
Definition MRVector.h:119
bool empty() const
Definition MRVector.h:53
Vector(size_t size, const T &val)
creates a vector with size elements with the given value
Definition MRVector.h:38
typename std::vector< Node >::const_iterator const_iterator
Definition MRVector.h:29
std::vector< Node > vec_
Definition MRVector.h:167
void resizeNoInit(std::vector< T > &vec, size_t targetSize) MR_REQUIRES_IF_SUPPORTED(sizeof(T) > 0 &&std
Definition MRResizeNoInit.h:17
void swap(Vector &b)
Definition MRVector.h:156
void resize(size_t newSize, const T &t) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
Definition MRVector.h:58
MR_BIND_IGNORE_PY friend auto end(Vector< T, I > &a)
Definition MRVector.h:164
void autoResizeSet(I pos, size_t len, T val) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
Definition MRVector.h:100
Vector(size_t size) MR_REQUIRES_IF_SUPPORTED(sizeof(T)>0 &&std
creates a vector with size elements with default value
Definition MRVector.h:35
I endId() const
returns backId() + 1
Definition MRVector.h:151
only for bindings generation
Definition MRCameraOrientationPlugin.h:8