#include <math.h>
#include <stdio.h>
#include "gpklib/v2.h"
#include "gpklib/assert.h"

void v2constr(v2 *p)
{
 assert(p);
 p->ok = TRUE;
 p->d[0] = p->d[1] = 0.0;
 }

BOOL v2badmat(v2 a)	{return !a.ok;}

double v2max(v2 a)
{
 assert(a.ok);
 return a.d[0]>a.d[1] ? a.d[0] : a.d[1];
}

LOCAL double xx(double a)	{return a*a;}

double v2norm_2(v2 a)
{
 return xx(a.d[0]) + xx(a.d[1]);
}

double v2norm(v2 a)	{return sqrt(v2norm_2(a));}

v2 v2add(v2 a, v2 b)
{
 a.ok = a.ok && b.ok;
 a.d[0] += b.d[0];
 a.d[1] += b.d[1];
 return a;
}

v2 v2sub(v2 a, v2 b)
{
 a.ok = a.ok && b.ok;
 a.d[0] -= b.d[0];
 a.d[1] -= b.d[1];
 return a;
}

v2 v2smult(v2 a, double sb)
{
 a.d[0] *= sb;
 a.d[1] *= sb;
 return a;
}

v2 v2zero()
{
 v2 rv;
 rv.ok = TRUE;
 rv.d[0] = rv.d[1] = 0.0;
 return rv;
}

void v2print(FILE *fp, v2 a)
{
 fprintf(fp, "[ %g %g ]", a.d[0], a.d[1]);
}
