IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
ProcessorDispatcherMacros.h
Go to the documentation of this file.
1 // ProcessorDispatcherMacros.h:
3 // ----------------------------
4 //
14 
15 #ifndef __IPSDKBASEPROCESSING_PROCESSORDISPATCHERMACROS_H__
16 #define __IPSDKBASEPROCESSING_PROCESSORDISPATCHERMACROS_H__
17 
20 
21 namespace ipsdk {
22 
25 
29 #define IPSDK_DISPATCHER_DEFINE_COLLINFO_MACRO(z, n, data) \
30  typename BOOST_PP_CAT(SplitType, n)::AttributeType
31 
34 #define IPSDK_DISPATCHER_CHECK_ATTRIBUTE_EXISTS_MACRO(z, n, data) \
35  {BOOST_STATIC_ASSERT_MSG( \
36  (ExistsAttribute<typename BOOST_PP_CAT(SplitType,n)::AttributeType, \
37  typename TProcessor::AttributesInfo>::g_bValue), \
38  "Invalid attribute, parameter " #n " is not part of current processor class");}
39 
43 #define IPSDK_DISPATCHER_CHECK_SAME_PROCESSOR_MACRO(z, n, data) \
44  {BOOST_STATIC_ASSERT_MSG( \
45  (boost::is_same<typename BOOST_PP_CAT(SplitType,n)::ProcessorType, \
46  TProcessor>::value), \
47  "Processor type mismatch between dispatcher and split operator " #n);}
48 
51 #define IPSDK_DISPATCHER_PUSH_DATASPLIT_MACRO(z, n, data) \
52  dataSplitColl.push_back(BOOST_PP_CAT(pSplitOperation, n));
53 
56 #define IPSDK_DEFINE_DISPATCHER_INIT_FUNCTION_MACRO(z, FunIdx, data) \
57  BOOST_PP_IF(FunIdx, template <, ) \
58  BOOST_PP_ENUM_PARAMS(FunIdx, typename SplitType) \
59  BOOST_PP_IF(FunIdx, >, ) \
60  BoolResult init(const core::BasePriority& actionPriority BOOST_PP_COMMA_IF(FunIdx) \
61  BOOST_PP_ENUM_BINARY_PARAMS(FunIdx, \
62  const boost::shared_ptr<SplitType, \
63  >& pSplitOperation) \
64  ) { \
65  typedef AttributeCollInfo<BOOST_PP_ENUM(FunIdx, IPSDK_DISPATCHER_DEFINE_COLLINFO_MACRO, )> CollInfo; \
66  {BOOST_STATIC_ASSERT_MSG(AreAttributesTypeUnique<CollInfo>::g_bValue, \
67  "All attributes must be uniquely set");} \
68  {BOOST_STATIC_ASSERT_MSG(FunIdx <= TProcessor::AttributesInfo::g_nbAttributes, \
69  "Too many attributes set for current processor class");} \
70  {BOOST_STATIC_ASSERT_MSG(FunIdx >= TProcessor::AttributesInfo::g_nbMandatoryAttributes, \
71  "Not all mandatory attributes set for current processor class");} \
72  BOOST_PP_REPEAT(FunIdx, IPSDK_DISPATCHER_CHECK_ATTRIBUTE_EXISTS_MACRO, ); \
73  BOOST_PP_REPEAT(FunIdx, IPSDK_DISPATCHER_CHECK_SAME_PROCESSOR_MACRO, ); \
74  BaseDispatcherType::DataSplitColl dataSplitColl; \
75  BOOST_PP_REPEAT(FunIdx, IPSDK_DISPATCHER_PUSH_DATASPLIT_MACRO, ) \
76  return this->initBase(actionPriority, dataSplitColl); \
77  } \
78  BOOST_PP_IF(FunIdx, template <, ) \
79  BOOST_PP_ENUM_PARAMS(FunIdx, typename SplitType) \
80  BOOST_PP_IF(FunIdx, >, ) \
81  BoolResult init(const core::BasePriority& actionPriority, const ipUInt64 nbMaxThreads \
82  BOOST_PP_COMMA_IF(FunIdx) \
83  BOOST_PP_ENUM_BINARY_PARAMS(FunIdx, \
84  const boost::shared_ptr<SplitType, \
85  >& pSplitOperation) \
86  ) { \
87  typedef AttributeCollInfo<BOOST_PP_ENUM(FunIdx, IPSDK_DISPATCHER_DEFINE_COLLINFO_MACRO, )> CollInfo; \
88  {BOOST_STATIC_ASSERT_MSG(AreAttributesTypeUnique<CollInfo>::g_bValue, \
89  "All attributes must be uniquely set");} \
90  {BOOST_STATIC_ASSERT_MSG(FunIdx <= TProcessor::AttributesInfo::g_nbAttributes, \
91  "Too many attributes set for current processor class");} \
92  {BOOST_STATIC_ASSERT_MSG(FunIdx >= TProcessor::AttributesInfo::g_nbMandatoryAttributes, \
93  "Not all mandatory attributes set for current processor class");} \
94  BOOST_PP_REPEAT(FunIdx, IPSDK_DISPATCHER_CHECK_ATTRIBUTE_EXISTS_MACRO, ); \
95  BOOST_PP_REPEAT(FunIdx, IPSDK_DISPATCHER_CHECK_SAME_PROCESSOR_MACRO, ); \
96  BaseDispatcherType::DataSplitColl dataSplitColl; \
97  BOOST_PP_REPEAT(FunIdx, IPSDK_DISPATCHER_PUSH_DATASPLIT_MACRO, ) \
98  return this->initBase(actionPriority, nbMaxThreads, dataSplitColl); \
99  }
100 
103 #define IPSDK_DEFINE_DISPATCHER_INIT_FUNCTION() \
104  BOOST_PP_REPEAT(IPSDK_ATTRIBUTE_COLL_SIZE, IPSDK_DEFINE_DISPATCHER_INIT_FUNCTION_MACRO, )
105 
108 
109 } // end of namespace ipsdk
110 
111 #endif // __IPSDKBASEPROCESSING_PROCESSORDISPATCHERMACROS_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Macros set allowing to manage an attribute collection information.
Definition of import/export macro for library.