|
Katana Plug-in APIs 0.1
|
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
1.7.3