rayzor

annotate src/stl/vector.h @ 22:5380ff64e83f

minor changes from dos, and line endings cleanup
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 02 May 2014 14:32:58 +0300
parents d94a69933a71
children
rev   line source
nuclear@22 1 /* vi:set ft=cpp: */
nuclear@22 2 #ifndef VECTOR_H_
nuclear@22 3 #define VECTOR_H_
nuclear@22 4
nuclear@22 5 #include <stdlib.h>
nuclear@22 6
nuclear@22 7 template <class T>
nuclear@22 8 class vector {
nuclear@22 9 private:
nuclear@22 10 T *data;
nuclear@22 11 size_t num_items, max_items;
nuclear@22 12
nuclear@22 13 public:
nuclear@22 14 vector()
nuclear@22 15 {
nuclear@22 16 data = 0;
nuclear@22 17 num_items = max_items = 0;
nuclear@22 18 }
nuclear@22 19
nuclear@22 20 vector(const vector &v)
nuclear@22 21 {
nuclear@22 22 data = 0;
nuclear@22 23 num_items = max_items = 0;
nuclear@22 24 resize(v.size());
nuclear@22 25
nuclear@22 26 for(size_t i=0; i<v.size(); i++) {
nuclear@22 27 data[i] = v.data[i];
nuclear@22 28 }
nuclear@22 29 }
nuclear@22 30
nuclear@22 31 vector &operator =(const vector &v)
nuclear@22 32 {
nuclear@22 33 if(&v != this) {
nuclear@22 34 clear();
nuclear@22 35 resize(v.size());
nuclear@22 36
nuclear@22 37 for(size_t i=0; i<v.size(); i++) {
nuclear@22 38 data[i] = v.data[i];
nuclear@22 39 }
nuclear@22 40 }
nuclear@22 41 return *this;
nuclear@22 42 }
nuclear@22 43
nuclear@22 44 ~vector()
nuclear@22 45 {
nuclear@22 46 clear();
nuclear@22 47 }
nuclear@22 48
nuclear@22 49 void clear()
nuclear@22 50 {
nuclear@22 51 delete [] data;
nuclear@22 52 data = 0;
nuclear@22 53 max_items = num_items = 0;
nuclear@22 54 }
nuclear@22 55
nuclear@22 56 bool empty() const
nuclear@22 57 {
nuclear@22 58 return num_items == 0;
nuclear@22 59 }
nuclear@22 60
nuclear@22 61 size_t size() const
nuclear@22 62 {
nuclear@22 63 return num_items;
nuclear@22 64 }
nuclear@22 65
nuclear@22 66 void resize(size_t nsz)
nuclear@22 67 {
nuclear@22 68 if(nsz > 0) {
nuclear@22 69 T *newdata = new T[nsz];
nuclear@22 70 if(!newdata) return;
nuclear@22 71
nuclear@22 72 size_t num = num_items < nsz ? num_items : nsz;
nuclear@22 73 for(size_t i=0; i<num; i++) {
nuclear@22 74 newdata[i] = data[i];
nuclear@22 75 }
nuclear@22 76
nuclear@22 77 delete [] data;
nuclear@22 78 data = newdata;
nuclear@22 79 max_items = nsz;
nuclear@22 80 num_items = num;
nuclear@22 81 } else {
nuclear@22 82 delete [] data;
nuclear@22 83 max_items = num_items = 0;
nuclear@22 84 }
nuclear@22 85 }
nuclear@22 86
nuclear@22 87 void push_back(const T &item)
nuclear@22 88 {
nuclear@22 89 if(num_items >= max_items) {
nuclear@22 90 resize(max_items > 0 ? max_items * 2 : 8);
nuclear@22 91 }
nuclear@22 92 data[num_items++] = item;
nuclear@22 93 }
nuclear@22 94
nuclear@22 95 void pop_back()
nuclear@22 96 {
nuclear@22 97 if(--num_items <= 0) {
nuclear@22 98 num_items = 0;
nuclear@22 99 }
nuclear@22 100
nuclear@22 101 if(num_items < max_items / 3) {
nuclear@22 102 resize(max_items / 2);
nuclear@22 103 }
nuclear@22 104 }
nuclear@22 105
nuclear@22 106 T &back()
nuclear@22 107 {
nuclear@22 108 return data[num_items - 1];
nuclear@22 109 }
nuclear@22 110
nuclear@22 111 const T &back() const
nuclear@22 112 {
nuclear@22 113 return data[num_items - 1];
nuclear@22 114 }
nuclear@22 115
nuclear@22 116 T &operator [](int idx)
nuclear@22 117 {
nuclear@22 118 return data[idx];
nuclear@22 119 }
nuclear@22 120
nuclear@22 121 const T &operator [](int idx) const
nuclear@22 122 {
nuclear@22 123 return data[idx];
nuclear@22 124 }
nuclear@22 125 };
nuclear@22 126
nuclear@22 127 #endif // VECTOR_H_