aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/stream.cpp25
-rw-r--r--common/stream.h2
2 files changed, 27 insertions, 0 deletions
diff --git a/common/stream.cpp b/common/stream.cpp
index 6737eafc9c..204efd79b9 100644
--- a/common/stream.cpp
+++ b/common/stream.cpp
@@ -303,4 +303,29 @@ bool BufferedSeekableReadStream::seek(int32 offset, int whence) {
return true; // FIXME: STREAM REWRITE
}
+bool MemoryWriteStreamDynamic::seek(int32 offs, int whence) {
+ // Pre-Condition
+ assert(_pos <= _size);
+ switch (whence) {
+ case SEEK_END:
+ // SEEK_END works just like SEEK_SET, only 'reversed',
+ // i.e. from the end.
+ offs = _size + offs;
+ // Fall through
+ case SEEK_SET:
+ _ptr = _data + offs;
+ _pos = offs;
+ break;
+
+ case SEEK_CUR:
+ _ptr += offs;
+ _pos += offs;
+ break;
+ }
+ // Post-Condition
+ assert(_pos <= _size);
+
+ return true; // FIXME: STREAM REWRITE
+}
+
} // End of namespace Common
diff --git a/common/stream.h b/common/stream.h
index 11041fa3ce..5e0d7149b0 100644
--- a/common/stream.h
+++ b/common/stream.h
@@ -687,6 +687,8 @@ public:
uint32 size() const { return _size; }
byte *getData() { return _data; }
+
+ bool seek(int32 offset, int whence = SEEK_SET);
};
} // End of namespace Common