/* * Tape.h * * Created on: 15 Apr 2013 * Author: s0965328 */ #ifndef TAPE_H_ #define TAPE_H_ #include #include #include #include #include namespace AutoDiff { using namespace std; #define TT (Tape::valueTape) #define II (Tape::indexTape) template class Tape { public: Tape () : index(0){}; T& at(const unsigned int index); const T& get(const unsigned int index); void set(T& v); unsigned int size(); void clear(); bool empty(); string toString(); virtual ~Tape(); vector vals; unsigned int index; static Tape* valueTape; static Tape* indexTape; }; template Tape::~Tape() { index = 0; vals.clear(); } template T& Tape::at(const unsigned int i) { assert(this->vals.size()>i); return vals[i]; } template const T& Tape::get(const unsigned int i) { assert(this->vals.size()>i); return vals[i]; } template void Tape::set(T& v) { vals.push_back(v); index++; } template unsigned int Tape::size() { return this->vals.size(); } template bool Tape::empty() { return vals.empty(); } template void Tape::clear() { this->vals.clear(); this->index = 0; assert(this->vals.size()==0); assert(this->vals.empty()); } template string Tape::toString() { assert(vals.size()>=index); ostringstream oss; oss<<"Tape size["<