From e8248cf1136cbb82f88807f68b53473aa8eb1682 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 13 Jun 2010 14:12:21 +0000 Subject: (svn r19974) -Add: SlSkipArray() to skip arrays and sparse arrays in savegames. --- src/saveload/saveload.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'src/saveload') diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 4f48080c2..21e6861a2 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -373,6 +373,15 @@ static inline void SlWriteUint64(uint64 x) SlWriteUint32((uint32)x); } +/** Read in bytes from the file/data structure but don't do + * anything with them, discarding them in effect + * @param length The amount of bytes that is being treated this way + */ +static inline void SlSkipBytes(size_t length) +{ + for (; length != 0; length--) SlReadByte(); +} + /** * Read in the header descriptor of an object or an array. * If the highest bit is set (7), then the index is bigger than 127 @@ -488,6 +497,16 @@ int SlIterateArray() } } +/** + * Skip an array or sparse array + */ +void SlSkipArray() +{ + while (SlIterateArray() != -1) { + SlSkipBytes(_next_offs - SlGetOffs()); + } +} + /** * Sets the length of either a RIFF object or the number of items in an array. * This lets us load an object or an array of arbitrary size @@ -551,15 +570,6 @@ static void SlCopyBytes(void *ptr, size_t length) } } -/** Read in bytes from the file/data structure but don't do - * anything with them, discarding them in effect - * @param length The amount of bytes that is being treated this way - */ -static inline void SlSkipBytes(size_t length) -{ - for (; length != 0; length--) SlReadByte(); -} - /* Get the length of the current object */ size_t SlGetFieldLength() {return _sl.obj_len;} -- cgit v1.2.3-70-g09d2