00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: atomIterator.h,v 1.21 2005/10/23 12:02:17 oliver Exp $ 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 } // namespace BALL 00096 00097 #endif // BALL_KERNEL_ATOMITERATOR_H 00098