00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_KERNEL_CHAINITERATOR_H
00008 #define BALL_KERNEL_CHAINITERATOR_H
00009
00010 #ifndef BALL_KERNEL_CHAIN_H
00011 # include <BALL/KERNEL/chain.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 {
00029 class BALL_EXPORT ChainIteratorTraits
00030 : public CompositeIteratorTraits
00031 {
00032
00033 public:
00034
00035 inline ChainIteratorTraits();
00036
00037 ChainIteratorTraits(const Composite& composite);
00038
00039 inline ChainIteratorTraits(const ChainIteratorTraits& traits);
00040
00041 ChainIteratorTraits& operator = (const ChainIteratorTraits& traits);
00042
00043 void resetPredicate();
00044 };
00045
00046 inline ChainIteratorTraits::ChainIteratorTraits()
00047 : CompositeIteratorTraits()
00048 {
00049 predicate_ = &RTTI::getDefault<KernelPredicate<Chain> >();
00050 }
00051
00052 inline ChainIteratorTraits::ChainIteratorTraits(const Composite& composite)
00053 : CompositeIteratorTraits(composite)
00054 {
00055 predicate_ = &RTTI::getDefault<KernelPredicate<Chain> >();
00056 }
00057
00058 inline ChainIteratorTraits::ChainIteratorTraits(const ChainIteratorTraits& traits)
00059 : CompositeIteratorTraits(traits)
00060 {
00061 }
00062
00063 inline ChainIteratorTraits& ChainIteratorTraits::operator = (const ChainIteratorTraits& traits)
00064 {
00065 CompositeIteratorTraits::operator=(traits);
00066 return *this;
00067 }
00068
00069 inline void ChainIteratorTraits::resetPredicate()
00070 {
00071 predicate_ = &RTTI::getDefault<KernelPredicate<Chain> >();
00072 }
00073
00078
00080 typedef BidirectionalIterator<Composite, Chain, Composite::CompositeIterator, ChainIteratorTraits>
00081 ChainIterator;
00082
00084 typedef ConstBidirectionalIterator<Composite, Chain, Composite::CompositeIterator, ChainIteratorTraits>
00085 ChainConstIterator;
00086
00088 typedef std::reverse_iterator<ChainIterator> ChainReverseIterator;
00089
00091 typedef std::reverse_iterator<ChainConstIterator> ChainConstReverseIterator;
00093 }
00094
00095 #endif // BALL_KERNEL_CHAINITERATOR_H
00096