#ifndef __CUVEC2I_HPP__
#define __CUVEC2I_HPP__

namespace amscuda
{

    class cuvec2i
    {
        public:
        int x;
        int y;

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

    };

}; //end namespace amscuda


#endif

