#ifndef _SHAREDMEM_H_
#define _SHAREDMEM_H_
template <typename T>
struct SharedMemory
{
__device__ T* getPointer()
{
extern __device__ void Error_UnsupportedType(); Error_UnsupportedType();
return (T*)0;
}
};
template <>
struct SharedMemory <int>
{
__device__ int* getPointer() { extern __shared__ int s_int[]; return s_int; }
};
template <>
struct SharedMemory <unsigned int>
{
__device__ unsigned int* getPointer() { extern __shared__ unsigned int s_uint[]; return s_uint; }
};
template <>
struct SharedMemory <char>
{
__device__ char* getPointer() { extern __shared__ char s_char[]; return s_char; }
};
template <>
struct SharedMemory <unsigned char>
{
__device__ unsigned char* getPointer() { extern __shared__ unsigned char s_uchar[]; return s_uchar; }
};
template <>
struct SharedMemory <short>
{
__device__ short* getPointer() { extern __shared__ short s_short[]; return s_short; }
};
template <>
struct SharedMemory <unsigned short>
{
__device__ unsigned short* getPointer() { extern __shared__ unsigned short s_ushort[]; return s_ushort; }
};
template <>
struct SharedMemory <long>
{
__device__ long* getPointer() { extern __shared__ long s_long[]; return s_long; }
};
template <>
struct SharedMemory <unsigned long>
{
__device__ unsigned long* getPointer() { extern __shared__ unsigned long s_ulong[]; return s_ulong; }
};
template <>
struct SharedMemory <bool>
{
__device__ bool* getPointer() { extern __shared__ bool s_bool[]; return s_bool; }
};
template <>
struct SharedMemory <float>
{
__device__ float* getPointer() { extern __shared__ float s_float[]; return s_float; }
};
template <>
struct SharedMemory <double>
{
__device__ double* getPointer() { extern __shared__ double s_double[]; return s_double; }
};
template <>
struct SharedMemory <uchar4>
{
__device__ uchar4* getPointer() { extern __shared__ uchar4 s_uchar4[]; return s_uchar4; }
};
#endif