aboutsummaryrefslogtreecommitdiff
path: root/src/script/signingprovider.cpp
diff options
context:
space:
mode:
authorAndrew Chow <achow101-github@achow101.com>2022-08-17 17:46:27 -0400
committerAndrew Chow <achow101-github@achow101.com>2022-08-17 17:57:33 -0400
commita8f69541ad53a76d5f69044ba829069d225a4af1 (patch)
treec0501ff34e5107ca7e4ef9bcc02ad3762b9cea18 /src/script/signingprovider.cpp
parenta75b7796b7b37be0d313d10a2ed683534ce7e95a (diff)
parentfa3f15f2dd94ae597a66037f5928fe4e90fe099d (diff)
Merge bitcoin/bitcoin#25748: refactor: Avoid copies in FlatSigningProvider Merge
fa3f15f2dd94ae597a66037f5928fe4e90fe099d refactor: Avoid copies in FlatSigningProvider Merge (MacroFake) Pull request description: `Merge` will create several copies unconditionally: * To initialize the args `a`, and `b` * `ret`, which is the merge of the two args So change the code to let the caller decide how many copies they need/want: * `a`, and `b` must be explicitly moved or copied by the caller * `ret` is no longer needed, as `a` can be used for it in place "for free" ACKs for top commit: achow101: ACK fa3f15f2dd94ae597a66037f5928fe4e90fe099d furszy: looks good, ACK fa3f15f2 ryanofsky: Code review ACK fa3f15f2dd94ae597a66037f5928fe4e90fe099d. Confirmed that all the places `std::move` was added the argument actually did seem safe to move from. Compiler enforces that temporary copies are explicitly created in non-move cases. Tree-SHA512: 7c027ccdea1549cd9f37403344ecbb76e008adf545f6ce52996bf95e89eb7dc89af6cb31435a9289d6f2eea1c416961b2fb96348bc8a211d550728f1d99ac49c
Diffstat (limited to 'src/script/signingprovider.cpp')
-rw-r--r--src/script/signingprovider.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/script/signingprovider.cpp b/src/script/signingprovider.cpp
index c624a17628..a82a8b252a 100644
--- a/src/script/signingprovider.cpp
+++ b/src/script/signingprovider.cpp
@@ -77,20 +77,14 @@ bool FlatSigningProvider::GetTaprootBuilder(const XOnlyPubKey& output_key, Tapro
return LookupHelper(tr_trees, output_key, builder);
}
-FlatSigningProvider Merge(const FlatSigningProvider& a, const FlatSigningProvider& b)
-{
- FlatSigningProvider ret;
- ret.scripts = a.scripts;
- ret.scripts.insert(b.scripts.begin(), b.scripts.end());
- ret.pubkeys = a.pubkeys;
- ret.pubkeys.insert(b.pubkeys.begin(), b.pubkeys.end());
- ret.keys = a.keys;
- ret.keys.insert(b.keys.begin(), b.keys.end());
- ret.origins = a.origins;
- ret.origins.insert(b.origins.begin(), b.origins.end());
- ret.tr_trees = a.tr_trees;
- ret.tr_trees.insert(b.tr_trees.begin(), b.tr_trees.end());
- return ret;
+FlatSigningProvider& FlatSigningProvider::Merge(FlatSigningProvider&& b)
+{
+ scripts.merge(b.scripts);
+ pubkeys.merge(b.pubkeys);
+ keys.merge(b.keys);
+ origins.merge(b.origins);
+ tr_trees.merge(b.tr_trees);
+ return *this;
}
void FillableSigningProvider::ImplicitlyLearnRelatedKeyScripts(const CPubKey& pubkey)