IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
ProcessorSrcMacros.h
Go to the documentation of this file.
1 // ProcessorSrcMacros.h:
3 // ---------------------
4 //
14 
15 #ifndef __IPSDKBASEPROCESSING_PROCESSORSRCMACROS_H__
16 #define __IPSDKBASEPROCESSING_PROCESSORSRCMACROS_H__
17 
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>
24 
27 
31 #define IPSDK_IMPLEMENT_PROCESSOR(libraryName, namespaceSeq, className, \
32  eMsgEnum, version) \
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; \
41  } \
42  const ipsdk::processor::ProcessorDispatchPolicy& className::getDefaultDispatchPolicy() { \
43  return BOOST_PP_CAT(get, BOOST_PP_CAT(className, StaticDispatchPolicy))(); \
44  } \
45  IPSDK_IMPLEMENT_ACTION(libraryName, namespaceSeq, className, eMsgEnum, version) \
46  boost::shared_ptr<className> className::createProcessor() { \
47  return boost::make_shared<className>(); \
48  } \
49  ipsdk::processor::ProcessorPtr className::createBaseProcessor() { \
50  return boost::make_shared<className>(); \
51  } \
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) \
57  { \
58  initAttributeColl(attributeColl, outputInitializerColl); \
59  dispatchPolicy = getDefaultDispatchPolicy(); \
60  pGlobalRule.reset(); \
61  if (rulePolicy != ipsdk::processor::eProcessorRulePolicy::ePRP_DisableAll) \
62  pGlobalRule = createRule(); \
63  return true; \
64  } \
65  namespace ipsdk { \
66  namespace processor { \
67  template <typename T> \
68  struct ProcessorRegistrator; \
69  template <> \
70  struct ProcessorRegistrator<className> { \
71  ProcessorRegistrator() \
72  { \
73  MessageMapRegistrator<eMsgEnum>::process(); \
74  ProcessorFactory& factory = ProcessorFactory::getInstance(); \
75  factory.registerProcessor<className>(); \
76  } \
77  ~ProcessorRegistrator() \
78  { \
79  ProcessorFactory& factory = ProcessorFactory::getInstance(); \
80  factory.unRegisterProcessor<className>(); \
81  } \
82  static ProcessorRegistrator<className> g_bProcessorRegistrator; \
83  }; \
84  ProcessorRegistrator<className> ProcessorRegistrator<className>::g_bProcessorRegistrator; \
85  } \
86  }
87 
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); \
94  return true; \
95  } \
96  static bool BOOST_PP_CAT(g_bSet, BOOST_PP_CAT(className, StaticDispatchPolicy)) = \
97  BOOST_PP_CAT(set, BOOST_PP_CAT(className, StaticDispatchPolicy))();
98 
99 
102 
103 #endif // __IPSDKBASEPROCESSING_PROCESSORSRCMACROS_H__
Source part of macros set for action class implementation.
Macros allowing to define a getter to a static mutex.