Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _ID3LIB_READER_H_
00029 #define _ID3LIB_READER_H_
00030
00031 #include "id3/globals.h"
00032
00033 class ID3_CPP_EXPORT ID3_Reader
00034 {
00035 public:
00036 typedef uint32 size_type;
00037 typedef uint8 char_type;
00038 typedef uint32 pos_type;
00039 typedef int32 off_type;
00040 typedef int16 int_type;
00041 static const int_type END_OF_READER;
00042
00045 virtual void close() = 0;
00046
00048 virtual pos_type getBeg() { return static_cast<pos_type>(0); }
00049
00051 virtual pos_type getEnd() { return static_cast<pos_type>(-1); }
00052
00054 virtual pos_type getCur() = 0;
00055
00058 virtual pos_type setCur(pos_type pos) = 0;
00059
00065 virtual int_type readChar()
00066 {
00067 if (this->atEnd())
00068 {
00069 return END_OF_READER;
00070 }
00071 char_type ch;
00072 this->readChars(&ch, 1);
00073 return ch;
00074 }
00075
00080 virtual int_type peekChar() = 0;
00081
00087 virtual size_type readChars(char_type buf[], size_type len) = 0;
00088 virtual size_type readChars(char buf[], size_type len)
00089 {
00090 return this->readChars(reinterpret_cast<char_type *>(buf), len);
00091 }
00092
00097 virtual size_type skipChars(size_type len)
00098 {
00099 const size_type SIZE = 1024;
00100 char_type bytes[SIZE];
00101 size_type remaining = len;
00102 while (!this->atEnd() && remaining > 0)
00103 {
00104 remaining -= this->readChars(bytes, (remaining < SIZE ? remaining : SIZE));
00105 }
00106 return len - remaining;
00107 }
00108
00109 virtual size_type remainingBytes()
00110 {
00111 pos_type end = this->getEnd(), cur = this->getCur();
00112 if (end == pos_type(-1))
00113 {
00114 return size_type(-1);
00115 }
00116
00117 if (end >= cur)
00118 {
00119 return end - cur;
00120 }
00121
00122 return 0;
00123 }
00124
00125 virtual bool atEnd() { return this->getCur() >= this->getEnd(); }
00126 };
00127
00128 #endif
00129