[Scummvm-git-logs] scummvm master -> d260b1e9e6cce034f41055f40277aeee0674555c
djsrv
dservilla at gmail.com
Mon Aug 30 23:08:18 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d260b1e9e6 DIRECTOR: LINGO: Add overloaded operators for Datum structs
Commit: d260b1e9e6cce034f41055f40277aeee0674555c
https://github.com/scummvm/scummvm/commit/d260b1e9e6cce034f41055f40277aeee0674555c
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-08-30T19:08:15-04:00
Commit Message:
DIRECTOR: LINGO: Add overloaded operators for Datum structs
Changed paths:
engines/director/cursor.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index 800efc78ae..161fa9b4ba 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -48,12 +48,12 @@ CursorRef Cursor::getRef() {
bool Cursor::operator==(const Cursor &c) {
return _cursorType == c._cursorType &&
- c._cursorResId.equalTo(_cursorResId);
+ c._cursorResId == _cursorResId;
}
bool Cursor::operator==(const CursorRef &c) {
return _cursorType == c._cursorType &&
- c._cursorResId.equalTo(_cursorResId);
+ c._cursorResId == _cursorResId;
}
void Cursor::readFromCast(Datum cursorCasts) {
@@ -61,7 +61,7 @@ void Cursor::readFromCast(Datum cursorCasts) {
warning("Cursor::readFromCast: Needs array of 2");
return;
}
- if (_cursorResId.equalTo(cursorCasts))
+ if (_cursorResId == cursorCasts)
return;
CastMemberID cursorId = cursorCasts.u.farr->arr[0].asMemberID();
@@ -156,7 +156,7 @@ void Cursor::readBuiltinType(Datum resourceId) {
}
void Cursor::readFromResource(Datum resourceId) {
- if (resourceId.equalTo(_cursorResId))
+ if (resourceId == _cursorResId)
return;
if (resourceId.type != INT) {
@@ -241,12 +241,12 @@ CursorRef::CursorRef() {
bool CursorRef::operator==(const Cursor &c) {
return _cursorType == c._cursorType &&
- c._cursorResId.equalTo(_cursorResId);
+ c._cursorResId == _cursorResId;
}
bool CursorRef::operator==(const CursorRef &c) {
return _cursorType == c._cursorType &&
- c._cursorResId.equalTo(_cursorResId);
+ c._cursorResId == _cursorResId;
}
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 059c0263b6..633154b5a7 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -886,7 +886,7 @@ void LB::b_max(int nargs) {
uint arrsize = d.u.farr->arr.size();
for (uint i = 0; i < arrsize; i++) {
Datum item = d.u.farr->arr[i];
- if (i == 0 || item.compareTo(max) == kCompareGreater) {
+ if (i == 0 || item > max) {
max = item;
}
}
@@ -899,7 +899,7 @@ void LB::b_max(int nargs) {
if (d.type == ARRAY) {
warning("b_max: undefined behavior: array mixed with other args");
}
- if (i == 0 || d.compareTo(max) == kCompareGreater) {
+ if (i == 0 || d > max) {
max = d;
}
}
@@ -919,7 +919,7 @@ void LB::b_min(int nargs) {
uint arrsize = d.u.farr->arr.size();
for (uint i = 0; i < arrsize; i++) {
Datum item = d.u.farr->arr[i];
- if (i == 0 || item.compareTo(min) == kCompareLess) {
+ if (i == 0 || item < min) {
min = item;
}
}
@@ -932,7 +932,7 @@ void LB::b_min(int nargs) {
if (d.type == ARRAY) {
warning("b_min: undefined behavior: array mixed with other args");
}
- if (i == 0 || d.compareTo(min) == kCompareLess) {
+ if (i == 0 || d < min) {
min = d;
}
}
@@ -2679,7 +2679,7 @@ void LB::b_scummvmassertequal(int nargs) {
Datum d2 = g_lingo->pop();
Datum d1 = g_lingo->pop();
- int result = d1.equalTo(d2);
+ int result = (d1 == d2);
if (!result) {
warning("LB::b_scummvmassertequals: %s is not equal %s at line %d", d1.asString().c_str(), d2.asString().c_str(), line.asInt());
}
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 2b4b42df34..8d73f21592 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1302,7 +1302,7 @@ Datum LC::gtData(Datum d1, Datum d2) {
d1.type == PARRAY || d2.type == PARRAY) {
return LC::compareArrays(LC::gtData, d1, d2, false, true);
}
- d1.u.i = (d1.compareTo(d2) == kCompareGreater) ? 1 : 0;
+ d1.u.i = d1 > d2 ? 1 : 0;
d1.type = INT;
return d1;
}
@@ -1318,7 +1318,7 @@ Datum LC::ltData(Datum d1, Datum d2) {
d1.type == PARRAY || d2.type == PARRAY) {
return LC::compareArrays(LC::ltData, d1, d2, false, true);
}
- d1.u.i = (d1.compareTo(d2) == kCompareLess) ? 1 : 0;
+ d1.u.i = d1 < d2 ? 1 : 0;
d1.type = INT;
return d1;
}
@@ -1334,8 +1334,7 @@ Datum LC::geData(Datum d1, Datum d2) {
d1.type == PARRAY || d2.type == PARRAY) {
return LC::compareArrays(LC::geData, d1, d2, false, true);
}
- CompareResult res = d1.compareTo(d2);
- d1.u.i = (res == kCompareGreater || res == kCompareEqual) ? 1 : 0;
+ d1.u.i = d1 >= d2 ? 1 : 0;
d1.type = INT;
return d1;
}
@@ -1351,8 +1350,7 @@ Datum LC::leData(Datum d1, Datum d2) {
d1.type == PARRAY || d2.type == PARRAY) {
return LC::compareArrays(LC::leData, d1, d2, false, true);
}
- CompareResult res = d1.compareTo(d2);
- d1.u.i = (res == kCompareLess || res == kCompareEqual) ? 1 : 0;
+ d1.u.i = d1 <= d2 ? 1 : 0;
d1.type = INT;
return d1;
}
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index a817d2db7d..b741d1b61d 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1006,6 +1006,28 @@ int Datum::equalTo(Datum &d, bool ignoreCase) const {
return 0;
}
+bool Datum::operator==(Datum &d) const {
+ return equalTo(d);
+}
+
+bool Datum::operator>(Datum &d) const {
+ return compareTo(d) == kCompareGreater;
+}
+
+bool Datum::operator<(Datum &d) const {
+ return compareTo(d) == kCompareLess;
+}
+
+bool Datum::operator>=(Datum &d) const {
+ CompareResult res = compareTo(d);
+ return res == kCompareGreater || res == kCompareEqual;
+}
+
+bool Datum::operator<=(Datum &d) const {
+ CompareResult res = compareTo(d);
+ return res == kCompareLess || res == kCompareEqual;
+}
+
CompareResult Datum::compareTo(Datum &d) const {
int alignType = g_lingo->getAlignedType(*this, d, false);
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 6319b8471a..04e4ca4ea1 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -175,6 +175,12 @@ struct Datum { /* interpreter stack type */
int equalTo(Datum &d, bool ignoreCase = false) const;
CompareResult compareTo(Datum &d) const;
+
+ bool operator==(Datum &d) const;
+ bool operator>(Datum &d) const;
+ bool operator<(Datum &d) const;
+ bool operator>=(Datum &d) const;
+ bool operator<=(Datum &d) const;
};
struct ChunkReference {
More information about the Scummvm-git-logs
mailing list