#include <string>
#include <Pluma/Pluma.hpp>
+#include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
+
+#include <itkObject.h>
+#include <itkObjectFactory.h>
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_HEADER_BEGIN( TYPE ) \
+ class cpPlugins_Interface_EXPORT TYPE##Provider \
+ : public pluma::Provider \
+ { \
+private: \
+ friend class pluma::Pluma; \
+ static const unsigned int PLUMA_INTERFACE_VERSION; \
+ static const unsigned int PLUMA_INTERFACE_LOWEST_VERSION; \
+ static const std::string PLUMA_PROVIDER_TYPE; \
+ std::string plumaGetType( ) const \
+ { return( PLUMA_PROVIDER_TYPE ); } \
+public: \
+ unsigned int getVersion( ) const \
+ { return( PLUMA_INTERFACE_VERSION ); }
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_HEADER_END };
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_HEADER( TYPE ) \
+ CPPLUGINS_PROVIDER_HEADER_BEGIN( TYPE ) \
+ virtual TYPE::Pointer create( ) const = 0; \
+ CPPLUGINS_PROVIDER_HEADER_END
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_SOURCE( TYPE, Version, LowestVersion ) \
+ PLUMA_PROVIDER_SOURCE( TYPE, Version, LowestVersion )
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_INHERIT_PROVIDER( TYPE ) \
+ class TYPE##Provider \
+ : public cpPlugins::Interface::ObjectProvider \
+ { \
+ public: \
+ cpPlugins::Interface::Object::Pointer create( ) const \
+ { \
+ TYPE::Pointer a = TYPE::New( ); \
+ cpPlugins::Interface::Object::Pointer b = a.GetPointer( ); \
+ return( b ); \
+ } \
+ };
namespace cpPlugins
{
{
/**
*/
- class Object
+ class cpPlugins_Interface_EXPORT Object
+ : public itk::Object
{
public:
+ typedef Object Self;
+ typedef itk::Object Superclass;
+ typedef itk::SmartPointer< Self > Pointer;
+ typedef itk::SmartPointer< const Self > ConstPointer;
+
+ public:
+ itkNewMacro( Self );
+ itkTypeMacro( Object, itkObject );
+
+ public:
+ itkGetConstMacro( ClassName, std::string );
+ itkGetConstMacro( ClassCategory, std::string );
+
+ protected:
Object( );
virtual ~Object( );
- virtual std::string GetClassName( ) const;
+ private:
+ // Purposely not implemented
+ Object( const Self& );
+ Self& operator=( const Self& );
+
+ protected:
+ std::string m_ClassName;
+ std::string m_ClassCategory;
};
- // TODO: doc
- PLUMA_PROVIDER_HEADER( Object );
+ /**
+ * Plugin provider
+ */
+ CPPLUGINS_PROVIDER_HEADER( Object );
} // ecapseman