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.
darray.cpp
- Committer:
- Fuzball
- Date:
- 2014-01-27
- Revision:
- 0:537664265ba6
File content as of revision 0:537664265ba6:
// 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