IDA C++ SDK 9.2
|
Reimplementation of vector class from STL. More...
#include <pro.h>
Public Types | |
typedef T | value_type |
the type of objects contained in this qvector | |
typedef T * | iterator |
typedef const T * | const_iterator |
Public Member Functions | |
qvector (void) | |
Constructor. | |
qvector (const qvector< T > &x) | |
Constructor - creates a new qvector identical to 'x'. | |
qvector (qvector< T > &&x) noexcept | |
Move constructor. | |
~qvector (void) | |
Destructor. | |
DEFINE_MEMORY_ALLOCATION_FUNCS () void push_back(const T &x) | |
Append a new element to the end the qvector. | |
void | push_back (T &&x) |
Append a new element to the end the qvector with a move semantics. | |
template<typename... Args> | |
void | emplace_back (Args &&... args) |
Construct and append a new element to the end the qvector with a forwarding semantics. | |
T & | push_back (void) |
Append a new empty element to the end of the qvector. | |
void | pop_back (void) |
Remove the last element in the qvector. | |
size_t | size (void) const |
Get the number of elements in the qvector. | |
bool | empty (void) const |
Does the qvector have 0 elements? | |
const T & | operator[] (size_t _idx) const |
Allows use of typical c-style array indexing for qvectors. | |
T & | operator[] (size_t _idx) |
Allows use of typical c-style array indexing for qvectors. | |
const T & | at (size_t _idx) const |
Get element at index '_idx'. | |
T & | at (size_t _idx) |
Get element at index '_idx'. | |
const T & | front (void) const |
Get the first element in the qvector. | |
T & | front (void) |
Get the first element in the qvector. | |
const T & | back (void) const |
Get the last element in the qvector. | |
T & | back (void) |
Get the last element in the qvector. | |
void | qclear (void) |
Destroy all elements but do not free memory. | |
void | clear (void) |
Destroy all elements and free memory. | |
qvector< T > & | operator= (const qvector< T > &x) |
Allow assignment of one qvector to another using '='. | |
qvector< T > & | operator= (qvector< T > &&x) noexcept |
Move assignment operator. | |
void | resize (size_t _newsize, const T &x) |
Resize to the given size. | |
void | resize (size_t _newsize) |
Same as resize(size_t, const T &), but extra space is filled with empty elements. | |
void | resize_noinit (size_t _newsize) |
void | grow (const T &x=T()) |
Add an element to the end of the qvector, which will be a new T() if x is not given. | |
size_t | capacity (void) const |
Get the number of elements that this qvector can contain - not the same as the number of elements currently in the qvector (size()) | |
void | reserve (size_t cnt) |
Increase the capacity of the qvector. | |
void | truncate (void) |
Shrink the capacity down to the current number of elements. | |
void | swap (qvector< T > &r) noexcept |
Replace all attributes of this qvector with that of 'r', and vice versa. | |
T * | extract (void) |
Empty the qvector and return a pointer to it's contents. | |
void | inject (T *s, size_t len) |
Populate the qvector with dynamic memory. | |
bool | operator== (const qvector< T > &r) const |
Allow ability to test the equality of two qvectors using '=='. | |
bool | operator!= (const qvector< T > &r) const |
Allow ability to test equality of two qvectors using '!='. | |
iterator | begin (void) |
Get an iterator that points to the first element in the qvector. | |
iterator | end (void) |
Get an iterator that points to the end of the qvector (NOT the last element) | |
const_iterator | begin (void) const |
Get a const iterator that points to the first element in the qvector. | |
const_iterator | end (void) const |
Get a const iterator that points to the end of the qvector (NOT the last element) | |
iterator | insert (iterator it, const T &x) |
Insert an element into the qvector at a specified position. | |
iterator | insert (iterator it, T &&x) |
Insert an element into the qvector with a move semantics. | |
template<class it2> | |
iterator | insert (iterator it, it2 first, it2 last) |
Insert a several elements to the qvector at a specified position. | |
iterator | erase (iterator it) |
Remove an element from the qvector. | |
iterator | erase (iterator first, iterator last) |
Remove a subset of the qvector. | |
iterator | find (const T &x) |
Find an element in the qvector. | |
const_iterator | find (const T &x) const |
Find an element in the qvector. | |
ssize_t | index (const T &x) const |
Find index of the specified value or return -1. | |
void | add (const T &x) |
Add an element to the end of the qvector. | |
void | add (T &&x) |
bool | has (const T &x) const |
Does the qvector contain x? | |
bool | add_unique (const T &x) |
Add an element to the end of the qvector - only if it isn't already present. | |
bool | del (const T &x) |
Find an element and remove it. | |
const char * | dstr (void) const |
Friends | |
void *ida_export | qvector_reserve (void *vec, void *old, size_t cnt, size_t elsize) |
Change capacity of given qvector. |
Reimplementation of vector class from STL.
Only the most essential functions are implemented.
The vector container accepts objects agnostic to their positions in the memory because it will move them arbitrarily (realloc and memmove).
The reason why we have it is because it is not compiler dependent (hopefully) and therefore can be used in IDA API.
typedef T qvector< T >::value_type |
the type of objects contained in this qvector
typedef T* qvector< T >::iterator |
typedef const T* qvector< T >::const_iterator |
Constructor - creates a new qvector identical to 'x'.
|
inline |
Append a new element to the end the qvector.
Append a new element to the end the qvector with a move semantics.
|
inline |
Construct and append a new element to the end the qvector with a forwarding semantics.
Append a new empty element to the end of the qvector.
Remove the last element in the qvector.
This helps to find use-after-frees in empty containers:
Get the number of elements in the qvector.
|
inline |
Allows use of typical c-style array indexing for qvectors.
|
inline |
Allows use of typical c-style array indexing for qvectors.
|
inline |
Get element at index '_idx'.
|
inline |
Get element at index '_idx'.
Get the first element in the qvector.
Get the last element in the qvector.
Destroy all elements but do not free memory.
Allow assignment of one qvector to another using '='.
Move assignment operator.
Resize to the given size.
If the given size (_newsize) is less than the current size (n) of the qvector, then the last n - _newsize elements are simply deleted.
If the given size is greater than the current size, the qvector is grown to _newsize, and the last _newsize - n elements will be filled with copies of 'x'.
If the given size is equal to the current size, this function does nothing.
Same as resize(size_t, const T &), but extra space is filled with empty elements.
Add an element to the end of the qvector, which will be a new T() if x is not given.
Get the number of elements that this qvector can contain - not the same as the number of elements currently in the qvector (size())
Increase the capacity of the qvector.
If cnt is not greater than the current capacity this function does nothing.
Shrink the capacity down to the current number of elements.
Replace all attributes of this qvector with that of 'r', and vice versa.
Effectively sets this = r and r = this without copying/allocating any memory.
Empty the qvector and return a pointer to it's contents.
The caller must free the result of this function
Populate the qvector with dynamic memory.
The qvector must be empty before calling this method!
Allow ability to test the equality of two qvectors using '=='.
Allow ability to test equality of two qvectors using '!='.
Get an iterator that points to the first element in the qvector.
Get an iterator that points to the end of the qvector (NOT the last element)
|
inline |
Get a const iterator that points to the first element in the qvector.
|
inline |
Get a const iterator that points to the end of the qvector (NOT the last element)
Insert an element into the qvector at a specified position.
it | an iterator that points to the desired position of the new element |
x | the element to insert |
Insert an element into the qvector with a move semantics.
|
inline |
Insert a several elements to the qvector at a specified position.
it | position at which new elements will be inserted |
first | pointer to first element to be inserted |
last | pointer to end of elements to be inserted (the element pointed to by 'last' will not be included) |
Remove an element from the qvector.
it | pointer to element to be removed |
Remove a subset of the qvector.
first | pointer to head of subset to be removed |
last | pointer to end of subset to be removed (element pointed to by last will not be removed) |
Find an element in the qvector.
x | element to find |
|
inline |
Find an element in the qvector.
x | element to find |
Find index of the specified value or return -1.
Add an element to the end of the qvector.
Add an element to the end of the qvector - only if it isn't already present.
x | the element to add |
Find an element and remove it.
x | the element to remove |
|
friend |
Change capacity of given qvector.
vec | a pointer to a qvector |
old | a pointer to the qvector's array |
cnt | number of elements to reserve |
elsize | size of each element |