#ifndef _VECTOR_H_
#define _VECTOR_H_

#include "brender/br_types.h"

void BrVector2Copy(br_vector2* v1, br_vector2* v2);

void BrVector2Set(br_vector2* v1, br_scalar s1, br_scalar s2);

void BrVector2SetInt(br_vector2* v1, int i1, int i2);

void BrVector2SetFloat(br_vector2* v1, float f1, float f2);

void BrVector2Negate(br_vector2* v1, br_vector2* v2);

void BrVector2Add(br_vector2* v1, br_vector2* v2, br_vector2* v3);

void BrVector2Accumulate(br_vector2* v1, br_vector2* v2);

void BrVector2Sub(br_vector2* v1, br_vector2* v2, br_vector2* v3);

void BrVector2Scale(br_vector2* v1, br_vector2* v2, br_scalar s);

void BrVector2InvScale(br_vector2* v1, br_vector2* v2, br_scalar s);

br_scalar BrVector2Dot(br_vector2* v1, br_vector2* v2);

br_scalar BrVector2Length(br_vector2* v1);

br_scalar BrVector2LengthSquared(br_vector2* v1);

void BrVector3Copy(br_vector3* v1, br_vector3* v2);

void BrVector3Set(br_vector3* v1, br_scalar s1, br_scalar s2, br_scalar s3);

void BrVector3SetInt(br_vector3* v1, int i1, int i2, int i3);

void BrVector3SetFloat(br_vector3* v1, float f1, float f2, float f3);

void BrVector3Negate(br_vector3* v1, br_vector3* v2);

void BrVector3Add(br_vector3* v1, br_vector3* v2, br_vector3* v3);

void BrVector3Accumulate(br_vector3* v1, br_vector3* v2);

void BrVector3Sub(br_vector3* v1, br_vector3* v2, br_vector3* v3);

void BrVector3Scale(br_vector3* v1, br_vector3* v2, br_scalar s);

void BrVector3InvScale(br_vector3* v1, br_vector3* v2, br_scalar s);

br_scalar BrVector3Dot(br_vector3* v1, br_vector3* v2);

void BrVector3Cross(br_vector3* v1, br_vector3* v2, br_vector3* v3);

br_scalar BrVector3Length(br_vector3* v1);

br_scalar BrVector3LengthSquared(br_vector3* v1);

void BrVector3Normalise(br_vector3* v1, br_vector3* v2);

void BrVector3NormaliseLP(br_vector3* v1, br_vector3* v2);

br_scalar BrVector4Dot(br_vector4* v1, br_vector4* v2);

void BrVector4Copy(br_vector4* v1, br_vector4* v2);

br_scalar BrFVector2Dot(br_fvector2* v1, br_vector2* v2);

void BrFVector3Copy(br_fvector3* v1, br_vector3* v2);

void BrVector3ScaleF(br_vector3* v1, br_fvector3* v2, br_scalar s);

br_scalar BrFVector3Dot(br_fvector3* v1, br_vector3* v2);

void BrFVector3Normalise(br_fvector3* v1, br_vector3* v2);

void BrFVector3NormaliseLP(br_fvector3* v1, br_vector3* v2);

void BrVector2Normalise(br_vector2* v1, br_vector2* v2);

#endif
