| IDA SDK

Public Member Functions | Public Types | Friends | List of all members
qvector< T > Class Template Reference

## Detailed Description

template<class T>
class qvector< T >

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.

Inherited by dirtree_selection_t, enum_type_data_t, func_type_data_t, plugin_options_t, pointseq_t, qstack< T >, rangevec_t, reg_accesses_t, regobjs_t, scattered_aloc_t, screen_graph_selection_t, synced_group_t, tagged_line_sections_t, and valstrs_t.

## 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.
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.
T & | push_back (void)
| Append a new empty element to the end of the qvector. More...
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. More...
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. More...
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. More...
T * | extract (void)
| Empty the qvector and return a pointer to it's contents. More...
void | inject (T *s, size_t len)
| Populate the qvector with dynamic memory. More...
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. More...
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. More...
iterator | erase (iterator it)
| Remove an element from the qvector. More...
iterator | erase (iterator first, iterator last)
| Remove a subset of the qvector. More...
iterator | find (const T &x)
| Find an element in the qvector. More...
const_iterator | find (const T &x) const
| Find an element in the qvector. More...
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. More...
bool | del (const T &x)
| Find an element and remove it. More...
const char * | dstr (void) const

## Public Types
typedef T | value_type
| the type of objects contained in this qvector
typedef T * | iterator
typedef const T * | const_iterator

## Friends
void *ida_export | qvector_reserve (void *vec, void *old, size_t cnt, size_t elsize)
| Change capacity of given qvector. More...

## Member Function Documentation

## ◆ push_back()

template<class T >

T & qvector< T >::push_back | ( | void |  | ) |
| inline

Append a new empty element to the end of the qvector.

Returns
  a reference to this new element

## ◆ resize()

template<class T >

void qvector< T >::resize | ( | size_t | _newsize,
|  | const T & | x
| ) |  |
| inline

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.

## ◆ reserve()

template<class T >

void qvector< T >::reserve | ( | size_t | cnt | ) |
| inline

Increase the capacity of the qvector.

If cnt is not greater than the current capacity this function does nothing.

## ◆ swap()

template<class T >

void qvector< T >::swap | ( | qvector< T > & | r | ) |
| inline noexcept

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.

## ◆ extract()

template<class T >

T * qvector< T >::extract | ( | void |  | ) |
| inline

Empty the qvector and return a pointer to it's contents.

The caller must free the result of this function

## ◆ inject()

template<class T >

void qvector< T >::inject | ( | T * | s,
|  | size_t | len
| ) |  |
| inline

Populate the qvector with dynamic memory.

The qvector must be empty before calling this method!

## ◆ insert() [1/2]

template<class T >

iterator qvector< T >::insert | ( | iterator | it,
|  | const T & | x
| ) |  |
| inline

Insert an element into the qvector at a specified position.

Parameters

  it | an iterator that points to the desired position of the new element
  x | the element to insert

Returns
  an iterator that points to the newly inserted element

## ◆ insert() [2/2]

template<class T >
template<class it2 >

iterator qvector< T >::insert | ( | iterator | it,
|  | it2 | first,
|  | it2 | last
| ) |  |
| inline

Insert a several elements to the qvector at a specified position.

Parameters

  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)

Returns
  an iterator that points to the first newly inserted element.

## ◆ erase() [1/2]

template<class T >

iterator qvector< T >::erase | ( | iterator | it | ) |
| inline

Remove an element from the qvector.

Parameters

  it | pointer to element to be removed

Returns
  pointer to the element that took its place

## ◆ erase() [2/2]

template<class T >

iterator qvector< T >::erase | ( | iterator | first,
|  | iterator | last
| ) |  |
| inline

Remove a subset of the qvector.

Parameters

  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)

Returns
  a pointer to the element that took the place of 'first'

## ◆ find() [1/2]

template<class T >

iterator qvector< T >::find | ( | const T & | x | ) |
| inline

Find an element in the qvector.

Parameters

  x | element to find

Returns
  an iterator that points to the first occurrence of 'x'

## ◆ find() [2/2]

template<class T >

const_iterator qvector< T >::find | ( | const T & | x | ) | const
| inline

Find an element in the qvector.

Parameters

  x | element to find

Returns
  an iterator that points to the first occurrence of 'x'

## ◆ add_unique()

template<class T >

bool qvector< T >::add_unique | ( | const T & | x | ) |
| inline

Add an element to the end of the qvector - only if it isn't already present.

Parameters

  x | the element to add

Returns
  false if 'x' is already in the qvector, true otherwise

## ◆ del()

template<class T >

bool qvector< T >::del | ( | const T & | x | ) |
| inline

Find an element and remove it.

Parameters

  x | the element to remove

Returns
  false if 'x' was not found, true otherwise

## Friends And Related Function Documentation

## ◆ qvector_reserve

template<class T >

void *ida_export qvector_reserve | ( | void * | vec,
|  | void * | old,
|  | size_t | cnt,
|  | size_t | elsize
| ) |  |
| friend

Change capacity of given qvector.

Parameters

  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

Returns
  a pointer to the newly allocated array

The documentation for this class was generated from the following file:

- pro.h