00001
#include "wvmatrix.h"
00002
00003 WvMatrix::WvMatrix(
const int _m,
const int _n,
const int *_data)
00004 : m(_m), n(_n)
00005 {
00006
if (!
m || !
n)
00007 {
00008
data = NULL;
00009
return;
00010 }
00011
00012
data =
new int[
m *
n];
00013
00014
if (_data)
00015 memcpy(
data, _data,
m *
n *
sizeof(
int));
00016
else
00017
for (
int i = 0; i <
m *
n; i++)
00018
data[i] = 0;
00019 }
00020
00021
00022 WvMatrix::~WvMatrix()
00023 {
00024
delete[]
data;
00025 }
00026
00027
00028 WvMatrix::WvMatrix(
const WvMatrix& mx)
00029 : m(mx.m), n(mx.n)
00030 {
00031
data =
new int[
m *
n];
00032 memcpy(
data, mx.
data,
m *
n *
sizeof(
int));
00033 }
00034
00035
00036 WvMatrix& WvMatrix::operator= (
const WvMatrix& mx)
00037 {
00038
delete[]
data;
00039
data =
new int[
m *
n];
00040
00041
m = mx.
m;
00042
n = mx.
n;
00043 memcpy(
data, mx.
data,
m *
n *
sizeof(
int));
00044
00045
return *
this;
00046 }
00047
00048
00049 WvMatrix WvMatrix::operator+ (
const WvMatrix &rhs)
const
00050
{
00051
WvMatrix res(rhs);
00052
00053
if (
m != rhs.
m ||
n != rhs.
n)
00054
return res;
00055
00056
for (
int i = 0; i <
m *
n; i++)
00057 res.
data[i] +=
data[i];
00058
00059
return res;
00060 }
00061
00062
00063 WvMatrix WvMatrix::operator* (
const WvMatrix &rhs)
const
00064
{
00065
WvMatrix res(
m, rhs.
n);
00066
00067
if (
n != rhs.
m)
00068
return res;
00069
00070
int c;
00071
00072
for (
int i = 0; i < res.
m; i++)
00073
for (
int j = 0; j < res.
n; j++)
00074 {
00075 c = 0;
00076
for (
int k = 0; k <
n; k++)
00077 c += (*this)(i, k) * rhs(k, j);
00078 res(i, j) = c;
00079 }
00080
00081
return res;
00082 }
00083
00084
00085 WvString WvMatrix::printable()
00086 {
00087
WvString res(
"{%s",
data[0]);
00088
for (
int i = 1; i <
m *
n; i++)
00089 res.
append(
", %s",
data[i]);
00090
return res;
00091 }