Use optional span for return type of CommandAuxiliaryBase::GetDeserialisationSrc

pull/461/head
Jonathan G Rennison 1 year ago
parent ab95e8e5ed
commit 3412e43608

@ -60,14 +60,14 @@ struct CommandAuxiliarySerialised : public CommandAuxiliaryBase {
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()); }
};
template <typename T>
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
{
@ -85,10 +85,10 @@ struct CommandAuxData {
inline CommandCost Load(const CommandAuxiliaryBase *base)
{
if (base == nullptr) return CMD_ERROR;
const std::vector<uint8> *deserialise_from = base->GetDeserialisationSrc();
if (deserialise_from != nullptr) {
opt::optional<span<const uint8>> 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) {

@ -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 <string>
struct GRFFile;
@ -697,7 +699,7 @@ struct CommandAuxiliaryBase {
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;
};

Loading…
Cancel
Save