#ifndef __PLUGIN_NAME__SOURCEPLUGINSOURCE_H__
#define __PLUGIN_NAME__SOURCEPLUGINSOURCE_H__

#include "ritkRImageSource.h"

template<class TRImage>
class __PLUGIN_NAME__SourcePluginSource : public ritk::RImageSource<TRImage>
{
public:
	/** @name Typedefs */
	//@{

	/** @name Standard typedefs */
	//@{
	typedef __PLUGIN_NAME__SourcePluginSource	Self;
	typedef RImageSource<TRImage>				Superclass;
	typedef itk::SmartPointer<Self>				Pointer;
	typedef itk::SmartPointer<const Self>		ConstPointer;
	//@}

	/**	@name The RImage types */
	//@{
	typedef typename Superclass::RImageType	RImageType;
	typedef typename RImageType::Pointer		RImagePointer;
	//@}

	//@}

	/// Object creation
	itkNewMacro(Self);

	/// RTTI
	itkTypeMacro(Self, Superclass);

	/** @brief	Generate the output information
	 *
	 *	@details
	 *	Prepare the allocation of the output image during the first back propagation of the pipeline.
	 *	In particular, the regions of the output image and the camera parameters are set.
	 */
	void GenerateOutputInformation();


protected:
	/// Constructor
	__PLUGIN_NAME__SourcePluginSource();
	/// Destructorthe
	virtual ~__PLUGIN_NAME__SourcePluginSource();

	/// Generate the TOF image here
	virtual void GenerateRImage();


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

/// Explicit template instantiation (default)
typedef class __declspec(dllexport) __PLUGIN_NAME__SourcePluginSource<ritk::RImageF2> __PLUGIN_NAME__SourcePluginSourceF2;

// Implicit template instantiation
//#include "RangeSimulatorSource.txx"



#endif // __PLUGIN_NAME__SOURCEPLUGINSOURCE_H__