Add GSL-style narrow_cast (#2567)
This commit is contained in:
parent
77a92be26f
commit
2859c22009
3 changed files with 15 additions and 5 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <nano/lib/locks.hpp>
|
||||
|
||||
#include <cassert>
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
|
@ -161,6 +162,15 @@ void transform_if (InputIt first, InputIt last, OutputIt dest, Pred pred, Func t
|
|||
++first;
|
||||
}
|
||||
}
|
||||
|
||||
/** Safe narrowing cast which silences warnings and asserts on data loss in debug builds. This is optimized away. */
|
||||
template <typename TARGET_TYPE, typename SOURCE_TYPE>
|
||||
constexpr TARGET_TYPE narrow_cast (SOURCE_TYPE const & val)
|
||||
{
|
||||
auto res (static_cast<TARGET_TYPE> (val));
|
||||
assert (val == static_cast<SOURCE_TYPE> (res));
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
void release_assert_internal (bool check, const char * check_expr, const char * file, unsigned int line);
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ void nano::election::confirm_once (nano::election_status_type type_a)
|
|||
status.election_end = std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ());
|
||||
status.election_duration = std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::steady_clock::now () - election_start);
|
||||
status.confirmation_request_count = confirmation_request_count;
|
||||
status.block_count = blocks.size ();
|
||||
status.voter_count = last_votes.size ();
|
||||
status.block_count = nano::narrow_cast<decltype (status.block_count)> (blocks.size ());
|
||||
status.voter_count = nano::narrow_cast<decltype (status.voter_count)> (last_votes.size ());
|
||||
status.type = type_a;
|
||||
auto status_l (status);
|
||||
auto node_l (node.shared ());
|
||||
|
|
@ -57,8 +57,8 @@ void nano::election::stop ()
|
|||
status.election_end = std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ());
|
||||
status.election_duration = std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::steady_clock::now () - election_start);
|
||||
status.confirmation_request_count = confirmation_request_count;
|
||||
status.block_count = blocks.size ();
|
||||
status.voter_count = last_votes.size ();
|
||||
status.block_count = nano::narrow_cast<decltype (status.block_count)> (blocks.size ());
|
||||
status.voter_count = nano::narrow_cast<decltype (status.voter_count)> (last_votes.size ());
|
||||
status.type = nano::election_status_type::stopped;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -680,7 +680,7 @@ nano::telemetry_data nano::local_telemetry_data (nano::ledger_cache const & ledg
|
|||
telemetry_data.uptime = std::chrono::duration_cast<std::chrono::seconds> (std::chrono::steady_clock::now () - statup_time_a).count ();
|
||||
telemetry_data.unchecked_count = ledger_cache_a.unchecked_count;
|
||||
telemetry_data.genesis_block = network_params_a.ledger.genesis_hash;
|
||||
telemetry_data.peer_count = network_a.size ();
|
||||
telemetry_data.peer_count = nano::narrow_cast<decltype (telemetry_data.peer_count)> (network_a.size ());
|
||||
telemetry_data.account_count = ledger_cache_a.account_count;
|
||||
telemetry_data.major_version = nano::get_major_node_version ();
|
||||
telemetry_data.minor_version = nano::get_minor_node_version ();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue