Change block::previous to block::previous_field and return std::optional depending if the block has the field.
Add block::previous with backwards compatibility and a todo to fix up usages to not check for sentinel values.
This commit is contained in:
parent
e75fb68b05
commit
5332f2c3f5
2 changed files with 29 additions and 14 deletions
|
|
@ -293,6 +293,20 @@ nano::block_hash nano::block::source () const noexcept
|
|||
}
|
||||
}
|
||||
|
||||
// TODO - Remove comments below and fixup usages to not need to check .is_zero ()
|
||||
// std::optional<nano::block_hash> nano::block::previous () const
|
||||
nano::block_hash nano::block::previous () const noexcept
|
||||
{
|
||||
std::optional<nano::block_hash> result = previous_field ();
|
||||
/*
|
||||
if (result && result.value ().is_zero ())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
return result;*/
|
||||
return result.value_or (0);
|
||||
}
|
||||
|
||||
std::optional<nano::account> nano::block::account_field () const
|
||||
{
|
||||
return std::nullopt;
|
||||
|
|
@ -573,7 +587,7 @@ bool nano::send_block::operator== (nano::send_block const & other_a) const
|
|||
return result;
|
||||
}
|
||||
|
||||
nano::block_hash const & nano::send_block::previous () const
|
||||
std::optional<nano::block_hash> nano::send_block::previous_field () const
|
||||
{
|
||||
return hashables.previous;
|
||||
}
|
||||
|
|
@ -743,10 +757,9 @@ void nano::open_block::block_work_set (uint64_t work_a)
|
|||
work = work_a;
|
||||
}
|
||||
|
||||
nano::block_hash const & nano::open_block::previous () const
|
||||
std::optional<nano::block_hash> nano::open_block::previous_field () const
|
||||
{
|
||||
static nano::block_hash result{ 0 };
|
||||
return result;
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<nano::account> nano::open_block::account_field () const
|
||||
|
|
@ -1015,7 +1028,7 @@ void nano::change_block::block_work_set (uint64_t work_a)
|
|||
work = work_a;
|
||||
}
|
||||
|
||||
nano::block_hash const & nano::change_block::previous () const
|
||||
std::optional<nano::block_hash> nano::change_block::previous_field () const
|
||||
{
|
||||
return hashables.previous;
|
||||
}
|
||||
|
|
@ -1314,7 +1327,7 @@ void nano::state_block::block_work_set (uint64_t work_a)
|
|||
work = work_a;
|
||||
}
|
||||
|
||||
nano::block_hash const & nano::state_block::previous () const
|
||||
std::optional<nano::block_hash> nano::state_block::previous_field () const
|
||||
{
|
||||
return hashables.previous;
|
||||
}
|
||||
|
|
@ -1801,7 +1814,7 @@ bool nano::receive_block::valid_predecessor (nano::block const & block_a) const
|
|||
return result;
|
||||
}
|
||||
|
||||
nano::block_hash const & nano::receive_block::previous () const
|
||||
std::optional<nano::block_hash> nano::receive_block::previous_field () const
|
||||
{
|
||||
return hashables.previous;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@ public:
|
|||
virtual void hash (blake2b_state &) const = 0;
|
||||
virtual uint64_t block_work () const = 0;
|
||||
virtual void block_work_set (uint64_t) = 0;
|
||||
// Previous block in account's chain, zero for open block
|
||||
virtual nano::block_hash const & previous () const = 0;
|
||||
// Previous block or account number for open blocks
|
||||
virtual nano::root const & root () const = 0;
|
||||
// Qualified root value based on previous() and root()
|
||||
|
|
@ -73,6 +71,10 @@ public: // Direct access to the block fields or nullopt if the block type does n
|
|||
virtual std::optional<nano::account> destination_field () const;
|
||||
// Link field for state blocks
|
||||
virtual std::optional<nano::link> link_field () const;
|
||||
// Previous block if field exists or 0
|
||||
nano::block_hash previous () const noexcept;
|
||||
// Previous block in chain if the field exists
|
||||
virtual std::optional<nano::block_hash> previous_field () const = 0;
|
||||
// Representative field for open/change blocks
|
||||
virtual std::optional<nano::account> representative_field () const;
|
||||
// Returns the source block hash for open/receive/state blocks that are receives
|
||||
|
|
@ -122,7 +124,6 @@ public:
|
|||
void hash (blake2b_state &) const override;
|
||||
uint64_t block_work () const override;
|
||||
void block_work_set (uint64_t) override;
|
||||
nano::block_hash const & previous () const override;
|
||||
nano::root const & root () const override;
|
||||
void serialize (nano::stream &) const override;
|
||||
bool deserialize (nano::stream &);
|
||||
|
|
@ -145,6 +146,7 @@ public:
|
|||
public: // Send block fields
|
||||
std::optional<nano::amount> balance_field () const override;
|
||||
std::optional<nano::account> destination_field () const override;
|
||||
std::optional<nano::block_hash> previous_field () const override;
|
||||
|
||||
public: // Logging
|
||||
void operator() (nano::object_stream &) const override;
|
||||
|
|
@ -175,7 +177,6 @@ public:
|
|||
void hash (blake2b_state &) const override;
|
||||
uint64_t block_work () const override;
|
||||
void block_work_set (uint64_t) override;
|
||||
nano::block_hash const & previous () const override;
|
||||
nano::root const & root () const override;
|
||||
void serialize (nano::stream &) const override;
|
||||
bool deserialize (nano::stream &);
|
||||
|
|
@ -196,6 +197,7 @@ public:
|
|||
static std::size_t constexpr size = nano::receive_hashables::size + sizeof (signature) + sizeof (work);
|
||||
|
||||
public: // Receive block fields
|
||||
std::optional<nano::block_hash> previous_field () const override;
|
||||
std::optional<nano::block_hash> source_field () const override;
|
||||
|
||||
public: // Logging
|
||||
|
|
@ -229,7 +231,6 @@ public:
|
|||
void hash (blake2b_state &) const override;
|
||||
uint64_t block_work () const override;
|
||||
void block_work_set (uint64_t) override;
|
||||
nano::block_hash const & previous () const override;
|
||||
nano::root const & root () const override;
|
||||
void serialize (nano::stream &) const override;
|
||||
bool deserialize (nano::stream &);
|
||||
|
|
@ -251,6 +252,7 @@ public:
|
|||
|
||||
public: // Open block fields
|
||||
std::optional<nano::account> account_field () const override;
|
||||
std::optional<nano::block_hash> previous_field () const override;
|
||||
std::optional<nano::account> representative_field () const override;
|
||||
std::optional<nano::block_hash> source_field () const override;
|
||||
|
||||
|
|
@ -283,7 +285,6 @@ public:
|
|||
void hash (blake2b_state &) const override;
|
||||
uint64_t block_work () const override;
|
||||
void block_work_set (uint64_t) override;
|
||||
nano::block_hash const & previous () const override;
|
||||
nano::root const & root () const override;
|
||||
void serialize (nano::stream &) const override;
|
||||
bool deserialize (nano::stream &);
|
||||
|
|
@ -304,6 +305,7 @@ public:
|
|||
static std::size_t constexpr size = nano::change_hashables::size + sizeof (signature) + sizeof (work);
|
||||
|
||||
public: // Change block fields
|
||||
std::optional<nano::block_hash> previous_field () const override;
|
||||
std::optional<nano::account> representative_field () const override;
|
||||
|
||||
public: // Logging
|
||||
|
|
@ -348,7 +350,6 @@ public:
|
|||
void hash (blake2b_state &) const override;
|
||||
uint64_t block_work () const override;
|
||||
void block_work_set (uint64_t) override;
|
||||
nano::block_hash const & previous () const override;
|
||||
nano::root const & root () const override;
|
||||
void serialize (nano::stream &) const override;
|
||||
bool deserialize (nano::stream &);
|
||||
|
|
@ -372,6 +373,7 @@ public: // State block fields
|
|||
std::optional<nano::account> account_field () const override;
|
||||
std::optional<nano::amount> balance_field () const override;
|
||||
std::optional<nano::link> link_field () const override;
|
||||
std::optional<nano::block_hash> previous_field () const override;
|
||||
std::optional<nano::account> representative_field () const override;
|
||||
|
||||
public: // Logging
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue