#ifndef __CPPLUGINS__INTERFACE__OBJECT__H__ #define __CPPLUGINS__INTERFACE__OBJECT__H__ #include #include #include #include #include // ------------------------------------------------------------------------- #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 ); \ } \ }; // ------------------------------------------------------------------------- #define cpPlugins_Id_Macro( name, category ) \ public: \ virtual std::string GetClassName( ) { return( #name ); } \ virtual std::string GetClassCategory( ) { return( category ); } namespace cpPlugins { namespace Interface { /** */ 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 ); cpPlugins_Id_Macro( cpPlugins::Interface::Object, "BaseObject" ); itkGetStringMacro( Name ); itkSetStringMacro( Name ); protected: Object( ); virtual ~Object( ); private: // Purposely not implemented Object( const Self& ); Self& operator=( const Self& ); protected: std::string m_Name; }; /** * Plugin provider */ CPPLUGINS_PROVIDER_HEADER( Object ); } // ecapseman } // ecapseman #endif // __CPPLUGINS__INTERFACE__OBJECT__H__ // eof - $RCSfile$