/*======================================================================================

	Program:		Range Imaging Toolkit (RITK)
	Module:			ritkCudaImage.h
	Version:		$Revision: 2774 $
	Date:			$Date: 2012-03-13 10:52:35 +0100 (Di, 13 Mrz 2012) $

	Copyright (c) 2010-2011
	Pattern Recognition Lab, 
    University Erlangen-Nuremberg, Germany
    All rights reserved.

	This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
	See RITKCopyright.txt for more information.

	http://www5.informatik.uni-erlangen.de/research/software/ritk

========================================================================================*/

#ifndef CUDAIMAGE_H__
#define CUDAIMAGE_H__

#include <itkImage.h>

namespace ritk
{

/**	@ingroup	Cuda
 *	@class		CudaImage
 *	@author		Jakob Wasza
 *	@brief		Cuda memory storage for itk::Image
 *
 *	@details
 */
template<class TPixel, unsigned int VDimension=2>
class CudaImage : public itk::Image<TPixel,VDimension>
{
public:
	/**	@name	Std typedefs */
	//@{
	typedef CudaImage									Self;
	typedef itk::Image<TPixel,VDimension>				Superclass;
	typedef itk::SmartPointer<Self>						Pointer;
	typedef itk::SmartPointer<const Self>				ConstPointer;
	//@}

	/** @name Dimension macros */
	//@{
	itkStaticConstMacro(Dimension, unsigned int, VDimension);
	//@}

	/// Object creation
	itkNewMacro(Self);

	/// RTTI
	itkTypeMacro(CudaImage, itk::Image);

protected:
	/// Constructor
	CudaImage();
	/// Destructor
	virtual ~CudaImage();

	/// Print
	virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;

private:
	/// purposely not implemented
	CudaImage(const Self&); 
	/// purposely not implemented
	void operator=(const Self&);

};


} // ritk


#endif // CUDAIMAGE_H__