1414#include < util/spanparsing.h>
1515#include < util/system.h>
1616#include < util/strencodings.h>
17+ #include < util/vector.h>
1718
1819#include < memory>
1920#include < string>
@@ -501,22 +502,13 @@ class DescriptorImpl : public Descriptor
501502 }
502503};
503504
504- /* * Construct a vector with one element, which is moved into it. */
505- template <typename T>
506- std::vector<T> Singleton (T elem)
507- {
508- std::vector<T> ret;
509- ret.emplace_back (std::move (elem));
510- return ret;
511- }
512-
513505/* * A parsed addr(A) descriptor. */
514506class AddressDescriptor final : public DescriptorImpl
515507{
516508 const CTxDestination m_destination;
517509protected:
518510 std::string ToStringExtra () const override { return EncodeDestination (m_destination); }
519- std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript*, FlatSigningProvider&) const override { return Singleton (GetScriptForDestination (m_destination)); }
511+ std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript*, FlatSigningProvider&) const override { return Vector (GetScriptForDestination (m_destination)); }
520512public:
521513 AddressDescriptor (CTxDestination destination) : DescriptorImpl({}, {}, " addr" ), m_destination(std::move(destination)) {}
522514 bool IsSolvable () const final { return false ; }
@@ -528,7 +520,7 @@ class RawDescriptor final : public DescriptorImpl
528520 const CScript m_script;
529521protected:
530522 std::string ToStringExtra () const override { return HexStr (m_script.begin (), m_script.end ()); }
531- std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript*, FlatSigningProvider&) const override { return Singleton (m_script); }
523+ std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript*, FlatSigningProvider&) const override { return Vector (m_script); }
532524public:
533525 RawDescriptor (CScript script) : DescriptorImpl({}, {}, " raw" ), m_script(std::move(script)) {}
534526 bool IsSolvable () const final { return false ; }
@@ -538,9 +530,9 @@ class RawDescriptor final : public DescriptorImpl
538530class PKDescriptor final : public DescriptorImpl
539531{
540532protected:
541- std::vector<CScript> MakeScripts (const std::vector<CPubKey>& keys, const CScript*, FlatSigningProvider&) const override { return Singleton (GetScriptForRawPubKey (keys[0 ])); }
533+ std::vector<CScript> MakeScripts (const std::vector<CPubKey>& keys, const CScript*, FlatSigningProvider&) const override { return Vector (GetScriptForRawPubKey (keys[0 ])); }
542534public:
543- PKDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Singleton (std::move(prov)), {}, " pk" ) {}
535+ PKDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector (std::move(prov)), {}, " pk" ) {}
544536};
545537
546538/* * A parsed pkh(P) descriptor. */
@@ -551,10 +543,10 @@ class PKHDescriptor final : public DescriptorImpl
551543 {
552544 CKeyID id = keys[0 ].GetID ();
553545 out.pubkeys .emplace (id, keys[0 ]);
554- return Singleton (GetScriptForDestination (PKHash (id)));
546+ return Vector (GetScriptForDestination (PKHash (id)));
555547 }
556548public:
557- PKHDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Singleton (std::move(prov)), {}, " pkh" ) {}
549+ PKHDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector (std::move(prov)), {}, " pkh" ) {}
558550};
559551
560552/* * A parsed wpkh(P) descriptor. */
@@ -565,10 +557,10 @@ class WPKHDescriptor final : public DescriptorImpl
565557 {
566558 CKeyID id = keys[0 ].GetID ();
567559 out.pubkeys .emplace (id, keys[0 ]);
568- return Singleton (GetScriptForDestination (WitnessV0KeyHash (id)));
560+ return Vector (GetScriptForDestination (WitnessV0KeyHash (id)));
569561 }
570562public:
571- WPKHDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Singleton (std::move(prov)), {}, " wpkh" ) {}
563+ WPKHDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector (std::move(prov)), {}, " wpkh" ) {}
572564};
573565
574566/* * A parsed combo(P) descriptor. */
@@ -591,7 +583,7 @@ class ComboDescriptor final : public DescriptorImpl
591583 return ret;
592584 }
593585public:
594- ComboDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Singleton (std::move(prov)), {}, " combo" ) {}
586+ ComboDescriptor (std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector (std::move(prov)), {}, " combo" ) {}
595587};
596588
597589/* * A parsed multi(...) or sortedmulti(...) descriptor */
@@ -605,9 +597,9 @@ class MultisigDescriptor final : public DescriptorImpl
605597 if (m_sorted) {
606598 std::vector<CPubKey> sorted_keys (keys);
607599 std::sort (sorted_keys.begin (), sorted_keys.end ());
608- return Singleton (GetScriptForMultisig (m_threshold, sorted_keys));
600+ return Vector (GetScriptForMultisig (m_threshold, sorted_keys));
609601 }
610- return Singleton (GetScriptForMultisig (m_threshold, keys));
602+ return Vector (GetScriptForMultisig (m_threshold, keys));
611603 }
612604public:
613605 MultisigDescriptor (int threshold, std::vector<std::unique_ptr<PubkeyProvider>> providers, bool sorted = false ) : DescriptorImpl(std::move(providers), {}, sorted ? " sortedmulti" : " multi" ), m_threshold(threshold), m_sorted(sorted) {}
@@ -617,7 +609,7 @@ class MultisigDescriptor final : public DescriptorImpl
617609class SHDescriptor final : public DescriptorImpl
618610{
619611protected:
620- std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript* script, FlatSigningProvider&) const override { return Singleton (GetScriptForDestination (ScriptHash (*script))); }
612+ std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript* script, FlatSigningProvider&) const override { return Vector (GetScriptForDestination (ScriptHash (*script))); }
621613public:
622614 SHDescriptor (std::unique_ptr<DescriptorImpl> desc) : DescriptorImpl({}, std::move(desc), " sh" ) {}
623615};
@@ -626,7 +618,7 @@ class SHDescriptor final : public DescriptorImpl
626618class WSHDescriptor final : public DescriptorImpl
627619{
628620protected:
629- std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript* script, FlatSigningProvider&) const override { return Singleton (GetScriptForDestination (WitnessV0ScriptHash (*script))); }
621+ std::vector<CScript> MakeScripts (const std::vector<CPubKey>&, const CScript* script, FlatSigningProvider&) const override { return Vector (GetScriptForDestination (WitnessV0ScriptHash (*script))); }
630622public:
631623 WSHDescriptor (std::unique_ptr<DescriptorImpl> desc) : DescriptorImpl({}, std::move(desc), " wsh" ) {}
632624};
0 commit comments