From 372ae61bfb19c71aa9fc0246665cd7b008e22e17 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Fri, 25 Mar 2016 14:52:45 -0400 Subject: [PATCH] rpc: optimize address txid queries --- src/rpc/misc.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 327b2ed5d..39d11655f 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -677,24 +677,26 @@ UniValue getaddresstxids(const UniValue& params, bool fHelp) } } - std::set txids; - std::vector > vtxids; + std::set > txids; + UniValue result(UniValue::VARR); for (std::vector >::const_iterator it=addressIndex.begin(); it!=addressIndex.end(); it++) { int height = it->first.blockHeight; std::string txid = it->first.txhash.GetHex(); - if (txids.insert(txid).second) { - vtxids.push_back(std::make_pair(height, txid)); + + if (addresses.size() > 1) { + txids.insert(std::make_pair(height, txid)); + } else { + if (txids.insert(std::make_pair(height, txid)).second) { + result.push_back(txid); + } } } if (addresses.size() > 1) { - std::sort(vtxids.begin(), vtxids.end()); - } - - UniValue result(UniValue::VARR); - for (std::vector >::const_iterator it=vtxids.begin(); it!=vtxids.end(); it++) { - result.push_back(it->second); + for (std::set >::const_iterator it=txids.begin(); it!=txids.end(); it++) { + result.push_back(it->second); + } } return result;