1/*
2 Copyright(C) 1998
3 All Rights Reserved. Salih Yurttas, ZCubes, BitsOfCode Software Systems, Inc..
4
5 Permission to use, copy, modify, and distribute this
6 software and its documentation for EDUCATIONAL purposes
7 and without fee is hereby granted provided that this
8 copyright notice appears in all copies.
9
10 date : January 1, 1998.
11 author : Salih Yurttas.
12
13 V.cpp
14*/
15
16
17#include "V.h"
18
19V::
20V(const int n,
21 const int v) : size(n),
22 data(new int[n]) {
23 for(int i=0; i<size; ++i)
24 data[i] = v;
25}
26
27V::
28V(const V& a) : size(a.size),
29 data(new int[size]) {
30 for(int i=0; i<size; ++i)
31 data[i] = a.data[i];
32}
33
34V::
35~V() {
36 delete [] data;
37
38 data = NULL;
39 size = 0;
40}
41
42V&
43V::
44operator=(const V& a) {
45 if(this==&a) return *this;
46
47 delete [] data;
48
49 size = a.size;
50 data = new int[size];
51
52 for(int i=0; i<size; ++i)
53 data[i] = a.data[i];
54
55 return *this;
56}
57
58int
59V::
60get_size() const {
61 return size;
62}
63
64int
65V::
66get_data(const int i) const {
67 return data[i]; // assume i is within range
68}
69
70void
71V::
72set_data(const int* a) {
73 for(int i=0; i<size; ++i) // assume has size matching size of data
74 data[i] = a[i];
75}
76
77void
78V::
79set_data(const int a,
80 const int i) {
81 data[i] = a; // assume i is within range
82}
83
84void
85V::
86set_data(const int* a,
87 const int l) {
88 delete [] data;
89
90 size = l;
91 data = new int[size];
92
93 for(int i=0; i<size; ++i)
94 data[i] = a[i];
95}
96
97int&
98V::
99operator[](const int i) {
100 return data[i]; // assume i is within range
101}
102
103V&
104V::
105operator+=(const V& a) {
106 if(size!=a.size) {
107 cerr << "not valid!" << endl;
108 exit(1);
109 }
110
111 for(int i=0; i<a.size; ++i)
112 data[i] += a.data[i];
113
114 return *this;
115}
116
117V&
118V::
119operator-=(const V& a) {
120 if(size!=a.size) {
121 cerr << "not valid!" << endl;
122 exit(1);
123 }
124
125 for(int i=0; i<a.size; ++i)
126 data[i] -= a.data[i];
127
128 return *this;
129}
130
131V&
132V::
133operator*=(const V& a) {
134 if(size!=a.size) {
135 cerr << "not valid!" << endl;
136 exit(1);
137 }
138
139 for(int i=0; i<a.size; ++i)
140 data[i] *= a.data[i];
141
142 return *this;
143}
144
145V
146operator+(const V& a,
147 const V& b) {
148 if(a.size!=b.size) {
149 cerr << "not valid!" << endl;
150 exit(1);
151 }
152
153 V c(a);
154
155 for(int i=0; i<a.size; ++i)
156 c.data[i] = a.data[i] + b.data[i];
157
158 return c;
159}
160
161V
162operator-(const V& a,
163 const V& b) {
164 if(a.size!=b.size) {
165 cerr << "not valid!" << endl;
166 exit(1);
167 }
168
169 V c(a);
170
171 for(int i=0; i<a.size; ++i)
172 c.data[i] = a.data[i] - b.data[i];
173
174 return c;
175}
176
177V
178operator*(const V& a,
179 const V& b) {
180 if(a.size!=b.size) {
181 cerr << "not valid!" << endl;
182 exit(1);
183 }
184
185 V c(a);
186
187 for(int i=0; i<a.size; ++i)
188 c.data[i] = a.data[i] * b.data[i];
189
190 return c;
191}
192
193bool
194operator==(const V& a,
195 const V& b) {
196 if(a.size!=b.size)
197 return false;
198
199 for(int i=0; i<a.size; ++i)
200 if(a.data[i]!=b.data[i]) return false;
201
202 return true;
203}
204
205bool
206operator!=(const V& a,
207 const V& b) {
208 if(a.size!=b.size)
209 return true;
210
211 for(int i=0; i<a.size; ++i)
212 if(a.data[i]!=b.data[i]) return true;
213
214 return false;
215}
216
217ostream&
218operator<<(ostream& os,
219 const V& a) {
220 int n = a.size;
221 for(int i=0; i<n; ++i)
222 os << a.data[i] << endl;
223 os << endl;
224
225 return os;
226}