IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
AttributeCollInfoCheckMacros.h
Go to the documentation of this file.
1 // AttributeCollInfoCheckMacros.h:
3 // -------------------------------
4 //
14 
15 #ifndef __IPSDKBASEPROCESSING_ATTRIBUTECOLLINFOCHECKMACROS_H__
16 #define __IPSDKBASEPROCESSING_ATTRIBUTECOLLINFOCHECKMACROS_H__
17 
18 #include <IPSDKBaseProcessing/Attribute/Macros/AttributeCollInfo.h>
21 
22 namespace ipsdk {
23 namespace processor {
24 
27 
30 #define IPSDK_ATTRIBUTE_COLL_CREATE_MACRO(z, n, startIdx) \
31  BOOST_PP_CAT(typename AttributeCollInfoType::AttributeType, BOOST_PP_ADD(n, startIdx))
32 
35 #define IPSDK_ATTRIBUTE_COLL_CREATE(StartIdx) \
36  AttributeCollInfo<BOOST_PP_ENUM(BOOST_PP_SUB(IPSDK_ATTRIBUTE_COLL_SIZE, StartIdx), \
37  IPSDK_ATTRIBUTE_COLL_CREATE_MACRO, StartIdx)>
38 
42 #define IPSDK_ATTRIBUTE_COLL_UNIQUE(z, n, startIdx) \
43  BOOST_PP_IF(n, &&, ) \
44  (!IsNotNullAttribute<BOOST_PP_CAT(typename AttributeCollInfoType::AttributeType, n)>::g_bValue || \
45  !ExistsAttribute<BOOST_PP_CAT(typename AttributeCollInfoType::AttributeType, n), \
46  IPSDK_ATTRIBUTE_COLL_CREATE(BOOST_PP_INC(n)) >::g_bValue)
47 
51 #define IPSDK_ATTRIBUTE_COLL_LOGICAL_MACRO(z, n, data) \
52  BOOST_PP_IF(n, BOOST_PP_SEQ_ELEM(3, data), ) \
53  ( BOOST_PP_SEQ_ELEM(0, data)< \
54  typename BOOST_PP_SEQ_ELEM(1, data)::BOOST_PP_CAT(AttributeType, n), \
55  BOOST_PP_SEQ_ELEM(2, data)>::g_bValue ? 1 : 0 )
56 
57 
61 #define IPSDK_ATTRIBUTE_COLL_LOGICAL(PredicateClass, SourceClass, CheckedClass, operation) \
62  (BOOST_PP_REPEAT(IPSDK_ATTRIBUTE_COLL_SIZE, \
63  IPSDK_ATTRIBUTE_COLL_LOGICAL_MACRO, \
64  (PredicateClass)(SourceClass)(CheckedClass)(operation)))
65 
69 #define IPSDK_ATTRIBUTE_COLL_AND(PredicateClass, SourceClass) \
70  IPSDK_ATTRIBUTE_COLL_OPERATION(PredicateClass, SourceClass, true, false, &&)
71 
75 #define IPSDK_ATTRIBUTE_COLL_OR(PredicateClass, SourceClass) \
76  IPSDK_ATTRIBUTE_COLL_OPERATION(PredicateClass, SourceClass, true, false, ||)
77 #define IPSDK_ATTRIBUTE_COLL_CREATE_MACRO(z, n, startIdx) \
79  BOOST_PP_CAT(typename AttributeCollInfoType::AttributeType, BOOST_PP_ADD(n, startIdx))
80 
83 #define IPSDK_ATTRIBUTE_COLL_CREATE(StartIdx) \
84  AttributeCollInfo<BOOST_PP_ENUM(BOOST_PP_SUB(IPSDK_ATTRIBUTE_COLL_SIZE, StartIdx), \
85  IPSDK_ATTRIBUTE_COLL_CREATE_MACRO, StartIdx)>
86 
90 #define IPSDK_ATTRIBUTE_COLL_UNIQUE(z, n, startIdx) \
91  BOOST_PP_IF(n, &&, ) \
92  (!IsNotNullAttribute<BOOST_PP_CAT(typename AttributeCollInfoType::AttributeType, n)>::g_bValue || \
93  !ExistsAttribute<BOOST_PP_CAT(typename AttributeCollInfoType::AttributeType, n), \
94  IPSDK_ATTRIBUTE_COLL_CREATE(BOOST_PP_INC(n)) >::g_bValue)
95 
99 #define IPSDK_ATTRIBUTE_COLL_LOGICAL_MACRO(z, n, data) \
100  BOOST_PP_IF(n, BOOST_PP_SEQ_ELEM(3, data), ) \
101  ( BOOST_PP_SEQ_ELEM(0, data)< \
102  typename BOOST_PP_SEQ_ELEM(1, data)::BOOST_PP_CAT(AttributeType, n), \
103  BOOST_PP_SEQ_ELEM(2, data)>::g_bValue ? 1 : 0 )
104 
105 
109 #define IPSDK_ATTRIBUTE_COLL_LOGICAL(PredicateClass, SourceClass, CheckedClass, operation) \
110  (BOOST_PP_REPEAT(IPSDK_ATTRIBUTE_COLL_SIZE, \
111  IPSDK_ATTRIBUTE_COLL_LOGICAL_MACRO, \
112  (PredicateClass)(SourceClass)(CheckedClass)(operation)))
113 
117 #define IPSDK_ATTRIBUTE_COLL_AND(PredicateClass, SourceClass) \
118  IPSDK_ATTRIBUTE_COLL_OPERATION(PredicateClass, SourceClass, true, false, &&)
119 
123 #define IPSDK_ATTRIBUTE_COLL_OR(PredicateClass, SourceClass) \
124  IPSDK_ATTRIBUTE_COLL_OPERATION(PredicateClass, SourceClass, true, false, ||)
125 
128 
130 template <typename AttributeType, typename AttributeCollInfoType>
132 {
134  BOOST_STATIC_CONSTANT(bool, g_bValue = IPSDK_ATTRIBUTE_COLL_LOGICAL(IsSameAttribute, AttributeCollInfoType, AttributeType, ||));
135 };
136 
139 template <typename AttributeCollInfoType>
141 {
143  BOOST_STATIC_CONSTANT(bool, g_bValue = BOOST_PP_REPEAT(BOOST_PP_DEC(IPSDK_ATTRIBUTE_COLL_SIZE), IPSDK_ATTRIBUTE_COLL_UNIQUE, ));
144 };
145 
148 
149 } // end of namespace processor
150 } // end of namespace ipsdk
151 
152 #endif // __IPSDKBASEPROCESSING_ATTRIBUTECOLLINFOCHECKMACROS_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
structure allowing to check whether two attributes have same type
Definition: AttributeCheckMacros.h:154
Configuration parameters for processing attribute macros.
structure allowing to check whether a given attribute exists in attribute collection information ...
Definition: AttributeCollInfoCheckMacros.h:131
BOOST_STATIC_CONSTANT(bool, g_bValue=BOOST_PP_REPEAT(BOOST_PP_DEC(IPSDK_ATTRIBUTE_COLL_SIZE), IPSDK_ATTRIBUTE_COLL_UNIQUE,))
structure associated value
#define IPSDK_ATTRIBUTE_COLL_SIZE
number of supported attributes for processor class
Definition: AttributeConfigMacros.h:25
#define IPSDK_ATTRIBUTE_COLL_UNIQUE(z, n, startIdx)
[Internal] macro allowing to check that an element is unique in remains of attribute info collection ...
Definition: AttributeCollInfoCheckMacros.h:90
Macros set allowing to check properties an attributes.
Structure used to check whether a given attribute collection information has unique typed attributes...
Definition: AttributeCollInfoCheckMacros.h:140
BOOST_STATIC_CONSTANT(bool, g_bValue=IPSDK_ATTRIBUTE_COLL_LOGICAL(IsSameAttribute, AttributeCollInfoType, AttributeType,||))
structure associated value
#define IPSDK_ATTRIBUTE_COLL_LOGICAL(PredicateClass, SourceClass, CheckedClass, operation)
[Internal] macro allowing to check whether elements respect a given condition in an attribute info co...
Definition: AttributeCollInfoCheckMacros.h:109