#ifndef __CUVEC4I_HPP__
#define __CUVEC4I_HPP__

namespace amscuda
{

    class cuvec4i
    {
        public:
        int x;
        int y;
        int z;
        int w;

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

    };

}; //end namespace amscuda

#endif

