git / moonbite-core / src/libmw/include/mw/common/Traits.h · raw
#pragma once// Copyright (c) 2018-2019 David Burkett// Distributed under the MIT software license, see the accompanying// file LICENSE or http://www.opensource.org/licenses/mit-license.php.#include <streams.h>#include <version.h>// Forward Declarationstemplate <size_t NUM_BYTES, class ALLOC>class BigInt;class Commitment;namespace mw { using Hash = BigInt<32, std::allocator<uint8_t>>;}#define IMPL_SERIALIZED(T) \ std::vector<uint8_t> Serialized() const noexcept final \ { \ std::vector<uint8_t> serialized; \ CVectorWriter stream(SER_NETWORK, PROTOCOL_VERSION, serialized, 0); \ ::Serialize(stream, *this); \ return serialized; \ } \ static T Deserialize(const std::vector<uint8_t>& serialized) \ { \ T obj; \ VectorReader stream(SER_NETWORK, PROTOCOL_VERSION, serialized, 0); \ stream >> obj; \ return obj; \ }#define IMPL_SERIALIZABLE(T, obj) \ IMPL_SERIALIZED(T) \ SERIALIZE_METHODS(T, obj) namespace Traits{ class ISerializable { public: virtual ~ISerializable() = default; // // Serializes object into a byte vector. // virtual std::vector<uint8_t> Serialized() const noexcept = 0; }; class IPrintable { public: virtual ~IPrintable() = default; virtual std::string Format() const = 0; }; class ICommitted { public: virtual ~ICommitted() = default; virtual const Commitment& GetCommitment() const noexcept = 0; }; class IHashable { public: virtual ~IHashable() = default; virtual const mw::Hash& GetHash() const noexcept = 0; };}