28 #ifndef __DataStream_H__
29 #define __DataStream_H__
41 template <
size_t cacheSize>
65 assert(
avail() == 0 &&
"It is assumed that you cache data only after you have read everything.");
67 if (count < cacheSize)
82 memcpy(
mBuffer + cacheSize - count, buf, count);
91 memcpy(
mBuffer, (
const char*)buf + count - cacheSize, cacheSize);
97 size_t read(
void* buf,
size_t count)
100 rb = (rb < count) ? rb : count;
121 bool ff(
size_t count)
192 #define OGRE_STREAM_TEMP_SIZE 128
198 : mName(name), mSize(0), mAccess(accessMode) {}
204 virtual bool isReadable()
const {
return (mAccess & READ) != 0; }
206 virtual bool isWriteable()
const {
return (mAccess & WRITE) != 0; }
209 template<
typename T>
DataStream& operator>>(T& val);
216 virtual size_t read(
void* buf,
size_t count) = 0;
223 virtual size_t write(
const void* buf,
size_t count)
245 virtual size_t readLine(
char* buf,
size_t maxCount,
const String& delim =
"\n");
261 virtual String getLine(
bool trimAfter =
true );
268 virtual String getAsString(
void);
277 virtual size_t skipLine(
const String& delim =
"\n");
281 virtual void skip(
long count) = 0;
285 virtual void seek(
size_t pos ) = 0;
288 virtual size_t tell(
void)
const = 0;
292 virtual bool eof(
void)
const = 0;
297 size_t size(
void)
const {
return mSize; }
300 virtual void close(
void) = 0;
340 MemoryDataStream(
void* pMem,
size_t size,
bool freeOnClose =
false,
bool readOnly =
false);
354 bool freeOnClose =
false,
bool readOnly =
false);
368 bool freeOnClose =
true,
bool readOnly =
false);
382 bool freeOnClose =
true,
bool readOnly =
false);
398 bool freeOnClose =
true,
bool readOnly =
false);
414 bool freeOnClose =
true,
bool readOnly =
false);
422 MemoryDataStream(
size_t size,
bool freeOnClose =
true,
bool readOnly =
false);
431 bool freeOnClose =
true,
bool readOnly =
false);
443 size_t read(
void* buf,
size_t count);
447 size_t write(
const void* buf,
size_t count);
451 size_t readLine(
char* buf,
size_t maxCount,
const String& delim =
"\n");
455 size_t skipLine(
const String& delim =
"\n");
459 void skip(
long count);
463 void seek(
size_t pos );
467 size_t tell(
void)
const;
471 bool eof(
void)
const;
500 void determineAccess();
508 bool freeOnClose =
true);
515 bool freeOnClose =
true);
525 bool freeOnClose =
true);
535 bool freeOnClose =
true);
554 bool freeOnClose =
true);
573 bool freeOnClose =
true);
579 size_t read(
void* buf,
size_t count);
583 size_t write(
const void* buf,
size_t count);
587 size_t readLine(
char* buf,
size_t maxCount,
const String& delim =
"\n");
591 void skip(
long count);
595 void seek(
size_t pos );
599 size_t tell(
void)
const;
603 bool eof(
void)
const;
634 size_t read(
void* buf,
size_t count);
638 size_t write(
const void* buf,
size_t count);
642 void skip(
long count);
646 void seek(
size_t pos );
650 size_t tell(
void)
const;
654 bool eof(
void)
const;