diff options
author | Pieter Wuille <pieter@wuille.net> | 2021-02-07 19:18:07 -0800 |
---|---|---|
committer | Pieter Wuille <pieter@wuille.net> | 2021-03-29 17:44:07 -0700 |
commit | 17e006ff8d5e42f22474c5191d1b745bbc97571f (patch) | |
tree | c085dd32cf856ac73a23e7d7268ef23043e63390 | |
parent | 6ba5dda0c9de75196c6a427d9e59d39e5a41bff7 (diff) | |
download | bitcoin-17e006ff8d5e42f22474c5191d1b745bbc97571f.tar.xz |
refactor: split off subscript logic from ToStringHelper
This will allow subclasses to overwrite the serialization of subscript
arguments without needing to reimplement all the rest of the ToString
logic.
-rw-r--r-- | src/script/descriptor.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index a1ef23ea1a..6253f1b2b0 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -525,6 +525,18 @@ public: return false; } + virtual bool ToStringSubScriptHelper(const SigningProvider* arg, std::string& ret, bool priv, bool normalized) const + { + size_t pos = 0; + for (const auto& scriptarg : m_subdescriptor_args) { + if (pos++) ret += ","; + std::string tmp; + if (!scriptarg->ToStringHelper(arg, tmp, priv, normalized)) return false; + ret += std::move(tmp); + } + return true; + } + bool ToStringHelper(const SigningProvider* arg, std::string& out, bool priv, bool normalized) const { std::string extra = ToStringExtra(); @@ -542,13 +554,10 @@ public: } ret += std::move(tmp); } - for (const auto& scriptarg : m_subdescriptor_args) { - if (pos++) ret += ","; - std::string tmp; - if (!scriptarg->ToStringHelper(arg, tmp, priv, normalized)) return false; - ret += std::move(tmp); - } - out = std::move(ret) + ")"; + std::string subscript; + if (!ToStringSubScriptHelper(arg, subscript, priv, normalized)) return false; + if (pos && subscript.size()) ret += ','; + out = std::move(ret) + std::move(subscript) + ")"; return true; } |