#ifndef __CUVEC3I_HPP__
#define __CUVEC3I_HPP__

namespace amscuda
{

    class cuvec3i
    {
        public:
        int x;
        int y;
        int z;

        __host__ __device__ cuvec3i(); 
        __host__ __device__ ~cuvec3i(); 
        __host__ __device__ cuvec3i(const int &_x, const int &_y, const int &_z); 
        __host__ __device__ int& operator[](const int &I);
        __host__ __device__ const int& operator[](const int &I) const;
        __host__ __device__ cuvec3i operator+(const cuvec3i& rhs) const;
        __host__ __device__ cuvec3i operator-(const cuvec3i& rhs) const;
        __host__ __device__ cuvec3i operator*(const cuvec3i& rhs) const; 	 //elementwise product
        __host__ __device__ cuvec3i operator/(const cuvec3i& rhs) const; 	 //elementwise division
        __host__ __device__ friend cuvec3i operator*(const cuvec3i& lhs, const int& rhs);
        __host__ __device__ friend cuvec3i operator*(const int& lhs, const cuvec3i& rhs);
        __host__ __device__ friend cuvec3i operator/(const cuvec3i& lhs, const int& rhs);
        __host__ __device__ friend cuvec3i operator/(const int& lhs, const cuvec3i& rhs);
        __host__ __device__ friend cuvec3i operator-(const cuvec3i& other);
        __host__ __device__ cuvec3i& operator+=(const cuvec3i& rhs);
        __host__ __device__ cuvec3i& operator-=(const cuvec3i& rhs);
        __host__ __device__ cuvec3i& operator*=(const int& rhs);
        __host__ __device__ cuvec3i& operator/=(const int& rhs);

    };

}; //end namespace amscuda


#endif

