#include "ca.h"
#include "parse.h"
static void Rowm(NODE, Obj *);
static void Rowch(NODE, Obj *);
static void Rowmadd(NODE, Obj *);
//static void mlowch(NODE, Obj *, Obj *, Obj *);
//static void mlowad(NODE, Obj *, Obj *, Obj *);
struct ftab mat_tab[] = {
{"rowm",Rowm,3},
{"rowch",Rowch,3},
{"rowmadd",Rowmadd,4},
{0,0,0},
};
static void
Rowm(arg, rp)
NODE arg;
Obj *rp;
{
MAT a;
Q s;
int row, size, i;
pointer *k, *t, *ap;
a = (MAT)ARG0(arg);
size = a->col;
s = (Q)ARG1(arg);
row = QTOS(s);
k = (pointer)ARG2(arg);
ap = BDY(a)[row];
for ( i = 0; i < size; i++ ) {
mulr(CO,(Obj)ap[i],(Obj)k,(Obj *)&t);
ap[i]=(Obj)t;
}
*rp = (Obj)a;
}
static void
Rowch(arg, rp)
NODE arg;
Obj *rp;
{
MAT a;
Q sa, sb;
int rowa, rowb, size, i;
pointer *k, *t, *ap, *aq;
a = (MAT)ARG0(arg);
size = a->col;
sa = (Q)ARG1(arg);
rowa = QTOS(sa);
sb = (Q)ARG2(arg);
rowb = QTOS(sb);
ap = BDY(a)[rowa];
aq = BDY(a)[rowb];
for ( i = 0; i < size; i++ ) {
t = ap[i];
ap[i] = aq[i];
aq[i] = t;
}
*rp = (Obj)a;
}
static void
Rowmadd(arg, rp)
NODE arg;
Obj *rp;
{
MAT a;
Q sa, sb;
int rowa, rowb, size, i;
pointer *k, *t, *ap, *aq;
a = (MAT)ARG0(arg);
size = a->col;
sa = (Q)ARG1(arg);
rowa = QTOS(sa);
sb = (Q)ARG2(arg);
rowb = QTOS(sb);
ap = BDY(a)[rowa];
aq = BDY(a)[rowb];
k = (pointer)ARG3(arg);
for ( i = 0; i < size; i++ ) {
mulr( CO, (Obj)ap[i], (Obj)k, (Obj *)&t );
addr( CO, (Obj)aq[i], (Obj)t, (Obj *)&t );
aq[i] = t;
}
*rp = (Obj)a;
}