libStatGen Software
1
|
Create a vector of DATA_TYPE that reuses created objects to save on memory reallocations. More...
#include <ReusableVector.h>
Public Member Functions | |
void | reset () |
Clear the vector contents. | |
void | clear () |
Clear the vector contents. | |
DATA_TYPE & | getNextEmpty () |
Get a reference to a new entry to be populated so the user can directly populate it rather than having to copy into it. | |
DATA_TYPE & | get (unsigned int index) const |
Get a reference to the data at the specified index. | |
int | size () const |
Return the number of populated entries in the vector. | |
void | rmLast () |
Protected Attributes | |
std::vector< DATA_TYPE * > | myCont |
unsigned int | myNextEmpty |
Create a vector of DATA_TYPE that reuses created objects to save on memory reallocations.
DATA_TYPE must have a function called clear() that is used to reset it for reuse.
Definition at line 30 of file ReusableVector.h.
DATA_TYPE & ReusableVector< DATA_TYPE >::get | ( | unsigned int | index | ) | const |
Get a reference to the data at the specified index.
Throws an exception if the index is out of range.
Definition at line 117 of file ReusableVector.h.
{ if((index < myNextEmpty) && (index >= 0)) { // index is a valid position, so return that data. if(myCont[index] == NULL) { throw(std::runtime_error("ReusableVector::get BUG, found a null pointer.")); } return(*myCont[index]); } // Not set in the vector, so throw an exception. throw(std::runtime_error("ReusableVector::get called with out of range index.")); // return(myCont[0]); }
DATA_TYPE & ReusableVector< DATA_TYPE >::getNextEmpty | ( | ) |
Get a reference to a new entry to be populated so the user can directly populate it rather than having to copy into it.
Definition at line 90 of file ReusableVector.h.
{ if(myNextEmpty == myCont.size()) { // We are at the end of the available entries, so add a new one. myCont.resize(myCont.size() + 1); // Create a new entry. myCont[myNextEmpty] = new DATA_TYPE; } else { // myNextEmpty is an element, and not the end. // So, clear out the data. myCont[myNextEmpty]->clear(); } DATA_TYPE* returnVal = myCont[myNextEmpty]; // Increment next empty to the next element. ++myNextEmpty; // return the element to be used. return(*returnVal); }