IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
ProcessingAlgorithmHdrMacros.h
Go to the documentation of this file.
1 // ProcessingAlgorithmHdrMacros.h:
3 // -------------------------------
4 //
15 
16 #ifndef __IPSDKBASEPROCESSING_PROCESSINGALGORITHMHDRMACROS_H__
17 #define __IPSDKBASEPROCESSING_PROCESSINGALGORITHMHDRMACROS_H__
18 
20 
23 
27 #define IPSDK_DECLARE_PROCESSING_ALGORITHM(libraryName, algoName, \
28  RuleString, attributeSeq) \
29 namespace details { \
30  static bool functionRegistration(); \
31  static bool safeFunctionRegistration(); \
32 } \
33 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(algoName, Lvl3) : \
34  public ipsdk::processor::BaseProcessingAlgorithm \
35 { \
36  IPSDK_DECLARE_PROCESSOR(libraryName, BOOST_PP_CAT(algoName, Lvl3), \
37  RuleString, attributeSeq) \
38  friend bool details::functionRegistration(); \
39 public: \
40  static const FunctionSelector& accessFunctionSelector(); \
41  static const ipsdk::processor::InstructionSetsIdentifier& accessForcedInstructionSets(); \
42  static void forceInstructionSets(const ipsdk::processor::InstructionSetsIdentifier& forcedInstructionSetsId); \
43  static void releaseForcedInstructionSets(); \
44 private: \
45  const ipsdk::processor::InstructionSetsIdentifier& getForcedInstructionSets() const; \
46  static ipsdk::processor::InstructionSetsIdentifier& retrieveForcedInstructionSets(); \
47  const FunctionSelector& getFunctionSelector() const; \
48  static FunctionSelector& retrieveFunctionSelector();
49 
53 #define IPSDK_DECLARE_NOTYPE_ALGORITHM_FUNCTION_SELECTOR() \
54 public: \
55  BOOST_STATIC_CONSTANT(ipsdk::ipUInt32, g_nbTypesForFunSelection = 0); \
56 private: \
57  void getDataTypeIdColl(DataTypeIdColl& dataTypeIdColl) const \
58  { \
59  dataTypeIdColl.init(); \
60  }
61 
65 #define IPSDK_DECLARE_ALGORITHM_FUNCTION_SELECTOR(dataTypeSeq) \
66 public: \
67  BOOST_STATIC_CONSTANT(ipsdk::ipUInt32, g_nbTypesForFunSelection = \
68  BOOST_PP_SEQ_SIZE(dataTypeSeq)); \
69 private: \
70  void getDataTypeIdColl(DataTypeIdColl& dataTypeIdColl) const \
71  { \
72  BOOST_PP_SEQ_FOR_EACH_I(IPSDK_INIT_IDENTIFIER_FROM_ATTRIBUTE_MACRO, _, dataTypeSeq); \
73  dataTypeIdColl.init(BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(dataTypeSeq), \
74  IPSDK_ENUM_DATATYPE_IDENTIFIER_MACRO, _)); \
75  }
76 
80 #define IPSDK_DECLARE_ALGORITHM_NOPARSED_DATA() \
81 private: \
82  void initDataParserColl(DataParserColl& dataParserColl) { \
83  dataParserColl.clear(); \
84  } \
85  void clearDataParserColl() { \
86  }
87 
91 #define IPSDK_DECLARE_ALGORITHM_PARSED_DATA(dataSeq) \
92 protected: \
93  BOOST_PP_SEQ_FOR_EACH(IPSDK_DECLARE_DATA_PARSER_MACRO, _, dataSeq) \
94 private: \
95  void initDataParserColl(DataParserColl& dataParserColl) { \
96  dataParserColl.clear(); \
97  BOOST_PP_SEQ_FOR_EACH(IPSDK_INIT_DATA_PARSER_MACRO, \
98  dataParserColl, dataSeq) \
99  } \
100  void clearDataParserColl() { \
101  BOOST_PP_SEQ_FOR_EACH(IPSDK_CLEAR_DATA_PARSER_MACRO, \
102  _, dataSeq) \
103  }
104 
105 
109 #define IPSDK_DECLARE_GPU_PROCESSING_ALGORITHM(libraryName, algoName, \
110  RuleString, attributeSeq) \
111 namespace details { \
112  static bool functionRegistration(); \
113 } \
114 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(algoName, GpuLvl3) : \
115  public ipsdk::processor::BaseGpuProcessingAlgorithm \
116 { \
117  IPSDK_DECLARE_PROCESSOR(libraryName, BOOST_PP_CAT(algoName, GpuLvl3), \
118  RuleString, attributeSeq) \
119  friend bool details::functionRegistration(); \
120 public: \
121  static const FunctionSelector& accessFunctionSelector(); \
122 private: \
123  const FunctionSelector& getFunctionSelector() const; \
124  static FunctionSelector& retrieveFunctionSelector();
125 
128 #define IPSDKCUDA_DECLARE_ALGORITHM_FUNCTION_SELECTOR(dataTypeSeq) \
129 public: \
130  BOOST_STATIC_CONSTANT(ipsdk::ipUInt32, g_nbTypesForFunSelection = \
131  BOOST_PP_SEQ_SIZE(dataTypeSeq)); \
132 private: \
133  void getDataTypeIdColl(DataTypeIdColl& dataTypeIdColl) const \
134  { \
135  ISPDKCUDA_DECLARE_IDENTIFIERS(dataTypeSeq) \
136  ISPDKCUDA_INIT_IDENTIFIERS_FROM_ATTRIBUTE(dataTypeSeq) \
137  dataTypeIdColl.init(BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(dataTypeSeq), \
138  IPSDK_ENUM_DATATYPE_IDENTIFIER_MACRO, _)); \
139  }
140 
144 #define IPSDKCUDA_DECLARE_NOTYPE_ALGORITHM_FUNCTION_SELECTOR() \
145 public: \
146  BOOST_STATIC_CONSTANT(ipsdk::ipUInt32, g_nbTypesForFunSelection = 0); \
147 private: \
148  void getDataTypeIdColl(DataTypeIdColl& dataTypeIdColl) const \
149  { \
150  dataTypeIdColl.init(); \
151  }
152 
155 #endif // __IPSDKBASEPROCESSING_PROCESSINGALGORITHMHDRMACROS_H__
Internal header part of macros set for processing algorithm class declaration.