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)