34 #include "dcmtk/config/osconfig.h" 35 #include "dcmtk/ofstd/oftypes.h" 77 #if defined(HAVE_STL) || defined(HAVE_STL_ALGORITHMS) 84 #define OFForEach(InputIterator_type, Function_type, first, last, f) for_each((first), (last), (f)) 85 #define OFFind(InputIterator_type, T_type, first, last, value) find((first), (last), (value)) 86 #define OFFindIf(InputIterator_type, Predicate_type, first, last, pred) find_if((first), (last), (pred)) 87 #define OFAdjacentFind(ForwardIterator_type, first, last) adjacent_find((first), (last)) 88 #define OFAdjacentFindPred(ForwardIterator_type, BinaryPredicate_type, first, last, pred) adjacent_find((first), (last), (pred)) 91 #ifdef HAVE_FUNCTION_TEMPLATE 93 #define OFForEach(InputIterator_type, Function_type, first, last, f) OF_ForEach((first), (last), (f)) 95 #define OFFind(InputIterator_type, T_type, first, last, value) OF_Find((first), (last), (value)) 97 #define OFFindIf(InputIterator_type, Predicate_type, first, last, pred) OF_FindIf((first), (last), (pred)) 99 #define OFAdjacentFind(ForwardIterator_type, first, last) OF_AdjacentFind((first), (last)) 101 #define OFAdjacentFindPred(ForwardIterator_type, BinaryPredicate_type, first, last, pred) OF_AdjacentFind((first), (last), (pred)) 103 #elif defined(HAVE_STATIC_TEMPLATE_METHOD) 105 #define OFForEach(InputIterator_type, Function_type, first, last, f) OF_ForEachClass<InputIterator_type, Function_type>::OF_ForEach((first), (last), (f)) 107 #define OFFind(InputIterator_type, T_type, first, last, value) OF_FindClass<InputIterator_type, T_type>::OF_Find((first), (last), (value)) 109 #define OFFindIf(InputIterator_type, Predicate_type, first, last, pred) OF_FindIfClass<InputIterator_type, Predicate_type>::OF_FindIf((first), (last), (pred)) 111 #define OFAdjacentFind(ForwardIterator_type, first, last) OF_AdjacentFindClass<ForwardIterator_type, int>::OF_AdjacentFind((first), (last)) 113 #define OFAdjacentFindPred(ForwardIterator_type, BinaryPredicate_type, first, last, pred) OF_AdjacentFindPredClass<ForwardIterator_type, BinaryPredicate_type>::OF_AdjacentFind((first), (last), (pred)) 115 #error Your C++ Compiler is not capable of compiling this code 119 template <
class InputIterator,
class Function>
120 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 121 class OF_ForEachClass
126 Function OF_ForEach(InputIterator first, InputIterator last, Function f)
128 while (first != last)
135 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 139 template <
class InputIterator,
class T>
140 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 146 InputIterator OF_Find(InputIterator first, InputIterator last,
const T & value)
148 while (first != last && *first != value) ++ first;
151 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 156 template <
class InputIterator,
class Predicate>
157 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 163 InputIterator OF_FindIf(InputIterator first, InputIterator last,
166 while (first != last && !pred(*first)) ++first;
169 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 173 template <
class ForwardIterator>
174 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 175 class OF_AdjacentFindClass
180 ForwardIterator OF_AdjacentFind(ForwardIterator first, ForwardIterator last)
182 if (first == last)
return last;
183 ForwardIterator next(first);
184 while (++next != last)
186 if (*first == *next)
return *first;
191 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 195 template <
class ForwardIterator,
class BinaryPredicate>
196 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE) 197 class OF_AdjacentFindPredClass
202 ForwardIterator OF_AdjacentFind(ForwardIterator first, ForwardIterator last,
203 BinaryPredicate pred)
205 if (first == last)
return last;
206 ForwardIterator next = first;
207 while(++next != last)
209 if (pred(*first, *last))
return first;
215 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE)