#ifndef __PLUGIN_NAME__RIMAGEFILTER_H__
#define __PLUGIN_NAME__RIMAGEFILTER_H__

#include "ritkRImageFilterWrapper.h"
#include "__PLUGIN_NAME__ImageFilter.h"

/**	@class	__PLUGIN_NAME__RImageFilter
 *	@author	RITKPluginCreator
 *	@brief	wrapper class for the __PLUGIN_NAME__ImageFilter
 *	
 *	@details
 *	This is a range filter wrapper class for the __PLUGIN_NAME__ImageFilter
 *	\sa __PLUGIN_NAME__ImageFilter and was generated automatically by
 *	the plugin creator. Provide a detailed description of the filter here.
 *	Comment on the workflow and try to provide use cases whenever it is possible.
 */
template <class TRImage>
class __PLUGIN_NAME__RImageFilter : public ritk::RImageFilterWrapper<TRImage>
{
public:
	/** @name	Typedefs */
	//@{

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

	/**	@name	Input and output typedefs */
	//@{
	typedef typename Superclass::InputImageType		InputImageType;
	typedef typename InputImageType::Pointer		InputImagePointer;
	typedef typename InputImageType::ConstPointer	InputImageConstPointer;
	typedef typename Superclass::OutputImageType	OutputImageType;
	typedef typename OutputImageType::Pointer		OutputImagePointer;
	//@}

	//@}

	/// Object creation
	itkNewMacro(Self);

	/// RTTI
	itkTypeMacro(Self, Superclass);

protected:
	/// Constructor
	__PLUGIN_NAME__RImageFilter();
	/// Destructor
	~__PLUGIN_NAME__RImageFilter();

	/// The actual filtering. @sa RImageFilterWrapper::DoFiltering()
	void DoFiltering();

protected:
	/**	@name Typedefs for the filters */
	//@{
	typedef __PLUGIN_NAME__ImageFilter<typename InputImageType::RangeImageType,typename OutputImageType::RangeImageType>  RangeFilterType;
	typedef typename RangeFilterType::Pointer RangeFilterPointer;
	RangeFilterPointer m_RangeFilter;
	//@}

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

//#include "__PLUGIN_NAME__RImageFilter.txx"
typedef class __declspec(dllexport) __PLUGIN_NAME__RImageFilter<ritk::RImageF2> __PLUGIN_NAME__RImageFilterF2;


#endif // __PLUGIN_NAME__RIMAGEFILTER_H__