#ifndef __CUVECT3_LEGACY_HPP__
#define __CUVECT3_LEGACY_HPP__

namespace amscuda
{

    //3x3 matrix operations
    //matrix order is assumed to be mat[I,J] = mat[I+3*J]
    
    //transposes a 3x3 (9 element) matrix
    __host__ __device__ void mat3f_transpose(float *mat3inout);

    //copies src to dest
    __host__ __device__ void mat3f_copy(float *mat3f_dest, const float *mat3f_src);

    //returns determinant of 3x3 matrix
    __host__ __device__ float mat3f_det(float *mat3in);

    //inverts a 3x3 (9 element) matrix
    __host__ __device__ void mat3f_inverse(float *mat3inout);

    __host__ __device__ cuvect3f mat3f_mult(float *mat3in, const cuvect3f &cvin);
    __host__ __device__ void mat3f_mult(float *matina, float *matinb, float *matout);

    __host__ __device__ void mat3f_hodgedual(const cuvect3f &vecin, float *matout);
    __host__ __device__ void mat3f_hodgedual(float *matin, cuvect3f &vecout);

    //returns direction cosine rotation matrix from axis and angle
    __host__ __device__ void mat3f_rot_from_axisangle(cuvect3f axis, float angle, float *matout);


};

#endif