[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 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) login_api::login_api(application& a)
:_app(a) :_app(a)
{ {
@ -206,10 +194,11 @@ namespace {
network_node_api::network_node_api( application& a ) : _app( a ) 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 ){ _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) if (_pending_transactions.end() == transaction_it)
{ {
_pending_transactions.push_back(transaction); _pending_transactions[transaction.id()] = transaction;
} }
if (_on_pending_transaction) if (_on_pending_transaction)
@ -221,7 +210,7 @@ namespace {
_applied_block_connection = _app.chain_database()->applied_block.connect([this]( const signed_block& block ){ _applied_block_connection = _app.chain_database()->applied_block.connect([this]( const signed_block& block ){
for (const auto& transaction: block.transactions) 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) if (_pending_transactions.end() != transaction_it)
{ {
_pending_transactions.erase(transaction_it); _pending_transactions.erase(transaction_it);
@ -233,9 +222,9 @@ namespace {
*/ */
for (const auto& transaction: _pending_transactions) 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) if (_pending_transactions.end() != transaction_it)
{ {
_pending_transactions.erase(transaction_it); _pending_transactions.erase(transaction_it);
@ -277,7 +266,7 @@ namespace {
return _app.p2p_node()->set_advanced_node_parameters(params); 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; return _pending_transactions;
} }

View file

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