aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorEugene Sandulenko2010-06-15 10:34:14 +0000
committerEugene Sandulenko2010-06-15 10:34:14 +0000
commit024f49213781a34c9d18a9580589e088062cec33 (patch)
treef6b004de5c409591f834c5cff4d418c31f7b5db9 /common
parent38ef876d5beabb3f5e5d35690b5b14d6643e6aa3 (diff)
downloadscummvm-rg350-024f49213781a34c9d18a9580589e088062cec33.tar.gz
scummvm-rg350-024f49213781a34c9d18a9580589e088062cec33.tar.bz2
scummvm-rg350-024f49213781a34c9d18a9580589e088062cec33.zip
Added seek() method to MemoryWriteStreamDynamic.
If it deserves a separate class, shout. svn-id: r49750
Diffstat (limited to 'common')
-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