+#include <cpPlugins/Interface/Config.h>
+
+// -------------------------------------------------------------------------
+#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 ); \
+ } \
+ };