[Scummvm-git-logs] scummvm master -> b1ee674243382add7fd26b9764837ac30f705508

elasota noreply at scummvm.org
Fri May 24 18:56:12 UTC 2024


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:
b1ee674243 MTROPOLIS: Add copy ctor to MediaCueMessengerModifier to deal with cue source string field


Commit: b1ee674243382add7fd26b9764837ac30f705508
    https://github.com/scummvm/scummvm/commit/b1ee674243382add7fd26b9764837ac30f705508
Author: elasota (1137273+elasota at users.noreply.github.com)
Date: 2024-05-24T14:55:51-04:00

Commit Message:
MTROPOLIS: Add copy ctor to MediaCueMessengerModifier to deal with cue source string field

Changed paths:
    engines/mtropolis/plugin/standard.cpp
    engines/mtropolis/plugin/standard.h


diff --git a/engines/mtropolis/plugin/standard.cpp b/engines/mtropolis/plugin/standard.cpp
index 7eae9f42036..7dc6698b708 100644
--- a/engines/mtropolis/plugin/standard.cpp
+++ b/engines/mtropolis/plugin/standard.cpp
@@ -236,6 +236,33 @@ MediaCueMessengerModifier::MediaCueMessengerModifier() : _isActive(false), _cueS
 	_mediaCue.sourceModifier = this;
 }
 
+MediaCueMessengerModifier::MediaCueMessengerModifier(const MediaCueMessengerModifier &other)
+	: _cueSourceType(other._cueSourceType), _cueSourceModifier(other._cueSourceModifier), _enableWhen(other._enableWhen), _disableWhen(other._disableWhen), _mediaCue(other._mediaCue), _isActive(other._isActive) {
+	_cueSource.destruct<uint64, &CueSourceUnion::asUnset>();
+
+	switch (_cueSourceType) {
+	case kCueSourceInteger:
+		_cueSource.construct<int32, &CueSourceUnion::asInt>(other._cueSource.asInt);
+		break;
+	case kCueSourceIntegerRange:
+		_cueSource.construct<IntRange, &CueSourceUnion::asIntRange>(other._cueSource.asIntRange);
+		break;
+	case kCueSourceVariableReference:
+		_cueSource.construct<uint32, &CueSourceUnion::asVarRefGUID>(other._cueSource.asVarRefGUID);
+		break;
+	case kCueSourceLabel:
+		_cueSource.construct<Label, &CueSourceUnion::asLabel>(other._cueSource.asLabel);
+		break;
+	case kCueSourceString:
+		_cueSource.construct<Common::String, &CueSourceUnion::asString>(other._cueSource.asString);
+		break;
+	default:
+		_cueSource.construct<uint64, &CueSourceUnion::asUnset>(0);
+		break;
+	}
+}
+
+
 MediaCueMessengerModifier::~MediaCueMessengerModifier() {
 	switch (_cueSourceType) {
 	case kCueSourceInteger:
@@ -251,7 +278,7 @@ MediaCueMessengerModifier::~MediaCueMessengerModifier() {
 		_cueSource.destruct<Label, &CueSourceUnion::asLabel>();
 		break;
 	case kCueSourceString:
-		// No destruct necessary, string is not in union
+		_cueSource.destruct<Common::String, &CueSourceUnion::asString>();
 		break;
 	default:
 		_cueSource.destruct<uint64, &CueSourceUnion::asUnset>();
diff --git a/engines/mtropolis/plugin/standard.h b/engines/mtropolis/plugin/standard.h
index 2710c26539d..e7b7bd4456b 100644
--- a/engines/mtropolis/plugin/standard.h
+++ b/engines/mtropolis/plugin/standard.h
@@ -129,26 +129,26 @@ private:
 		kCueSourceInvalid = -1,
 	};
 
-	struct CueSourceUnion {
+	union CueSourceUnion {
 		CueSourceUnion();
 		~CueSourceUnion();
 
-		union {
-			int32 asInt;
-			IntRange asIntRange;
-			uint32 asVarRefGUID;
-			Label asLabel;
-			uint64 asUnset;
-		};
-		Common::String asString;	//String object in the union would prevent copyability
+		int32 asInt;
+		IntRange asIntRange;
+		uint32 asVarRefGUID;
+		Label asLabel;
+		uint64 asUnset;
+		Common::String asString;
 
 		template<class T, T (CueSourceUnion::*TMember)>
 		void construct(const T &value);
 
-		template<class T, T (CueSourceUnion::*TMember)>
+		template<class T, T(CueSourceUnion::*TMember)>
 		void destruct();
 	};
 
+	MediaCueMessengerModifier(const MediaCueMessengerModifier &other);
+
 	Common::SharedPtr<Modifier> shallowClone() const override;
 	const char *getDefaultName() const override;
 




More information about the Scummvm-git-logs mailing list