Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

/users/u3/mtikir/PMaCInstrumentor_v1601/include/Iterator.h

Go to the documentation of this file.
00001 #ifndef _Iterator_h_
00002 #define _Iterator_h_
00003 
00004 #include <Base.h>
00005 
00006 class AddressIterator {
00007 protected:
00008     uint64_t baseAddress;
00009     uint64_t sizeInBytes;
00010     uint64_t currAddress;
00011     uint8_t  unitInBytes;
00012 
00013     inline AddressIterator(uint64_t base,uint64_t size,uint8_t unit) : 
00014             baseAddress(base),sizeInBytes(size),currAddress(base),unitInBytes(unit)
00015             {}
00016 
00017 public:
00018     virtual ~AddressIterator() {}
00019     bool hasMore() { 
00020         return ((baseAddress <= currAddress) && (currAddress < (baseAddress + sizeInBytes))); 
00021     }
00022     bool hasPrev() {
00023         return ((baseAddress < currAddress) && (currAddress <= (baseAddress + sizeInBytes))); 
00024     }
00025     inline void reset() { currAddress = baseAddress; }
00026     inline uint8_t unitSize() { return unitInBytes; }
00027     inline uint64_t operator*() { return currAddress; }
00028     uint64_t getOffset(){ return (currAddress-baseAddress); }
00029 
00030     uint64_t operator++();
00031     uint64_t operator--();
00032     uint64_t operator++(int n);
00033     uint64_t operator--(int n);
00034 
00035     void skip(uint64_t s) { currAddress += s; }
00036     void skipTo(uint64_t s) { currAddress = s; }
00037 
00038     static AddressIterator newAddressIteratorWord(uint64_t base,uint64_t size){
00039         return AddressIterator(base,size,sizeof(uint32_t));
00040     }
00041 
00042     static AddressIterator newAddressIteratorDouble(uint64_t base,uint64_t size){
00043         return AddressIterator(base,size,sizeof(uint64_t));
00044     }
00045 
00046     static AddressIterator invalidIterator(){
00047         return AddressIterator(0,0,0);
00048     }
00049 
00050     bool isInvalid() { return !unitInBytes; }
00051 
00052     uint64_t readBytes(char* ptr);
00053     void print() { PRINT_INFOR("AI : %#18llx - %6lld - %#18llx",baseAddress,sizeInBytes,currAddress); }
00054 
00055     uint8_t unit() { return unitInBytes; }
00056 
00057     bool isWord() { return (unitInBytes == sizeof(uint32_t)); }
00058     bool isDouble() { return (unitInBytes == sizeof(uint64_t)); }
00059 };
00060 
00061 #endif

Generated on Mon Jan 28 11:08:31 2008 for PMaCInstrumentor by doxygen 1.3.5