diff options
author | furszy <matiasfurszyfer@protonmail.com> | 2022-06-11 11:35:14 -0300 |
---|---|---|
committer | furszy <matiasfurszyfer@protonmail.com> | 2022-06-21 10:23:20 -0300 |
commit | 032842ae4196aaed5ea3567ea01a61ed75ab2edd (patch) | |
tree | f0caffa062c268b6e3b39cb7900bf1a28d085a62 /src/wallet | |
parent | 09649bc95d5f2855a54a8cf02e65215a3b333c92 (diff) |
wallet: implement ForEachAddrBookEntry method
Diffstat (limited to 'src/wallet')
-rw-r--r-- | src/wallet/wallet.cpp | 23 | ||||
-rw-r--r-- | src/wallet/wallet.h | 7 |
2 files changed, 24 insertions, 6 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 8ca8ef0a19..f7eb0bbc03 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2348,17 +2348,28 @@ void CWallet::MarkDestinationsDirty(const std::set<CTxDestination>& destinations } } +void CWallet::ForEachAddrBookEntry(const ListAddrBookFunc& func) const +{ + AssertLockHeld(cs_wallet); + for (const std::pair<const CTxDestination, CAddressBookData>& item : m_address_book) { + const auto& entry = item.second; + func(item.first, entry.GetLabel(), entry.purpose, entry.IsChange()); + } +} + std::vector<CTxDestination> CWallet::ListAddrBookAddresses(const std::optional<AddrBookFilter>& _filter) const { AssertLockHeld(cs_wallet); std::vector<CTxDestination> result; AddrBookFilter filter = _filter ? *_filter : AddrBookFilter(); - for (const std::pair<const CTxDestination, CAddressBookData>& item : m_address_book) { - if (filter.ignore_change && item.second.IsChange()) continue; - const std::string& strName = item.second.GetLabel(); - if (filter.m_op_label && *filter.m_op_label != strName) continue; - result.emplace_back(item.first); - } + ForEachAddrBookEntry([&result, &filter](const CTxDestination& dest, const std::string& label, const std::string& purpose, bool is_change) { + // Filter by change + if (filter.ignore_change && is_change) return; + // Filter by label + if (filter.m_op_label && *filter.m_op_label != label) return; + // All good + result.emplace_back(dest); + }); return result; } diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 970d3e2e75..3775f325ba 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -649,6 +649,13 @@ public: std::vector<CTxDestination> ListAddrBookAddresses(const std::optional<AddrBookFilter>& filter) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); /** + * Walk-through the address book entries. + * Stops when the provided 'ListAddrBookFunc' returns false. + */ + using ListAddrBookFunc = std::function<void(const CTxDestination& dest, const std::string& label, const std::string& purpose, bool is_change)>; + void ForEachAddrBookEntry(const ListAddrBookFunc& func) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); + + /** * Marks all outputs in each one of the destinations dirty, so their cache is * reset and does not return outdated information. */ |