WvStreams
wvmatrix.cc
1#include "wvmatrix.h"
2
3WvMatrix::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
22WvMatrix::~WvMatrix()
23{
24 delete[] data;
25}
26
27
28WvMatrix::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
36WvMatrix& 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
49WvMatrix 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
63WvMatrix 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
85WvString 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 is an implementation of a simple and efficient printable-string class.
Definition wvstring.h:330