#ifndef __CPPLUGINS__INTERFACE__MACROS__H__ #define __CPPLUGINS__INTERFACE__MACROS__H__ #include #include #include // ------------------------------------------------------------------------- #define cpPlugins_Id_Macro( name, category ) \ public: \ virtual std::string GetClassName( ) { return( #name ); } \ virtual std::string GetClassCategory( ) { return( category ); } // ------------------------------------------------------------------------- #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::ProcessObjectProvider \ { \ public: \ cpPlugins::Interface::ProcessObject::Pointer create( ) const \ { \ TYPE::Pointer a = TYPE::New( ); \ cpPlugins::Interface::ProcessObject::Pointer b = a.GetPointer( ); \ return( b ); \ } \ }; /** * Based upon: http://www.itk.org/Wiki/Proposals:Explicit_Instantiation */ // ------------------------------------------------------------------------- #define cpPlugins_TEMPLATE_1( X1 ) \ X1 #define cpPlugins_TEMPLATE_2( X1, X2 ) \ X1,X2 #define cpPlugins_TEMPLATE_3( X1, X2, X3 ) \ X1,X2,X3 #define cpPlugins_TEMPLATE_4( X1, X2, X3, X4 ) \ X1,X2,X3,X4 #define cpPlugins_TEMPLATE_5( X1, X2, X3, X4, X5 ) \ X1,X2,X3,X4,X5 #define cpPlugins_TEMPLATE_6( X1, X2, X3, X4, X5, X6 ) \ X1,X2,X3,X4,X5,X6 #define cpPlugins_TEMPLATE_7( X1, X2, X3, X4, X5, X6, X7 ) \ X1,X2,X3,X4,X5,X6,X7 #define cpPlugins_TEMPLATE_8( X1, X2, X3, X4, X5, X6, X7, X8 ) \ X1,X2,X3,X4,X5,X6,X7,X8 #define cpPlugins_TEMPLATE_9( X1, X2, X3, X4, X5, X6, X7, X8, X9 ) \ X1,X2,X3,X4,X5,X6,X7,X8,X9 #define cpPlugins_TEMPLATE_EXPORT( X ) \ template cpPlugins_TEMPLATE_##X; #define cpPlugins_TEMPLATE_IMPORT( X ) \ extern template cpPlugins_TEMPLATE_##X; #endif // __CPPLUGINS__INTERFACE__MACROS__H__ // eof - $RCSfile$