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.

Committer:
Fuzball
Date:
Mon Jan 27 08:20:47 2014 +0000
Revision:
0:537664265ba6
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Fuzball 0:537664265ba6 1 // Author: Chris Yan
Fuzball 0:537664265ba6 2 // Date: March 9, 2011
Fuzball 0:537664265ba6 3 // File: darray.cpp
Fuzball 0:537664265ba6 4 // Desc: Implementation for the darray class.
Fuzball 0:537664265ba6 5 /////////////////////////////////////////////////////////////////////////
Fuzball 0:537664265ba6 6 #ifndef __WHYNOMBEDTEMPLATES
Fuzball 0:537664265ba6 7 #define __WHYNOMBEDTEMPLATES
Fuzball 0:537664265ba6 8 #include "darray.h"
Fuzball 0:537664265ba6 9 #include <cassert>
Fuzball 0:537664265ba6 10
Fuzball 0:537664265ba6 11 template<typename T>
Fuzball 0:537664265ba6 12 darray<T>::darray()
Fuzball 0:537664265ba6 13 {
Fuzball 0:537664265ba6 14 cap = 0;
Fuzball 0:537664265ba6 15 length = 0;
Fuzball 0:537664265ba6 16 arr = 0;
Fuzball 0:537664265ba6 17 }
Fuzball 0:537664265ba6 18
Fuzball 0:537664265ba6 19 template<typename T>
Fuzball 0:537664265ba6 20 darray<T>::darray( const darray& d):cap(d.cap),length(d.length),arr(0)
Fuzball 0:537664265ba6 21 {
Fuzball 0:537664265ba6 22 arr = new T[cap];
Fuzball 0:537664265ba6 23 for( int i = 0; i < length; ++i)
Fuzball 0:537664265ba6 24 arr[i] = d.arr[i];
Fuzball 0:537664265ba6 25 }
Fuzball 0:537664265ba6 26
Fuzball 0:537664265ba6 27 template<typename T>
Fuzball 0:537664265ba6 28 darray<T>::~darray()
Fuzball 0:537664265ba6 29 {
Fuzball 0:537664265ba6 30 delete[] this->arr;
Fuzball 0:537664265ba6 31 cap = length = 0;
Fuzball 0:537664265ba6 32 arr = 0;
Fuzball 0:537664265ba6 33 }
Fuzball 0:537664265ba6 34
Fuzball 0:537664265ba6 35 template<typename T>
Fuzball 0:537664265ba6 36 const T& darray<T>::operator [] (unsigned int idx) const
Fuzball 0:537664265ba6 37 {
Fuzball 0:537664265ba6 38 assert( idx < length );
Fuzball 0:537664265ba6 39 return arr[idx];
Fuzball 0:537664265ba6 40 }
Fuzball 0:537664265ba6 41
Fuzball 0:537664265ba6 42 template<typename T>
Fuzball 0:537664265ba6 43 T& darray<T>::operator [] (unsigned int idx)
Fuzball 0:537664265ba6 44 {
Fuzball 0:537664265ba6 45 assert( idx < length );
Fuzball 0:537664265ba6 46 return arr[idx];
Fuzball 0:537664265ba6 47 }
Fuzball 0:537664265ba6 48
Fuzball 0:537664265ba6 49 template<typename T>
Fuzball 0:537664265ba6 50 void darray<T>::pop_back()
Fuzball 0:537664265ba6 51 {
Fuzball 0:537664265ba6 52 assert( length > 0 );
Fuzball 0:537664265ba6 53 --length;
Fuzball 0:537664265ba6 54 }
Fuzball 0:537664265ba6 55
Fuzball 0:537664265ba6 56 template<typename T>
Fuzball 0:537664265ba6 57 void darray<T>::push_back( const T& entry )
Fuzball 0:537664265ba6 58 {
Fuzball 0:537664265ba6 59 if( length < cap )
Fuzball 0:537664265ba6 60 arr[length++] = entry;
Fuzball 0:537664265ba6 61 else
Fuzball 0:537664265ba6 62 {
Fuzball 0:537664265ba6 63 T* temp = new T[length + 5];
Fuzball 0:537664265ba6 64
Fuzball 0:537664265ba6 65 for( int i = 0; i < length; ++i )
Fuzball 0:537664265ba6 66 temp[i] = arr[i];
Fuzball 0:537664265ba6 67
Fuzball 0:537664265ba6 68 temp[length] = entry;
Fuzball 0:537664265ba6 69 delete[] arr;
Fuzball 0:537664265ba6 70 arr = temp;
Fuzball 0:537664265ba6 71 cap += 5;
Fuzball 0:537664265ba6 72 ++length;
Fuzball 0:537664265ba6 73 std::cout << "nAddress of Arr: " << &arr << '\n';
Fuzball 0:537664265ba6 74 }
Fuzball 0:537664265ba6 75 }
Fuzball 0:537664265ba6 76
Fuzball 0:537664265ba6 77 template<typename T>
Fuzball 0:537664265ba6 78 darray<T>& darray<T>::operator = (const darray &d)
Fuzball 0:537664265ba6 79 {
Fuzball 0:537664265ba6 80 if(this != &d)
Fuzball 0:537664265ba6 81 {
Fuzball 0:537664265ba6 82 //delete[] this;
Fuzball 0:537664265ba6 83 this = d;
Fuzball 0:537664265ba6 84 }
Fuzball 0:537664265ba6 85 return *this;
Fuzball 0:537664265ba6 86 }
Fuzball 0:537664265ba6 87
Fuzball 0:537664265ba6 88
Fuzball 0:537664265ba6 89 template<typename T>
Fuzball 0:537664265ba6 90 void darray<T>::reserve(unsigned newcap)
Fuzball 0:537664265ba6 91 {
Fuzball 0:537664265ba6 92 if(cap >= newcap)
Fuzball 0:537664265ba6 93 return;
Fuzball 0:537664265ba6 94
Fuzball 0:537664265ba6 95 T* temp = new T[newcap];
Fuzball 0:537664265ba6 96 for( int i = 0; i < length; ++i )
Fuzball 0:537664265ba6 97 temp[i] = arr[i];
Fuzball 0:537664265ba6 98
Fuzball 0:537664265ba6 99 delete[] arr;
Fuzball 0:537664265ba6 100 arr = temp;
Fuzball 0:537664265ba6 101 cap = newcap;
Fuzball 0:537664265ba6 102 }
Fuzball 0:537664265ba6 103
Fuzball 0:537664265ba6 104 //operator += ()
Fuzball 0:537664265ba6 105
Fuzball 0:537664265ba6 106 /*
Fuzball 0:537664265ba6 107 darray operator + (const darray& d1, const darray& d2)
Fuzball 0:537664265ba6 108 {
Fuzball 0:537664265ba6 109 darray temp;
Fuzball 0:537664265ba6 110 temp += d1;
Fuzball 0:537664265ba6 111 temp += d2;
Fuzball 0:537664265ba6 112 return temp;
Fuzball 0:537664265ba6 113 }
Fuzball 0:537664265ba6 114 */
Fuzball 0:537664265ba6 115
Fuzball 0:537664265ba6 116 /*
Fuzball 0:537664265ba6 117 std::ostream& operator << (std::ostream& out, const darray& d)
Fuzball 0:537664265ba6 118 {
Fuzball 0:537664265ba6 119 out << '(';
Fuzball 0:537664265ba6 120 int i;
Fuzball 0:537664265ba6 121 for( i = 0; i < (d.length-1); ++i )
Fuzball 0:537664265ba6 122 out << d.arr[i] << ' ';
Fuzball 0:537664265ba6 123 return out << d.arr[i] << ')';
Fuzball 0:537664265ba6 124 }
Fuzball 0:537664265ba6 125 */
Fuzball 0:537664265ba6 126
Fuzball 0:537664265ba6 127 template <typename T>
Fuzball 0:537664265ba6 128 void darray<T>::sort(darray<T>& elems)
Fuzball 0:537664265ba6 129 {
Fuzball 0:537664265ba6 130 for(int top=elems.size()-1; top>0; --top)
Fuzball 0:537664265ba6 131 for(int k=0; k<top; ++k)
Fuzball 0:537664265ba6 132 if(elems[k] > elems[k+1])
Fuzball 0:537664265ba6 133 swap(elems[k], elems[k+1]);
Fuzball 0:537664265ba6 134 }
Fuzball 0:537664265ba6 135
Fuzball 0:537664265ba6 136 template <typename T>
Fuzball 0:537664265ba6 137 void darray<T>::swap(T& elem1, T& elem2)
Fuzball 0:537664265ba6 138 {
Fuzball 0:537664265ba6 139 T temp = elem1;
Fuzball 0:537664265ba6 140 elem1 = elem2;
Fuzball 0:537664265ba6 141 elem2 = temp;
Fuzball 0:537664265ba6 142 }
Fuzball 0:537664265ba6 143
Fuzball 0:537664265ba6 144 #endif