aboutsummaryrefslogtreecommitdiff
path: root/engines/sword25/kernel/inputpersistenceblock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sword25/kernel/inputpersistenceblock.cpp')
-rw-r--r--engines/sword25/kernel/inputpersistenceblock.cpp33
1 files changed, 14 insertions, 19 deletions
diff --git a/engines/sword25/kernel/inputpersistenceblock.cpp b/engines/sword25/kernel/inputpersistenceblock.cpp
index c1cd771e39..cdce539c31 100644
--- a/engines/sword25/kernel/inputpersistenceblock.cpp
+++ b/engines/sword25/kernel/inputpersistenceblock.cpp
@@ -35,9 +35,10 @@
namespace Sword25 {
-InputPersistenceBlock::InputPersistenceBlock(const void *data, uint dataLength) :
+InputPersistenceBlock::InputPersistenceBlock(const void *data, uint dataLength, int version) :
_data(static_cast<const byte *>(data), dataLength),
- _errorState(NONE) {
+ _errorState(NONE),
+ _version(version) {
_iter = _data.begin();
}
@@ -54,8 +55,8 @@ void InputPersistenceBlock::read(int16 &value) {
void InputPersistenceBlock::read(signed int &value) {
if (checkMarker(SINT_MARKER)) {
- rawRead(&value, sizeof(signed int));
- value = convertEndianessFromStorageToSystem(value);
+ value = (int32)READ_LE_UINT32(_iter);
+ _iter += 4;
} else {
value = 0;
}
@@ -63,8 +64,8 @@ void InputPersistenceBlock::read(signed int &value) {
void InputPersistenceBlock::read(uint &value) {
if (checkMarker(UINT_MARKER)) {
- rawRead(&value, sizeof(uint));
- value = convertEndianessFromStorageToSystem(value);
+ value = READ_LE_UINT32(_iter);
+ _iter += 4;
} else {
value = 0;
}
@@ -72,8 +73,10 @@ void InputPersistenceBlock::read(uint &value) {
void InputPersistenceBlock::read(float &value) {
if (checkMarker(FLOAT_MARKER)) {
- rawRead(&value, sizeof(float));
- value = convertEndianessFromStorageToSystem(value);
+ uint32 tmp[1];
+ tmp[0] = READ_LE_UINT32(_iter);
+ value = ((float *)tmp)[0];
+ _iter += 4;
} else {
value = 0.0f;
}
@@ -81,12 +84,11 @@ void InputPersistenceBlock::read(float &value) {
void InputPersistenceBlock::read(bool &value) {
if (checkMarker(BOOL_MARKER)) {
- uint uintBool;
- rawRead(&uintBool, sizeof(float));
- uintBool = convertEndianessFromStorageToSystem(uintBool);
+ uint uintBool = READ_LE_UINT32(_iter);
+ _iter += 4;
value = uintBool == 0 ? false : true;
} else {
- value = 0.0f;
+ value = false;
}
}
@@ -116,13 +118,6 @@ void InputPersistenceBlock::readByteArray(Common::Array<byte> &value) {
}
}
-void InputPersistenceBlock::rawRead(void *destPtr, size_t size) {
- if (checkBlockSize(size)) {
- memcpy(destPtr, &*_iter, size);
- _iter += size;
- }
-}
-
bool InputPersistenceBlock::checkBlockSize(int size) {
if (_data.end() - _iter >= size) {
return true;