WvStreams
wvmatrix.cc
1 #include "wvmatrix.h"
2 
3 WvMatrix::WvMatrix(const int _m, const int _n, const int *_data)
4  : m(_m), n(_n)
5 {
6  if (!m || !n)
7  {
8  data = NULL;
9  return;
10  }
11 
12  data = new int[m * n];
13 
14  if (_data)
15  memcpy(data, _data, m * n * sizeof(int));
16  else
17  for (int i = 0; i < m * n; i++)
18  data[i] = 0;
19 }
20 
21 
22 WvMatrix::~WvMatrix()
23 {
24  delete[] data;
25 }
26 
27 
28 WvMatrix::WvMatrix(const WvMatrix& mx)
29  : m(mx.m), n(mx.n)
30 {
31  data = new int[m * n];
32  memcpy(data, mx.data, m * n * sizeof(int));
33 }
34 
35 
36 WvMatrix& WvMatrix::operator= (const WvMatrix& mx)
37 {
38  delete[] data;
39  data = new int[m * n];
40 
41  m = mx.m;
42  n = mx.n;
43  memcpy(data, mx.data, m * n * sizeof(int));
44 
45  return *this;
46 }
47 
48 
49 WvMatrix WvMatrix::operator+ (const WvMatrix &rhs) const
50 {
51  WvMatrix res(rhs);
52 
53  if (m != rhs.m || n != rhs.n)
54  return res;
55 
56  for (int i = 0; i < m * n; i++)
57  res.data[i] += data[i];
58 
59  return res;
60 }
61 
62 
63 WvMatrix WvMatrix::operator* (const WvMatrix &rhs) const
64 {
65  WvMatrix res(m, rhs.n);
66 
67  if (n != rhs.m)
68  return res;
69 
70  int c;
71 
72  for (int i = 0; i < res.m; i++)
73  for (int j = 0; j < res.n; j++)
74  {
75  c = 0;
76  for (int k = 0; k < n; k++)
77  c += (*this)(i, k) * rhs(k, j);
78  res(i, j) = c;
79  }
80 
81  return res;
82 }
83 
84 
85 WvString WvMatrix::printable()
86 {
87  WvString res("{%s", data[0]);
88  for (int i = 1; i < m * n; i++)
89  res.append(", %s", data[i]);
90  return res;
91 }
WvString
WvString is an implementation of a simple and efficient printable-string class.
Definition: wvstring.h:329
WvMatrix
Definition: wvmatrix.h:7