Make WvStreams compile with gcc 4.4.
[wvstreams.git] / utils / wvmatrix.cc
blobf55f660f03bc68d95fc56602eae05ad4c0111c16
1 #include "wvmatrix.h"
3 WvMatrix::WvMatrix(const int _m, const int _n, const int *_data)
4 : m(_m), n(_n)
6 if (!m || !n)
8 data = NULL;
9 return;
12 data = new int[m * n];
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;
22 WvMatrix::~WvMatrix()
24 delete[] data;
28 WvMatrix::WvMatrix(const WvMatrix& mx)
29 : m(mx.m), n(mx.n)
31 data = new int[m * n];
32 memcpy(data, mx.data, m * n * sizeof(int));
36 WvMatrix& WvMatrix::operator= (const WvMatrix& mx)
38 delete[] data;
39 data = new int[m * n];
41 m = mx.m;
42 n = mx.n;
43 memcpy(data, mx.data, m * n * sizeof(int));
45 return *this;
49 WvMatrix WvMatrix::operator+ (const WvMatrix &rhs) const
51 WvMatrix res(rhs);
53 if (m != rhs.m || n != rhs.n)
54 return res;
56 for (int i = 0; i < m * n; i++)
57 res.data[i] += data[i];
59 return res;
63 WvMatrix WvMatrix::operator* (const WvMatrix &rhs) const
65 WvMatrix res(m, rhs.n);
67 if (n != rhs.m)
68 return res;
70 int c;
72 for (int i = 0; i < res.m; i++)
73 for (int j = 0; j < res.n; j++)
75 c = 0;
76 for (int k = 0; k < n; k++)
77 c += (*this)(i, k) * rhs(k, j);
78 res(i, j) = c;
81 return res;
85 WvString WvMatrix::printable()
87 WvString res("{%s", data[0]);
88 for (int i = 1; i < m * n; i++)
89 res.append(", %s", data[i]);
90 return res;