[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