Yurttas/PL/OOL/Cplusplus/F/03/02/02/01/V.cpp

  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}