Move nano::block_sideband and nano::block_type in to their own files.

This commit is contained in:
Colin LeMahieu 2024-03-07 00:32:00 +00:00
commit d4cbf1eaf3
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
8 changed files with 113 additions and 78 deletions

View file

@ -21,6 +21,10 @@ add_library(
${platform_sources}
asio.hpp
asio.cpp
block_sideband.hpp
block_sideband.cpp
block_type.hpp
block_type.cpp
blockbuilders.hpp
blockbuilders.cpp
blocks.hpp

View file

View file

@ -0,0 +1,68 @@
#pragma once
#include <nano/lib/block_type.hpp>
#include <nano/lib/epoch.hpp>
#include <nano/lib/numbers.hpp>
#include <nano/lib/stream.hpp>
#include <nano/lib/timer.hpp>
#include <cstdint>
namespace nano
{
class object_stream;
}
namespace nano
{
class block_details
{
static_assert (std::is_same<std::underlying_type<nano::epoch>::type, uint8_t> (), "Epoch enum is not the proper type");
static_assert (static_cast<uint8_t> (nano::epoch::max) < (1 << 5), "Epoch max is too large for the sideband");
public:
block_details () = default;
block_details (nano::epoch const epoch_a, bool const is_send_a, bool const is_receive_a, bool const is_epoch_a);
static constexpr size_t size ()
{
return 1;
}
bool operator== (block_details const & other_a) const;
void serialize (nano::stream &) const;
bool deserialize (nano::stream &);
nano::epoch epoch{ nano::epoch::epoch_0 };
bool is_send{ false };
bool is_receive{ false };
bool is_epoch{ false };
private:
uint8_t packed () const;
void unpack (uint8_t);
public: // Logging
void operator() (nano::object_stream &) const;
};
std::string state_subtype (nano::block_details const);
class block_sideband final
{
public:
block_sideband () = default;
block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::block_details const &, nano::epoch const source_epoch_a);
block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::epoch const epoch_a, bool const is_send, bool const is_receive, bool const is_epoch, nano::epoch const source_epoch_a);
void serialize (nano::stream &, nano::block_type) const;
bool deserialize (nano::stream &, nano::block_type);
static size_t size (nano::block_type);
nano::block_hash successor{ 0 };
nano::account account{};
nano::amount balance{ 0 };
uint64_t height{ 0 };
uint64_t timestamp{ 0 };
nano::block_details details;
nano::epoch source_epoch{ nano::epoch::epoch_0 };
public: // Logging
void operator() (nano::object_stream &) const;
};
} // namespace nano

13
nano/lib/block_type.cpp Normal file
View file

@ -0,0 +1,13 @@
#include <nano/lib/block_type.hpp>
#include <magic_enum.hpp>
std::string_view nano::to_string (nano::block_type type)
{
return magic_enum::enum_name (type);
}
void nano::serialize_block_type (nano::stream & stream, const nano::block_type & type)
{
nano::write (stream, type);
}

26
nano/lib/block_type.hpp Normal file
View file

@ -0,0 +1,26 @@
#pragma once
#include <nano/lib/stream.hpp>
#include <cstdint>
#include <string>
namespace nano
{
enum class block_type : uint8_t
{
invalid = 0,
not_a_block = 1,
send = 2,
receive = 3,
open = 4,
change = 5,
state = 6
};
std::string_view to_string (block_type);
/**
* Serialize block type as an 8-bit value
*/
void serialize_block_type (nano::stream &, nano::block_type const &);
} // namespace nano

View file

@ -1443,11 +1443,6 @@ std::shared_ptr<nano::block> nano::deserialize_block_json (boost::property_tree:
return result;
}
void nano::serialize_block_type (nano::stream & stream, const nano::block_type & type)
{
nano::write (stream, type);
}
void nano::serialize_block (nano::stream & stream_a, nano::block const & block_a)
{
nano::serialize_block_type (stream_a, block_a.type ());
@ -1986,8 +1981,3 @@ void nano::block_sideband::operator() (nano::object_stream & obs) const
obs.write ("source_epoch", source_epoch);
obs.write ("details", details);
}
std::string_view nano::to_string (nano::block_type type)
{
return magic_enum::enum_name (type);
}

View file

@ -1,6 +1,7 @@
#pragma once
#include <nano/crypto/blake2/blake2.h>
#include <nano/lib/block_sideband.hpp>
#include <nano/lib/epoch.hpp>
#include <nano/lib/errors.hpp>
#include <nano/lib/numbers.hpp>
@ -21,70 +22,6 @@ namespace nano
class block_visitor;
class mutable_block_visitor;
enum class block_type : uint8_t
{
invalid = 0,
not_a_block = 1,
send = 2,
receive = 3,
open = 4,
change = 5,
state = 6
};
std::string_view to_string (block_type);
class block_details
{
static_assert (std::is_same<std::underlying_type<nano::epoch>::type, uint8_t> (), "Epoch enum is not the proper type");
static_assert (static_cast<uint8_t> (nano::epoch::max) < (1 << 5), "Epoch max is too large for the sideband");
public:
block_details () = default;
block_details (nano::epoch const epoch_a, bool const is_send_a, bool const is_receive_a, bool const is_epoch_a);
static constexpr size_t size ()
{
return 1;
}
bool operator== (block_details const & other_a) const;
void serialize (nano::stream &) const;
bool deserialize (nano::stream &);
nano::epoch epoch{ nano::epoch::epoch_0 };
bool is_send{ false };
bool is_receive{ false };
bool is_epoch{ false };
private:
uint8_t packed () const;
void unpack (uint8_t);
public: // Logging
void operator() (nano::object_stream &) const;
};
std::string state_subtype (nano::block_details const);
class block_sideband final
{
public:
block_sideband () = default;
block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::block_details const &, nano::epoch const source_epoch_a);
block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::epoch const epoch_a, bool const is_send, bool const is_receive, bool const is_epoch, nano::epoch const source_epoch_a);
void serialize (nano::stream &, nano::block_type) const;
bool deserialize (nano::stream &, nano::block_type);
static size_t size (nano::block_type);
nano::block_hash successor{ 0 };
nano::account account{};
nano::amount balance{ 0 };
uint64_t height{ 0 };
uint64_t timestamp{ 0 };
nano::block_details details;
nano::epoch source_epoch{ nano::epoch::epoch_0 };
public: // Logging
void operator() (nano::object_stream &) const;
};
class block
{
public:
@ -446,10 +383,6 @@ using block_uniquer = nano::uniquer<nano::uint256_union, nano::block>;
std::shared_ptr<nano::block> deserialize_block (nano::stream &);
std::shared_ptr<nano::block> deserialize_block (nano::stream &, nano::block_type, nano::block_uniquer * = nullptr);
std::shared_ptr<nano::block> deserialize_block_json (boost::property_tree::ptree const &, nano::block_uniquer * = nullptr);
/**
* Serialize block type as an 8-bit value
*/
void serialize_block_type (nano::stream &, nano::block_type const &);
/**
* Serialize a block prefixed with an 8-bit typecode
*/

View file

@ -1,5 +1,6 @@
#pragma once
#include <nano/lib/block_sideband.hpp>
#include <nano/lib/blocks.hpp>
#include <nano/lib/numbers.hpp>
#include <nano/store/component.hpp>