[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