15 #ifndef __IPSDKBASEPROCESSING_PROCESSORSRCMACROS_H__ 16 #define __IPSDKBASEPROCESSING_PROCESSORSRCMACROS_H__ 19 #include <IPSDKBaseProcessing/Processor/ProcessorFactory.h> 20 #include <IPSDKBaseProcessing/Processor/Policy/ProcessorDispatchPolicy.h> 22 #include <boost/make_shared.hpp> 23 #include <boost/thread/lock_guard.hpp> 31 #define IPSDK_IMPLEMENT_PROCESSOR(libraryName, namespaceSeq, className, \ 33 IPSDK_STATIC_MUTEX(DispatchPolicyMutex); \ 34 static ipsdk::processor::ProcessorDispatchPolicy& \ 35 BOOST_PP_CAT(get, BOOST_PP_CAT(className, StaticDispatchPolicy))() { \ 36 boost::lock_guard<boost::mutex> lock(DispatchPolicyMutex::get()); \ 37 static ipsdk::processor::ProcessorDispatchPolicy g_dispatchPolicy; \ 38 if (g_dispatchPolicy.isInit() == false) \ 39 g_dispatchPolicy.initDefault(); \ 40 return g_dispatchPolicy; \ 42 const ipsdk::processor::ProcessorDispatchPolicy& className::getDefaultDispatchPolicy() { \ 43 return BOOST_PP_CAT(get, BOOST_PP_CAT(className, StaticDispatchPolicy))(); \ 45 IPSDK_IMPLEMENT_ACTION(libraryName, namespaceSeq, className, eMsgEnum, version) \ 46 boost::shared_ptr<className> className::createProcessor() { \ 47 return boost::make_shared<className>(); \ 49 ipsdk::processor::ProcessorPtr className::createBaseProcessor() { \ 50 return boost::make_shared<className>(); \ 52 ipsdk::BoolResult className::initDerived(AttributeColl& attributeColl, \ 53 OutputInitializerColl& outputInitializerColl, \ 54 ipsdk::processor::ProcessorDispatchPolicy& dispatchPolicy, \ 55 ipsdk::processor::RulePtr& pGlobalRule, \ 56 const ipsdk::processor::eProcessorRulePolicy& rulePolicy) \ 58 initAttributeColl(attributeColl, outputInitializerColl); \ 59 dispatchPolicy = getDefaultDispatchPolicy(); \ 60 pGlobalRule.reset(); \ 61 if (rulePolicy != ipsdk::processor::eProcessorRulePolicy::ePRP_DisableAll) \ 62 pGlobalRule = createRule(); \ 66 namespace processor { \ 67 template <typename T> \ 68 struct ProcessorRegistrator; \ 70 struct ProcessorRegistrator<className> { \ 71 ProcessorRegistrator() \ 73 MessageMapRegistrator<eMsgEnum>::process(); \ 74 ProcessorFactory& factory = ProcessorFactory::getInstance(); \ 75 factory.registerProcessor<className>(); \ 77 ~ProcessorRegistrator() \ 79 ProcessorFactory& factory = ProcessorFactory::getInstance(); \ 80 factory.unRegisterProcessor<className>(); \ 82 static ProcessorRegistrator<className> g_bProcessorRegistrator; \ 84 ProcessorRegistrator<className> ProcessorRegistrator<className>::g_bProcessorRegistrator; \ 90 #define IPSDK_DEFAULT_DISPATCH_POLICY(className, nbMaxThread, dispatchLocationType) \ 91 static bool BOOST_PP_CAT(set, BOOST_PP_CAT(className, StaticDispatchPolicy))() { \ 92 BOOST_PP_CAT(get, BOOST_PP_CAT(className, StaticDispatchPolicy))().init( \ 93 ipsdk::processor::eDispatchLocationType::dispatchLocationType, nbMaxThread); \ 96 static bool BOOST_PP_CAT(g_bSet, BOOST_PP_CAT(className, StaticDispatchPolicy)) = \ 97 BOOST_PP_CAT(set, BOOST_PP_CAT(className, StaticDispatchPolicy))(); 103 #endif // __IPSDKBASEPROCESSING_PROCESSORSRCMACROS_H__ Source part of macros set for action class implementation.
Macros allowing to define a getter to a static mutex.