48 #include "dcmtk/config/osconfig.h"
49 #include "dcmtk/ofstd/oftypes.h"
50 #include "dcmtk/ofstd/ofcast.h"
52 #ifndef HAVE_CLASS_TEMPLATE
53 #error Your C++ compiler cannot handle class templates:
56 #if defined(HAVE_STL) || defined(HAVE_STL_LIST)
64 #ifdef HAVE_STD_NAMESPACE
65 #define OFList std::list
66 #define OFListIterator(x) std::list< x >::iterator
67 #define OFListConstIterator(x) std::list< x >::const_iterator
70 #define OFListIterator(x) list< x >::iterator
71 #define OFListConstIterator(x) list< x >::const_iterator
74 #define OFListInsert(InputIterator, T, c, pos, first, last) (c).insert((pos), (first), (last))
75 #define OFListRemoveIf(Predicate, T, c, pred) (c).remove_if((pred))
78 #define OFLIST_TYPENAME OFTypename
82 #define INCLUDE_CASSERT
83 #define INCLUDE_CSTDDEF
84 #include "dcmtk/ofstd/ofstdinc.h"
86 #define OFLIST_TYPENAME
89 #ifdef HAVE_SYS_TYPES_H
91 #include <sys/types.h>
123 void base_recalcListSize();
129 OFBool base_empty()
const {
return afterLast == afterLast->next; }
130 size_t base_size()
const {
return listSize; }
223 assert(!node->dummy);
313 while (vfirst != vend)
353 OFBool
empty()
const {
return OFListBase::base_empty(); }
358 size_t size()
const {
return OFListBase::base_size(); }
423 while (position != last) position =
erase(position);
430 void clear() { OFListBase::base_clear(); }
451 splice(position, x, change, i);
464 OFListBase::base_splice(position.
node, first.
node, last.
node);
472 void remove(
const T& value)
478 if (*first == value) first =
erase(first);
491 #ifdef HAVE_FUNCTION_TEMPLATE
493 #define OFListInsert(InputIterator, T, c, pos, first, last) OF_ListInsert((c), (pos), (first), (last))
495 #define OFListRemoveIf(Predicate, T, c, pred) OF_ListRemoveIf((c), (pred))
497 #elif defined(HAVE_STATIC_TEMPLATE_METHOD)
499 #define OFListInsert(InputIterator, T, c, pos, first, last) OF_ListInsertClass<InputIterator, T>::OF_ListInsert((c), (pos), (first), (last))
501 #define OFListRemoveIf(Predicate, T, c, pred) OF_ListRemoveIfClass<Predicate, T>::OF_ListRemoveIf((c), (pred))
504 #error Your C++ Compiler is not capable of compiling this code
508 template <
class InputIterator,
class T>
509 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE)
510 class OF_ListInsertClass
516 InputIterator first, InputIterator last)
520 c.
insert(position, *first);
524 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE)
530 template <
class Predicate,
class T>
531 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE)
532 class OF_ListRemoveIfClass
537 void OF_ListRemoveIf(
OFList<T>& c, Predicate pred)
541 while (first != last)
544 first = c.
erase(first);
550 #if defined(HAVE_STATIC_TEMPLATE_METHOD) && !defined(HAVE_FUNCTION_TEMPLATE)
554 #define OFListIterator(x) OFIterator< x >
555 #define OFListConstIterator(x) OFIterator< x >
OFBool operator==(const OFIterator< T > &x) const
comparison of two iterators.
OFList(const OFList< T > &oldList)
copy constructor
OFListLinkBase * node
list node referenced by the iterator
OFIterator< T > erase(OFIterator< T > position)
removes the element at the given position from the list.
T & operator*() const
dereferences the iterator.
void splice(OFIterator< T > position, OFList< T > &x)
moves the contents of list x into the current list before the given position.
OFBool empty() const
returns true if list is empty.
void clear()
removes all elements from the list.
double linked list template class.
OFIterator< T > end() const
returns an iterator which points to the past-to-end element of the list.
OFIterator< T > erase(OFIterator< T > position, OFIterator< T > last)
removes all elements in the range [position,last) from the list.
size_t size() const
returns number of elements in the list.
OFList< T > & operator=(const OFList< T > &arg)
private undefined copy assignment operator
OFIterator(OFListLinkBase *x)
constructor.
OFIterator< T > operator--(int)
moves the iterator to the previous element of the list.
OFIterator< T > & operator++()
moves the iterator to the next element of the list.
OFList()
default constructor
void splice(OFIterator< T > position, OFList< T > &x, OFIterator< T > i)
inserts one element from list x into the current list and removes it from x
T * operator->() const
dereferences the iterator.
void pop_front()
removes the first element of the list.
OFIterator< T > & operator--()
moves the iterator to the previous element of the list.
OFIterator< T > begin() const
returns an iterator referencing the first element in the list.
OFIterator< T > operator++(int)
moves the iterator to the next element of the list.
T & back()
returns a reference to the last element in the list.
void insert(OFIterator< T > position, size_t n, const T &x)
inserts n elements with value x into the list, before the given position.
OFBool operator!=(const OFIterator< T > &x) const
comparison of two iterators.
T & front()
returns a reference to the first element in the list.
void recalcListSize()
counts the elements in the list and adjusts the listSize member variable.
OFIterator()
default constructor.
void copy(const OFList< T > &oldList)
inserts a copy of the given list into the current list.
OFIterator(const OFIterator< T > &x)
copy constructor
void splice(OFIterator< T > position, OFList< T > &x, OFIterator< T > first, OFIterator< T > last)
inserts elements in the range [first, last) before position and removes the elements from x ...
void pop_back()
removes the last element of the list.
iterator class for OFList.
OFIterator< T > insert(OFIterator< T > position, const T &x)
inserts an element into the list before the given position.
void push_front(const T &x)
inserts before the first element of the list.
OFIterator< T > & operator=(const OFIterator< T > &x)
copy assignment operator
void push_back(const T &x)
inserts after the last element of the list.