15 #ifndef __IPSDKBASEPROCESSING_PROCESSORDISPATCHERMACROS_H__ 16 #define __IPSDKBASEPROCESSING_PROCESSORDISPATCHERMACROS_H__ 29 #define IPSDK_DISPATCHER_DEFINE_COLLINFO_MACRO(z, n, data) \ 30 typename BOOST_PP_CAT(SplitType, n)::AttributeType 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");} 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);} 51 #define IPSDK_DISPATCHER_PUSH_DATASPLIT_MACRO(z, n, data) \ 52 dataSplitColl.push_back(BOOST_PP_CAT(pSplitOperation, n)); 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, \ 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); \ 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, \ 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); \ 103 #define IPSDK_DEFINE_DISPATCHER_INIT_FUNCTION() \ 104 BOOST_PP_REPEAT(IPSDK_ATTRIBUTE_COLL_SIZE, IPSDK_DEFINE_DISPATCHER_INIT_FUNCTION_MACRO, ) 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.