Use optional span for return type of CommandAuxiliaryBase::GetDeserialisationSrc

This commit is contained in:
Jonathan G Rennison
2022-12-11 15:27:48 +00:00
parent ab95e8e5ed
commit 3412e43608
2 changed files with 8 additions and 6 deletions

View File

@@ -60,14 +60,14 @@ struct CommandAuxiliarySerialised : public CommandAuxiliaryBase {
return new CommandAuxiliarySerialised(*this); return new CommandAuxiliarySerialised(*this);
} }
virtual const std::vector<uint8> *GetDeserialisationSrc() const override { return &(this->serialised_data); } virtual opt::optional<span<const uint8>> GetDeserialisationSrc() const override { return span<const uint8>(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()); } virtual void Serialise(CommandSerialisationBuffer &buffer) const override { buffer.Send_binary((const char *)this->serialised_data.data(), this->serialised_data.size()); }
}; };
template <typename T> template <typename T>
struct CommandAuxiliarySerialisable : public CommandAuxiliaryBase { struct CommandAuxiliarySerialisable : public CommandAuxiliaryBase {
virtual const std::vector<uint8> *GetDeserialisationSrc() const override { return nullptr; } virtual opt::optional<span<const uint8>> GetDeserialisationSrc() const override { return {}; }
CommandAuxiliaryBase *Clone() const CommandAuxiliaryBase *Clone() const
{ {
@@ -85,10 +85,10 @@ struct CommandAuxData {
inline CommandCost Load(const CommandAuxiliaryBase *base) inline CommandCost Load(const CommandAuxiliaryBase *base)
{ {
if (base == nullptr) return CMD_ERROR; if (base == nullptr) return CMD_ERROR;
const std::vector<uint8> *deserialise_from = base->GetDeserialisationSrc(); opt::optional<span<const uint8>> deserialise_from = base->GetDeserialisationSrc();
if (deserialise_from != nullptr) { if (deserialise_from.has_value()) {
this->store = T(); 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); CommandCost res = this->store->Deserialise(buffer);
if (res.Failed()) return res; if (res.Failed()) return res;
if (buffer.error || buffer.pos != buffer.size) { if (buffer.error || buffer.pos != buffer.size) {

View File

@@ -13,6 +13,8 @@
#include "economy_type.h" #include "economy_type.h"
#include "strings_type.h" #include "strings_type.h"
#include "tile_type.h" #include "tile_type.h"
#include "core/span_type.hpp"
#include "3rdparty/optional/ottd_optional.h"
#include <string> #include <string>
struct GRFFile; struct GRFFile;
@@ -697,7 +699,7 @@ struct CommandAuxiliaryBase {
virtual CommandAuxiliaryBase *Clone() const = 0; virtual CommandAuxiliaryBase *Clone() const = 0;
virtual const std::vector<uint8> *GetDeserialisationSrc() const = 0; virtual opt::optional<span<const uint8>> GetDeserialisationSrc() const = 0;
virtual void Serialise(CommandSerialisationBuffer &buffer) const = 0; virtual void Serialise(CommandSerialisationBuffer &buffer) const = 0;
}; };