Separate vote_cache_entry class
This commit is contained in:
parent
31f7f0acb3
commit
02c31f62c2
2 changed files with 57 additions and 55 deletions
|
|
@ -4,15 +4,15 @@
|
||||||
#include <nano/node/vote_cache.hpp>
|
#include <nano/node/vote_cache.hpp>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* entry
|
* entvote_cache_entryry
|
||||||
*/
|
*/
|
||||||
|
|
||||||
nano::vote_cache::entry::entry (const nano::block_hash & hash) :
|
nano::vote_cache_entry::vote_cache_entry (const nano::block_hash & hash) :
|
||||||
hash_m{ hash }
|
hash_m{ hash }
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool nano::vote_cache::entry::vote (const nano::account & representative, const uint64_t & timestamp, const nano::uint128_t & rep_weight, std::size_t max_voters)
|
bool nano::vote_cache_entry::vote (const nano::account & representative, const uint64_t & timestamp, const nano::uint128_t & rep_weight, std::size_t max_voters)
|
||||||
{
|
{
|
||||||
bool updated = vote_impl (representative, timestamp, rep_weight, max_voters);
|
bool updated = vote_impl (representative, timestamp, rep_weight, max_voters);
|
||||||
if (updated)
|
if (updated)
|
||||||
|
|
@ -22,7 +22,7 @@ bool nano::vote_cache::entry::vote (const nano::account & representative, const
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool nano::vote_cache::entry::vote_impl (const nano::account & representative, const uint64_t & timestamp, const nano::uint128_t & rep_weight, std::size_t max_voters)
|
bool nano::vote_cache_entry::vote_impl (const nano::account & representative, const uint64_t & timestamp, const nano::uint128_t & rep_weight, std::size_t max_voters)
|
||||||
{
|
{
|
||||||
auto existing = std::find_if (voters_m.begin (), voters_m.end (), [&representative] (auto const & item) { return item.representative == representative; });
|
auto existing = std::find_if (voters_m.begin (), voters_m.end (), [&representative] (auto const & item) { return item.representative == representative; });
|
||||||
if (existing != voters_m.end ())
|
if (existing != voters_m.end ())
|
||||||
|
|
@ -64,7 +64,7 @@ bool nano::vote_cache::entry::vote_impl (const nano::account & representative, c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t nano::vote_cache::entry::fill (std::shared_ptr<nano::election> const & election) const
|
std::size_t nano::vote_cache_entry::fill (std::shared_ptr<nano::election> const & election) const
|
||||||
{
|
{
|
||||||
std::size_t inserted = 0;
|
std::size_t inserted = 0;
|
||||||
for (const auto & entry : voters_m)
|
for (const auto & entry : voters_m)
|
||||||
|
|
@ -78,32 +78,32 @@ std::size_t nano::vote_cache::entry::fill (std::shared_ptr<nano::election> const
|
||||||
return inserted;
|
return inserted;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t nano::vote_cache::entry::size () const
|
std::size_t nano::vote_cache_entry::size () const
|
||||||
{
|
{
|
||||||
return voters_m.size ();
|
return voters_m.size ();
|
||||||
}
|
}
|
||||||
|
|
||||||
nano::block_hash nano::vote_cache::entry::hash () const
|
nano::block_hash nano::vote_cache_entry::hash () const
|
||||||
{
|
{
|
||||||
return hash_m;
|
return hash_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
nano::uint128_t nano::vote_cache::entry::tally () const
|
nano::uint128_t nano::vote_cache_entry::tally () const
|
||||||
{
|
{
|
||||||
return tally_m;
|
return tally_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
nano::uint128_t nano::vote_cache::entry::final_tally () const
|
nano::uint128_t nano::vote_cache_entry::final_tally () const
|
||||||
{
|
{
|
||||||
return final_tally_m;
|
return final_tally_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<nano::vote_cache::entry::voter_entry> nano::vote_cache::entry::voters () const
|
std::vector<nano::vote_cache_entry::voter_entry> nano::vote_cache_entry::voters () const
|
||||||
{
|
{
|
||||||
return voters_m;
|
return voters_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::steady_clock::time_point nano::vote_cache::entry::last_vote () const
|
std::chrono::steady_clock::time_point nano::vote_cache_entry::last_vote () const
|
||||||
{
|
{
|
||||||
return last_vote_m;
|
return last_vote_m;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,53 +41,55 @@ public:
|
||||||
std::chrono::seconds age_cutoff{ 5 * 60 };
|
std::chrono::seconds age_cutoff{ 5 * 60 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores votes associated with a single block hash
|
||||||
|
*/
|
||||||
|
class vote_cache_entry final
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct voter_entry
|
||||||
|
{
|
||||||
|
nano::account representative;
|
||||||
|
uint64_t timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit vote_cache_entry (nano::block_hash const & hash);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a vote into a list, checks for duplicates and updates timestamp if new one is greater
|
||||||
|
* @return true if current tally changed, false otherwise
|
||||||
|
*/
|
||||||
|
bool vote (nano::account const & representative, uint64_t const & timestamp, nano::uint128_t const & rep_weight, std::size_t max_voters);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts votes stored in this entry into an election
|
||||||
|
*/
|
||||||
|
std::size_t fill (std::shared_ptr<nano::election> const & election) const;
|
||||||
|
|
||||||
|
std::size_t size () const;
|
||||||
|
nano::block_hash hash () const;
|
||||||
|
nano::uint128_t tally () const;
|
||||||
|
nano::uint128_t final_tally () const;
|
||||||
|
std::vector<voter_entry> voters () const;
|
||||||
|
std::chrono::steady_clock::time_point last_vote () const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool vote_impl (nano::account const & representative, uint64_t const & timestamp, nano::uint128_t const & rep_weight, std::size_t max_voters);
|
||||||
|
|
||||||
|
nano::block_hash const hash_m;
|
||||||
|
std::vector<voter_entry> voters_m;
|
||||||
|
|
||||||
|
nano::uint128_t tally_m{ 0 };
|
||||||
|
nano::uint128_t final_tally_m{ 0 };
|
||||||
|
|
||||||
|
std::chrono::steady_clock::time_point last_vote_m{};
|
||||||
|
};
|
||||||
|
|
||||||
class vote_cache final
|
class vote_cache final
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
using entry = vote_cache_entry;
|
||||||
* Stores votes associated with a single block hash
|
|
||||||
*/
|
|
||||||
class entry final
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
struct voter_entry
|
|
||||||
{
|
|
||||||
nano::account representative;
|
|
||||||
uint64_t timestamp;
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit entry (nano::block_hash const & hash);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a vote into a list, checks for duplicates and updates timestamp if new one is greater
|
|
||||||
* @return true if current tally changed, false otherwise
|
|
||||||
*/
|
|
||||||
bool vote (nano::account const & representative, uint64_t const & timestamp, nano::uint128_t const & rep_weight, std::size_t max_voters);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inserts votes stored in this entry into an election
|
|
||||||
*/
|
|
||||||
std::size_t fill (std::shared_ptr<nano::election> const & election) const;
|
|
||||||
|
|
||||||
std::size_t size () const;
|
|
||||||
nano::block_hash hash () const;
|
|
||||||
nano::uint128_t tally () const;
|
|
||||||
nano::uint128_t final_tally () const;
|
|
||||||
std::vector<voter_entry> voters () const;
|
|
||||||
std::chrono::steady_clock::time_point last_vote () const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool vote_impl (nano::account const & representative, uint64_t const & timestamp, nano::uint128_t const & rep_weight, std::size_t max_voters);
|
|
||||||
|
|
||||||
nano::block_hash const hash_m;
|
|
||||||
std::vector<voter_entry> voters_m;
|
|
||||||
|
|
||||||
nano::uint128_t tally_m{ 0 };
|
|
||||||
nano::uint128_t final_tally_m{ 0 };
|
|
||||||
|
|
||||||
std::chrono::steady_clock::time_point last_vote_m{};
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit vote_cache (vote_cache_config const &, nano::stats &);
|
explicit vote_cache (vote_cache_config const &, nano::stats &);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue