aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/stream.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/common/stream.h b/common/stream.h
index d30fa63a6d..3b6d7a8d34 100644
--- a/common/stream.h
+++ b/common/stream.h
@@ -143,6 +143,35 @@ public:
_size = _sizeOrig;
_pos = 0;
}
+
+ void seek(uint32 offs, int whence = SEEK_SET) {
+ switch (whence) {
+ case SEEK_SET:
+ rewind();
+ if (offs > _size)
+ offs = _size;
+ _size -= offs;
+ _ptr += offs;
+ _pos += offs;
+ break;
+
+ case SEEK_CUR:
+ _size -= offs;
+ _ptr += offs;
+ _pos += offs;
+ break;
+
+ case SEEK_END:
+ rewind();
+ if (offs > _size)
+ offs = 0;
+ offs = _size - offs;
+ _size -= offs;
+ _ptr += offs;
+ _pos += offs;
+ break;
+ }
+ }
};
} // End of namespace Common