00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: moleculeIterator.h,v 1.16 2005/10/23 12:02:19 oliver Exp $ 00005 // 00006 00007 #ifndef BALL_KERNEL_MOLECULEITERATOR_H 00008 #define BALL_KERNEL_MOLECULEITERATOR_H 00009 00010 #ifndef BALL_KERNEL_ITERATOR_H 00011 # include <BALL/KERNEL/iterator.h> 00012 #endif 00013 00014 #ifndef BALL_KERNEL_PREDICATE_H 00015 # include <BALL/KERNEL/predicate.h> 00016 #endif 00017 00018 namespace BALL 00019 { 00023 class BALL_EXPORT MoleculeIteratorTraits 00024 : public CompositeIteratorTraits 00025 { 00026 public: 00027 00028 MoleculeIteratorTraits() 00029 : CompositeIteratorTraits() 00030 { 00031 predicate_ = &RTTI::getDefault<KernelPredicate<Molecule> >(); 00032 } 00033 00034 MoleculeIteratorTraits(const Composite& composite) 00035 : CompositeIteratorTraits(composite) 00036 { 00037 predicate_ = &RTTI::getDefault<KernelPredicate<Molecule> >(); 00038 } 00039 00040 MoleculeIteratorTraits(const MoleculeIteratorTraits& traits, bool /* deep */ = true) 00041 : CompositeIteratorTraits(traits) 00042 { 00043 } 00044 00045 MoleculeIteratorTraits &operator = (const MoleculeIteratorTraits& traits) 00046 { 00047 CompositeIteratorTraits::operator=(traits); 00048 return *this; 00049 } 00050 00051 void resetPredicate() 00052 { 00053 predicate_ = &RTTI::getDefault<KernelPredicate<Molecule> >(); 00054 } 00055 }; 00056 00057 00059 typedef BidirectionalIterator 00060 <Composite, Molecule, Composite::CompositeIterator, MoleculeIteratorTraits> 00061 MoleculeIterator; 00062 00064 typedef ConstBidirectionalIterator 00065 <Composite, Molecule, Composite::CompositeIterator, MoleculeIteratorTraits> 00066 MoleculeConstIterator; 00067 00069 typedef std::reverse_iterator<MoleculeIterator> MoleculeReverseIterator; 00070 00072 typedef std::reverse_iterator<MoleculeConstIterator> MoleculeConstReverseIterator; 00073 00074 } // namespace BALL 00075 00076 #endif // BALL_KERNEL_MOLECULEITERATOR_H