atomIterator.h

Go to the documentation of this file.
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