[pending] use map instead of vector

This commit is contained in:
Fabian Schuh 2018-04-11 15:16:51 +02:00
parent cbe88eb511
commit 2be2826f3c
2 changed files with 9 additions and 20 deletions

View file

@ -44,18 +44,6 @@
namespace graphene { namespace app {
namespace {
std::vector<signed_transaction>::const_iterator find_transaction( const std::vector<signed_transaction>& transactions, const transaction& transaction_to_find )
{
auto transaction_it = std::find_if(transactions.begin(), transactions.end(),
[&]( const signed_transaction& transaction ){
return transaction.id() == transaction_to_find.id();
});
return transaction_it;
}
}
login_api::login_api(application& a)
:_app(a)
{
@ -206,10 +194,11 @@ namespace {
network_node_api::network_node_api( application& a ) : _app( a )
{
_pending_trx_connection = _app.chain_database()->on_pending_transaction.connect([this]( const signed_transaction& transaction ){
auto transaction_it = find_transaction(_pending_transactions, transaction);
auto transaction_it = _pending_transactions.find(transaction.id());
if (_pending_transactions.end() == transaction_it)
{
_pending_transactions.push_back(transaction);
_pending_transactions[transaction.id()] = transaction;
}
if (_on_pending_transaction)
@ -221,7 +210,7 @@ namespace {
_applied_block_connection = _app.chain_database()->applied_block.connect([this]( const signed_block& block ){
for (const auto& transaction: block.transactions)
{
auto transaction_it = find_transaction(_pending_transactions, transaction);
auto transaction_it = _pending_transactions.find(transaction.id());
if (_pending_transactions.end() != transaction_it)
{
_pending_transactions.erase(transaction_it);
@ -233,9 +222,9 @@ namespace {
*/
for (const auto& transaction: _pending_transactions)
{
if (transaction.expiration < block.timestamp)
if (transaction.second.expiration < block.timestamp)
{
auto transaction_it = find_transaction(_pending_transactions, transaction);
auto transaction_it = _pending_transactions.find(transaction.second.id());
if (_pending_transactions.end() != transaction_it)
{
_pending_transactions.erase(transaction_it);
@ -277,7 +266,7 @@ namespace {
return _app.p2p_node()->set_advanced_node_parameters(params);
}
std::vector<signed_transaction> network_node_api::list_pending_transactions() const
map<transaction_id_type, signed_transaction> network_node_api::list_pending_transactions() const
{
return _pending_transactions;
}

View file

@ -267,7 +267,7 @@ namespace graphene { namespace app {
/**
* @brief Return list of pending transactions.
*/
std::vector<signed_transaction> list_pending_transactions() const;
map<transaction_id_type, signed_transaction> list_pending_transactions() const;
/**
* @brief Subscribes caller for notifications about pending transactions.
@ -282,7 +282,7 @@ namespace graphene { namespace app {
private:
application& _app;
std::vector< signed_transaction > _pending_transactions;
map<transaction_id_type, signed_transaction> _pending_transactions;
boost::signals2::scoped_connection _pending_trx_connection;
boost::signals2::scoped_connection _applied_block_connection;
std::function<void(const variant&)> _on_pending_transaction;