|
Katana Plug-in APIs 0.1
|
00001 #ifndef FnDefaultAttributeProducerPlugin_H 00002 #define FnDefaultAttributeProducerPlugin_H 00003 00004 #include <string> 00005 #include <vector> 00006 00007 #include <FnAttribute/FnAttribute.h> 00008 00009 #include <FnDefaultAttributeProducer/FnDefaultAttributeProducerAPI.h> 00010 #include <FnDefaultAttributeProducer/plugin/ns.h> 00011 #include <FnDefaultAttributeProducer/suite/FnDefaultAttributeProducerSuite.h> 00012 00013 #include <FnGeolib/op/FnGeolibCookInterface.h> 00014 #include <FnGeolib/suite/FnGeolibCookInterfaceSuite.h> 00015 00016 #include <FnPluginSystem/FnPlugin.h> 00017 #include <FnPluginSystem/FnPluginSystem.h> 00018 00019 00020 FNDEFAULTATTRIBUTEPRODUCER_NAMESPACE_ENTER 00021 { 00046 class FNDEFAULTATTRIBUTEPRODUCER_API DefaultAttributeProducer 00047 { 00048 public: 00050 static FnPlugStatus setHost(FnPluginHost *host); 00051 static FnPluginHost *getHost(); 00052 00053 static void flush(); 00054 00055 static FnDefaultAttributeProducerSuite_v1 createSuite( 00056 FnAttributeHandle (*cook)( 00057 FnGeolibCookInterfaceHandle cookInterfaceHandle, 00058 FnGeolibCookInterfaceSuite_v1 *cookInterfaceSuite, 00059 const char *attrRoot, int32_t stringlen1, 00060 const char *inputLocationPath, int32_t stringlen2, 00061 int32_t inputIndex, 00062 uint8_t * didAbort)); 00063 00064 typedef FnAttribute::GroupAttribute (*CookFunc)( 00065 const FnGeolibOp::GeolibCookInterface & cookInterface, 00066 const std::string & attrRoot, 00067 const std::string & inputLocationPath, 00068 int32_t inputIndex); 00069 00070 static FnAttribute::GroupAttribute callCook( 00071 CookFunc cookFunc, 00072 FnGeolibCookInterfaceHandle cookInterfaceHandle, 00073 FnGeolibCookInterfaceSuite_v1 *cookInterfaceSuite, 00074 const char *attrRoot, int32_t stringlen1, 00075 const char *inputLocationPath, int32_t stringlen2, 00076 int32_t inputIndex, 00077 uint8_t * didAbort); 00078 00079 static unsigned int _apiVersion; 00080 static const char* _apiName; 00081 00082 private: 00083 static FnPluginHost *_host; 00084 00085 // dap instances are never made (just a derivable placeholder for 00086 // static funcs). 00087 DefaultAttributeProducer(); 00088 ~DefaultAttributeProducer(); 00090 }; 00091 00093 } 00094 FNDEFAULTATTRIBUTEPRODUCER_NAMESPACE_EXIT 00095 00096 00098 00099 // Plugin Registering Macro. 00100 00101 #define DEFINE_DEFAULTATTRIBUTEPRODUCER(DAP_CLASS) \ 00102 FnAttributeHandle DAP_CLASS##_cook( \ 00103 FnGeolibCookInterfaceHandle cookInterfaceHandle, \ 00104 FnGeolibCookInterfaceSuite_v1 *cookInterfaceSuite, \ 00105 const char *attrRoot, int32_t stringlen1, \ 00106 const char *inputLocationPath, int32_t stringlen2, \ 00107 int32_t inputIndex, \ 00108 uint8_t * didAbort) \ 00109 { \ 00110 return FNDEFAULTATTRIBUTEPRODUCER_NAMESPACE::DefaultAttributeProducer::callCook( \ 00111 DAP_CLASS::cook, \ 00112 cookInterfaceHandle, cookInterfaceSuite, \ 00113 attrRoot, stringlen1, inputLocationPath, stringlen2, \ 00114 inputIndex, didAbort).getRetainedHandle(); \ 00115 } \ 00116 \ 00117 FnDefaultAttributeProducerSuite_v1 DAP_CLASS##_suite = \ 00118 FNDEFAULTATTRIBUTEPRODUCER_NAMESPACE::DefaultAttributeProducer::createSuite( \ 00119 DAP_CLASS##_cook); \ 00120 \ 00121 const void* DAP_CLASS##_getSuite() \ 00122 { \ 00123 return &DAP_CLASS##_suite; \ 00124 } 00125 00126 #define DEFINE_DEFAULTATTRIBUTEPRODUCER_PLUGIN(DAP_CLASS) \ 00127 \ 00128 FnPlugin DAP_CLASS##_plugin; \ 00129 \ 00130 DEFINE_DEFAULTATTRIBUTEPRODUCER(DAP_CLASS) 00131 00133 00134 #endif // FnDefaultAttributeProducerPlugin_H
1.7.3