Katana Plug-in APIs 0.1

FnAttributeFunctionPlugin.h

00001 #ifndef FnAttributeFunctionPlugin_H
00002 #define FnAttributeFunctionPlugin_H
00003 
00004 #include <string>
00005 #include <vector>
00006 
00007 #include <FnAttribute/FnAttribute.h>
00008 
00009 #include <FnAttributeFunction/FnAttributeFunctionAPI.h>
00010 #include <FnAttributeFunction/plugin/ns.h>
00011 #include <FnAttributeFunction/suite/FnAttributeFunctionSuite.h>
00012 
00013 #include <FnPluginSystem/FnPlugin.h>
00014 #include <FnPluginSystem/FnPluginSystem.h>
00015 
00016 FNATTRIBUTEFUNCTION_NAMESPACE_ENTER
00017 {
00018     // AttributeFunction and classes derived from it are never
00019     // instantiated.  The base class contains some common static functions
00020     // used by the plugin system (setHost/getHost/flush/createSuite).
00021     //
00022     // Each derived class should create a static run function
00023     // which will be registered in a FnAttributeFunctionSuite_v1
00024     // instance.
00025     //
00026     // run func: static FnAttribute::Attribute run(FnAttribute::Attribute args);
00027     class FNATTRIBUTEFUNCTION_API AttributeFunction
00028     {
00029     public:
00031         static FnPlugStatus setHost(FnPluginHost *host);
00032         static FnPluginHost *getHost();
00033 
00034         static void flush();
00035 
00036         static FnAttributeFunctionSuite_v1 createSuite(
00037                 FnAttributeHandle (*run)(FnAttributeHandle));
00038 
00039         typedef FnAttribute::Attribute (*RunFunc)(FnAttribute::Attribute);
00040 
00041         static FnAttribute::Attribute callRun(
00042                 RunFunc runFunc, FnAttribute::Attribute args);
00043 
00044         static unsigned int _apiVersion;
00045         static const char* _apiName;
00046 
00047     private:
00048         static FnPluginHost *_host;
00049 
00050         // AttributeFunction classes are never instantiated.
00051         AttributeFunction();
00052         ~AttributeFunction();
00054     };
00055 }
00056 FNATTRIBUTEFUNCTION_NAMESPACE_EXIT
00057 
00058 
00060 
00061 // Plugin Registering Macro.
00062 
00063 #define DEFINE_ATTRIBUTEFUNCTION(ATTRFNC_CLASS)                             \
00064     FnAttributeHandle ATTRFNC_CLASS##_run(                                  \
00065         FnAttributeHandle args)                                             \
00066     {                                                                       \
00067         return FNATTRIBUTEFUNCTION_NAMESPACE::AttributeFunction::callRun(   \
00068             ATTRFNC_CLASS::run, FnAttribute::Attribute::CreateAndRetain(    \
00069                 args)).getRetainedHandle();                                 \
00070     }                                                                       \
00071                                                                             \
00072     FnAttributeFunctionSuite_v1 ATTRFNC_CLASS##_suite =                     \
00073         FNATTRIBUTEFUNCTION_NAMESPACE::AttributeFunction::createSuite(      \
00074             ATTRFNC_CLASS##_run);                                           \
00075                                                                             \
00076     const void* ATTRFNC_CLASS##_getSuite()                                  \
00077     {                                                                       \
00078         return &ATTRFNC_CLASS##_suite;                                      \
00079     }
00080 
00081 #define DEFINE_ATTRIBUTEFUNCTION_PLUGIN(ATTRFNC_CLASS)                      \
00082                                                                             \
00083     FnPlugin ATTRFNC_CLASS##_plugin;                                        \
00084                                                                             \
00085     DEFINE_ATTRIBUTEFUNCTION(ATTRFNC_CLASS)
00086 
00088 
00089 #endif // FnAttributeFunctionPlugin_H
 All Classes Functions Variables Typedefs Enumerations Enumerator