aboutsummaryrefslogtreecommitdiff
path: root/src/wallet
diff options
context:
space:
mode:
authorfurszy <matiasfurszyfer@protonmail.com>2022-06-11 11:35:14 -0300
committerfurszy <matiasfurszyfer@protonmail.com>2022-06-21 10:23:20 -0300
commit032842ae4196aaed5ea3567ea01a61ed75ab2edd (patch)
treef0caffa062c268b6e3b39cb7900bf1a28d085a62 /src/wallet
parent09649bc95d5f2855a54a8cf02e65215a3b333c92 (diff)
wallet: implement ForEachAddrBookEntry method
Diffstat (limited to 'src/wallet')
-rw-r--r--src/wallet/wallet.cpp23
-rw-r--r--src/wallet/wallet.h7
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.
*/