diff --git a/src/command_aux.h b/src/command_aux.h index e9a3749a4d..924f9a2187 100644 --- a/src/command_aux.h +++ b/src/command_aux.h @@ -60,14 +60,14 @@ struct CommandAuxiliarySerialised : public CommandAuxiliaryBase { return new CommandAuxiliarySerialised(*this); } - virtual const std::vector *GetDeserialisationSrc() const override { return &(this->serialised_data); } + virtual opt::optional> GetDeserialisationSrc() const override { return span(this->serialised_data.data(), this->serialised_data.size()); } virtual void Serialise(CommandSerialisationBuffer &buffer) const override { buffer.Send_binary((const char *)this->serialised_data.data(), this->serialised_data.size()); } }; template struct CommandAuxiliarySerialisable : public CommandAuxiliaryBase { - virtual const std::vector *GetDeserialisationSrc() const override { return nullptr; } + virtual opt::optional> GetDeserialisationSrc() const override { return {}; } CommandAuxiliaryBase *Clone() const { @@ -85,10 +85,10 @@ struct CommandAuxData { inline CommandCost Load(const CommandAuxiliaryBase *base) { if (base == nullptr) return CMD_ERROR; - const std::vector *deserialise_from = base->GetDeserialisationSrc(); - if (deserialise_from != nullptr) { + opt::optional> deserialise_from = base->GetDeserialisationSrc(); + if (deserialise_from.has_value()) { this->store = T(); - CommandDeserialisationBuffer buffer(deserialise_from->data(), deserialise_from->size()); + CommandDeserialisationBuffer buffer(deserialise_from->begin(), deserialise_from->size()); CommandCost res = this->store->Deserialise(buffer); if (res.Failed()) return res; if (buffer.error || buffer.pos != buffer.size) { diff --git a/src/command_type.h b/src/command_type.h index eeece35065..868eabe19c 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -13,6 +13,8 @@ #include "economy_type.h" #include "strings_type.h" #include "tile_type.h" +#include "core/span_type.hpp" +#include "3rdparty/optional/ottd_optional.h" #include struct GRFFile; @@ -697,7 +699,7 @@ struct CommandAuxiliaryBase { virtual CommandAuxiliaryBase *Clone() const = 0; - virtual const std::vector *GetDeserialisationSrc() const = 0; + virtual opt::optional> GetDeserialisationSrc() const = 0; virtual void Serialise(CommandSerialisationBuffer &buffer) const = 0; };