mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 06:43:45 +01:00
refactor: Avoid copies in FlatSigningProvider Merge
This commit is contained in:
@@ -644,7 +644,7 @@ public:
|
||||
assert(outscripts.size() == 1);
|
||||
subscripts.emplace_back(std::move(outscripts[0]));
|
||||
}
|
||||
out = Merge(std::move(out), std::move(subprovider));
|
||||
out.Merge(std::move(subprovider));
|
||||
|
||||
std::vector<CPubKey> pubkeys;
|
||||
pubkeys.reserve(entries.size());
|
||||
|
||||
@@ -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& FlatSigningProvider::Merge(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;
|
||||
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)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#ifndef BITCOIN_SCRIPT_SIGNINGPROVIDER_H
|
||||
#define BITCOIN_SCRIPT_SIGNINGPROVIDER_H
|
||||
|
||||
#include <attributes.h>
|
||||
#include <key.h>
|
||||
#include <pubkey.h>
|
||||
#include <script/keyorigin.h>
|
||||
@@ -85,9 +86,9 @@ struct FlatSigningProvider final : public SigningProvider
|
||||
bool GetKey(const CKeyID& keyid, CKey& key) const override;
|
||||
bool GetTaprootSpendData(const XOnlyPubKey& output_key, TaprootSpendData& spenddata) const override;
|
||||
bool GetTaprootBuilder(const XOnlyPubKey& output_key, TaprootBuilder& builder) const override;
|
||||
};
|
||||
|
||||
FlatSigningProvider Merge(const FlatSigningProvider& a, const FlatSigningProvider& b);
|
||||
FlatSigningProvider& Merge(FlatSigningProvider&& b) LIFETIMEBOUND;
|
||||
};
|
||||
|
||||
/** Fillable signing provider that keeps keys in an address->secret map */
|
||||
class FillableSigningProvider : public SigningProvider
|
||||
|
||||
Reference in New Issue
Block a user