00001 00008 #ifndef __INTFUNITERATOR_H 00009 #define __INTFUNITERATOR_H 00010 00011 #include "jbltools/sfh/IntFun.h" 00012 00013 #include <Rtypes.h> // declares Float_t 00014 #include <TTree.h> 00015 #include <TBranch.h> 00016 #include <cassert> 00017 00018 // Class IntFunIterator 00020 00033 class IntFunIterator: public FillIterator { 00034 public: 00036 IntFunIterator (const IntFun& intFun_ 00037 ) 00038 : FillIterator (std::string(intFun_.getName())+"_iterator"), 00039 intFun (intFun_), 00040 index (0) 00041 { 00042 assert (&intFun); 00043 assert (!intFun.getIterator()); 00044 } 00045 IntFunIterator (const IntFun& intFun_, 00046 const std::string& name_ 00047 ) 00048 : FillIterator (name_), 00049 intFun (intFun_), 00050 index (0) 00051 { 00052 assert (&intFun); 00053 assert (!intFun.getIterator()); 00054 } 00055 00057 virtual int operator() () const { 00058 return (index < intFun()) ? index : -1; 00059 } 00060 00062 virtual bool next() { 00063 return (++index < intFun()); 00064 } 00065 00067 virtual bool reset() { 00068 index = 0; 00069 return (intFun() > 0); 00070 } 00071 00073 virtual bool isValid() const { 00074 return (index >= 0) && (index < intFun()); 00075 } 00076 00077 protected: 00079 virtual ~IntFunIterator() {} 00080 00081 // Data members 00082 const IntFun& intFun; 00083 int index; 00084 }; 00085 00086 00087 #endif /* #ifndef __INTFUNITERATOR_H */