rayzor

view src/stl/vector.h @ 4:18bdbcbaee81

forgot to add stl/vector.h
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 06 Apr 2014 01:12:50 +0300
parents
children 70e332156d02
line source
1 /* vi:set ft=cpp: */
2 #ifndef VECTOR_H_
3 #define VECTOR_H_
5 template <class T>
6 class vector {
7 private:
8 T *data;
9 size_t num_items, max_items;
11 public:
12 vector()
13 {
14 data = 0;
15 num_items = max_items = 0;
16 }
18 vector(const vector &v)
19 {
20 data = 0;
21 num_items = max_items = 0;
22 resize(v.size());
24 for(size_t i=0; i<v.size(); i++) {
25 data[i] = v.data[i];
26 }
27 }
29 vector &operator =(const vector &v)
30 {
31 if(&v != this) {
32 clear();
33 resize(v.size());
35 for(size_t i=0; i<v.size(); i++) {
36 data[i] = v.data[i];
37 }
38 }
39 return *this;
40 }
42 ~vector()
43 {
44 clear();
45 }
47 void clear()
48 {
49 delete [] data;
50 max_items = num_items = 0;
51 }
53 bool empty() const
54 {
55 return num_items == 0;
56 }
58 size_t size() const
59 {
60 return num_items;
61 }
63 void resize(size_t nsz)
64 {
65 if(nsz > 0) {
66 T *newdata = new T[nsz];
67 if(!newdata) return;
69 size_t num = num_items < nsz ? num_items : nsz;
70 for(size_t i=0; i<num; i++) {
71 newdata[i] = data[i];
72 }
74 delete [] data;
75 data = newdata;
76 max_items = nsz;
77 num_items = num;
78 } else {
79 delete [] data;
80 max_items = num_items = 0;
81 }
82 }
84 void push_back(const T &item)
85 {
86 if(num_items >= max_items) {
87 resize(max_items > 0 ? max_items * 2 : 8);
88 }
89 data[num_items++] = item;
90 }
92 T &operator [](int idx)
93 {
94 return data[idx];
95 }
97 const T &operator [](int idx) const
98 {
99 return data[idx];
100 }
101 };
103 #endif // VECTOR_H_