00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_KERNEL_ATOMITERATOR_H
00008 #define BALL_KERNEL_ATOMITERATOR_H
00009
00010 #ifndef BALL_KERNEL_ATOM_H
00011 # include <BALL/KERNEL/atom.h>
00012 #endif
00013
00014 #ifndef BALL_KERNEL_ITERATOR_H
00015 # include <BALL/KERNEL/iterator.h>
00016 #endif
00017
00018 #ifndef BALL_KERNEL_PREDICATE_H
00019 # include <BALL/KERNEL/predicate.h>
00020 #endif
00021
00022 namespace BALL
00023 {
00028 class BALL_EXPORT AtomIteratorTraits
00029 : public CompositeIteratorTraits
00030 {
00031 public:
00032
00033 inline AtomIteratorTraits()
00034 : CompositeIteratorTraits()
00035 {
00036 predicate_ = &RTTI::getDefault<KernelPredicate<Atom> >();
00037 }
00038
00039 inline AtomIteratorTraits(const AtomIteratorTraits& traits)
00040
00041 : CompositeIteratorTraits(traits)
00042 {
00043 }
00044
00045 AtomIteratorTraits(const Composite& composite);
00046
00047 AtomIteratorTraits& operator = (const AtomIteratorTraits& traits);
00048
00049 void resetPredicate();
00050 };
00051
00052
00053 inline AtomIteratorTraits::AtomIteratorTraits(const Composite& composite)
00054 : CompositeIteratorTraits(composite)
00055 {
00056 predicate_ = &RTTI::getDefault<KernelPredicate<Atom> >();
00057 }
00058
00059 inline AtomIteratorTraits& AtomIteratorTraits::operator = (const AtomIteratorTraits& traits)
00060 {
00061 CompositeIteratorTraits::operator = (traits);
00062 return *this;
00063 }
00064
00065 inline void AtomIteratorTraits::resetPredicate()
00066 {
00067 predicate_ = &RTTI::getDefault<KernelPredicate<Atom> >();
00068 }
00069
00070
00075
00078 typedef BidirectionalIterator
00079 <Composite, Atom, Composite::CompositeIterator, AtomIteratorTraits>
00080 AtomIterator;
00081
00084 typedef ConstBidirectionalIterator
00085 <Composite, Atom, Composite::CompositeIterator, AtomIteratorTraits>
00086 AtomConstIterator;
00087
00089 typedef std::reverse_iterator<AtomIterator> AtomReverseIterator;
00090
00092 typedef std::reverse_iterator<AtomConstIterator> AtomConstReverseIterator;
00093
00095 }
00096
00097 #endif // BALL_KERNEL_ATOMITERATOR_H
00098