1#ifndef INPLACE_VECTOR_INCLUDED
2#define INPLACE_VECTOR_INCLUDED
58template <
typename objtype,
size_t array_size = 16>
78 size_t arr_id = index / array_size;
79 size_t slot_id = index % array_size;
80 objtype *ptr =
nullptr;
174 bool resize(
size_t new_size,
const objtype &val = objtype()) {
175 if (new_size >
size()) {
176 for (
size_t i =
size(); i < new_size; i++) {
177 if (
push_back(val) ==
nullptr)
return true;
179 }
else if (new_size <
size()) {
181 for (
size_t i = new_size; i <
size(); i++)
get_object(i)->~objtype();
184 for (
size_t j = new_size / array_size + 1; j <
m_obj_arrays.size(); j++)
270 for (
size_t i = 0; i <
size(); i++) {
Utility container class to store elements stably and scalably.
Definition: inplace_vector.h:59
const objtype & operator[](size_t i) const
STL std::vector::operator[] interface.
Definition: inplace_vector.h:246
std::vector< objtype * > m_obj_arrays
Definition: inplace_vector.h:61
bool resize(size_t new_size, const objtype &val=objtype())
STL std::vector::resize interface.
Definition: inplace_vector.h:174
void delete_all_objects()
Destroy all elements (by calling each element's destructor) stored in the vector, and then release al...
Definition: inplace_vector.h:268
const objtype & back() const
STL std::vector::back interface.
Definition: inplace_vector.h:224
objtype * get_space(size_t index)
Return an existing used slot, or append exactly one slot at end of the last array and return it.
Definition: inplace_vector.h:76
size_t m_obj_count
Definition: inplace_vector.h:63
bool empty() const
STL std::vector::empty interface.
Definition: inplace_vector.h:211
void clear()
STL std::vector::clear interface.
Definition: inplace_vector.h:218
objtype & operator[](size_t i)
STL std::vector::operator[] interface.
Definition: inplace_vector.h:258
Inplace_vector(PSI_memory_key psi_key)
Definition: inplace_vector.h:114
size_t capacity() const
STL std::vector::capacity interface.
Definition: inplace_vector.h:205
~Inplace_vector()
Release memory space and destroy all contained objects.
Definition: inplace_vector.h:123
void append_new_array()
Definition: inplace_vector.h:97
Inplace_vector(const Inplace_vector &)
Inplace_vector & operator=(const Inplace_vector &rhs)
size_t size() const
STL std::vector::size interface.
Definition: inplace_vector.h:198
objtype * push_back(const objtype &obj)
STL std::vector::push_back interface.
Definition: inplace_vector.h:156
bool m_outof_mem
Definition: inplace_vector.h:64
objtype * append_object()
Allocate space for an object, and construct it using its default constructor, and return its address.
Definition: inplace_vector.h:141
objtype * get_object(size_t index)
Get an existing element's pointer, index must be in [0, m_obj_count).
Definition: inplace_vector.h:131
objtype & back()
STL std::vector::back interface.
Definition: inplace_vector.h:234
PSI_memory_key m_psi_key
Definition: inplace_vector.h:62
const char * p
Definition: ctype-mb.cc:1236
#define MY_FAE
Definition: my_sys.h:121
unsigned int PSI_memory_key
Instrumented memory key.
Definition: psi_memory_bits.h:48
#define MYF(v)
Definition: my_inttypes.h:96
void * my_malloc(PSI_memory_key key, size_t size, int flags)
Allocates size bytes of memory.
Definition: my_memory.cc:56
void my_free(void *ptr)
Frees the memory pointed by the ptr.
Definition: my_memory.cc:80
Common header for many mysys elements.
Performance schema instrumentation interface.