#include "variablearray.h" #include /* for find() */ VariableArray::VariableArray() : arr(/* ARR_STARTING_SIZE */) { } VariableArray::VariableArray(const VariableArray& array) : Collection(array), arr(array.arr) /* ha! */ { } VariableArray& VariableArray::operator=(const Collection& rhs) { this->arr = dynamic_cast(&rhs)->arr; /* use vector's copy ctor */ this->size_ = rhs.get_size(); return *this; } VariableArray::~VariableArray() { } void VariableArray::add(int n) { this->arr.push_back(n); this->size_++; } bool VariableArray::remove(int n) { std::vector::iterator pos = std::find(this->arr.begin(), this->arr.end(), n); if (pos != this->arr.end()) { this->arr.erase(pos); /* kind of slow, since elements will get shifted */ this->size_--; return true; } else return false; } int VariableArray::operator[](const int i) { /* invalid accesses */ if (!this->size_ || i < 0 || i+1 > this->size_) return -1; return this->arr[i]; } VariableArray *VariableArray::copy(void) { VariableArray *ret = new VariableArray(*this); return ret; } void VariableArray::iterate(void (*callback)(int *)) { std::vector::size_type i; for (i = 0; i != this->arr.size(); ++i) callback(&this->arr[i]); } bool VariableArray::contains(int n) const { return (std::find(this->arr.begin(), this->arr.end(), n) != this->arr.end()); } std::string VariableArray::print(void) const { std::stringstream sstm; std::vector::const_iterator iter = this->arr.begin(); while (iter != this->arr.end()) { sstm << *iter << " "; iter++; } return sstm.str(); }