An mbed-friendly version of dynamic arrays Main difference in the code from my original version is the inability to use template files with the mbed compiler.
Diff: darray.cpp
- Revision:
- 0:537664265ba6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/darray.cpp Mon Jan 27 08:20:47 2014 +0000 @@ -0,0 +1,144 @@ +// Author: Chris Yan +// Date: March 9, 2011 +// File: darray.cpp +// Desc: Implementation for the darray class. +///////////////////////////////////////////////////////////////////////// +#ifndef __WHYNOMBEDTEMPLATES +#define __WHYNOMBEDTEMPLATES +#include "darray.h" +#include <cassert> + +template<typename T> +darray<T>::darray() +{ + cap = 0; + length = 0; + arr = 0; +} + +template<typename T> +darray<T>::darray( const darray& d):cap(d.cap),length(d.length),arr(0) +{ + arr = new T[cap]; + for( int i = 0; i < length; ++i) + arr[i] = d.arr[i]; +} + +template<typename T> +darray<T>::~darray() +{ + delete[] this->arr; + cap = length = 0; + arr = 0; +} + +template<typename T> +const T& darray<T>::operator [] (unsigned int idx) const +{ + assert( idx < length ); + return arr[idx]; +} + +template<typename T> +T& darray<T>::operator [] (unsigned int idx) +{ + assert( idx < length ); + return arr[idx]; +} + +template<typename T> +void darray<T>::pop_back() +{ + assert( length > 0 ); + --length; +} + +template<typename T> +void darray<T>::push_back( const T& entry ) +{ + if( length < cap ) + arr[length++] = entry; + else + { + T* temp = new T[length + 5]; + + for( int i = 0; i < length; ++i ) + temp[i] = arr[i]; + + temp[length] = entry; + delete[] arr; + arr = temp; + cap += 5; + ++length; + std::cout << "nAddress of Arr: " << &arr << '\n'; + } +} + +template<typename T> +darray<T>& darray<T>::operator = (const darray &d) +{ + if(this != &d) + { + //delete[] this; + this = d; + } + return *this; +} + + +template<typename T> +void darray<T>::reserve(unsigned newcap) +{ + if(cap >= newcap) + return; + + T* temp = new T[newcap]; + for( int i = 0; i < length; ++i ) + temp[i] = arr[i]; + + delete[] arr; + arr = temp; + cap = newcap; +} + +//operator += () + +/* +darray operator + (const darray& d1, const darray& d2) +{ + darray temp; + temp += d1; + temp += d2; + return temp; +} +*/ + +/* +std::ostream& operator << (std::ostream& out, const darray& d) +{ + out << '('; + int i; + for( i = 0; i < (d.length-1); ++i ) + out << d.arr[i] << ' '; + return out << d.arr[i] << ')'; +} +*/ + +template <typename T> +void darray<T>::sort(darray<T>& elems) +{ + for(int top=elems.size()-1; top>0; --top) + for(int k=0; k<top; ++k) + if(elems[k] > elems[k+1]) + swap(elems[k], elems[k+1]); +} + +template <typename T> +void darray<T>::swap(T& elem1, T& elem2) +{ + T temp = elem1; + elem1 = elem2; + elem2 = temp; +} + +#endif \ No newline at end of file