28 #ifndef _ID3LIB_IO_STRINGS_H_
29 #define _ID3LIB_IO_STRINGS_H_
31 #include "id3/id3lib_strings.h"
36 #define min(a,b) (((a) < (b)) ? (a) : (b))
45 const String& _string;
48 StringReader(
const String&
string) : _string(string), _cur(0) { ; }
66 return this->readChars((
char_type*) buf, len);
70 size_type size =
min((
unsigned int)len, (
unsigned int)(_string.size() - _cur));
71 _string.copy(reinterpret_cast<String::value_type *>(buf), size, _cur);
88 return _string.size();
96 _cur = (pos < end) ? pos : end;
102 return _cur >= _string.size();
107 size_type size =
min((
unsigned int)len, (
unsigned int)(_string.size() - _cur));
115 const BString& _string;
126 return _string[_cur];
128 return END_OF_READER;
136 return this->readChars((
char_type*) buf, len);
140 size_type size =
min((
unsigned int)len, (
unsigned int)(_string.size() - _cur));
141 _string.copy(reinterpret_cast<BString::value_type *>(buf), size, _cur);
146 virtual pos_type getCur()
151 virtual pos_type getBeg()
156 virtual pos_type getEnd()
158 return _string.size();
163 virtual pos_type setCur(pos_type pos)
165 pos_type end = this->getEnd();
166 _cur = (pos < end) ? pos : end;
172 return _cur >= _string.size();
177 size_type size =
min((
unsigned int)len,(
unsigned int)( _string.size() - _cur));
194 _string.append(reinterpret_cast<const String::value_type *>(buf), len);
199 _string.append(reinterpret_cast<const String::value_type *>(buf), len);
205 return _string.size();
220 _string.append(reinterpret_cast<const BString::value_type *>(buf), len);
225 _string.append(reinterpret_cast<const BString::value_type *>(buf), len);
231 return _string.size();