/tmp/bitcoin/src/script/script.h
Line | Count | Source |
1 | | // Copyright (c) 2009-2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-present The Bitcoin Core developers |
3 | | // Distributed under the MIT software license, see the accompanying |
4 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | | |
6 | | #ifndef BITCOIN_SCRIPT_SCRIPT_H |
7 | | #define BITCOIN_SCRIPT_SCRIPT_H |
8 | | |
9 | | #include <attributes.h> |
10 | | #include <crypto/common.h> |
11 | | #include <prevector.h> |
12 | | #include <serialize.h> |
13 | | #include <uint256.h> |
14 | | #include <util/hash_type.h> |
15 | | |
16 | | #include <cassert> |
17 | | #include <cstddef> |
18 | | #include <cstdint> |
19 | | #include <iterator> |
20 | | #include <limits> |
21 | | #include <span> |
22 | | #include <stdexcept> |
23 | | #include <string> |
24 | | #include <type_traits> |
25 | | #include <utility> |
26 | | #include <vector> |
27 | | |
28 | | // Maximum number of bytes pushable to the stack |
29 | | static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; |
30 | | |
31 | | // Maximum number of non-push operations per script |
32 | | static const int MAX_OPS_PER_SCRIPT = 201; |
33 | | |
34 | | // Maximum number of public keys per multisig |
35 | | static const int MAX_PUBKEYS_PER_MULTISIG = 20; |
36 | | |
37 | | /** The limit of keys in OP_CHECKSIGADD-based scripts. It is due to the stack limit in BIP342. */ |
38 | | static constexpr unsigned int MAX_PUBKEYS_PER_MULTI_A = 999; |
39 | | |
40 | | // Maximum script length in bytes |
41 | | static const int MAX_SCRIPT_SIZE = 10000; |
42 | | |
43 | | // Maximum number of values on script interpreter stack |
44 | | static const int MAX_STACK_SIZE = 1000; |
45 | | |
46 | | // Threshold for nLockTime: below this value it is interpreted as block number, |
47 | | // otherwise as UNIX timestamp. |
48 | | static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC |
49 | | |
50 | | // Maximum nLockTime. Since a lock time indicates the last invalid timestamp, a |
51 | | // transaction with this lock time will never be valid unless lock time |
52 | | // checking is disabled (by setting all input sequence numbers to |
53 | | // SEQUENCE_FINAL). |
54 | | static const uint32_t LOCKTIME_MAX = 0xFFFFFFFFU; |
55 | | |
56 | | // Tag for input annex. If there are at least two witness elements for a transaction input, |
57 | | // and the first byte of the last element is 0x50, this last element is called annex, and |
58 | | // has meanings independent of the script |
59 | | static constexpr unsigned int ANNEX_TAG = 0x50; |
60 | | |
61 | | // Validation weight per passing signature (Tapscript only, see BIP 342). |
62 | | static constexpr int64_t VALIDATION_WEIGHT_PER_SIGOP_PASSED{50}; |
63 | | |
64 | | // How much weight budget is added to the witness size (Tapscript only, see BIP 342). |
65 | | static constexpr int64_t VALIDATION_WEIGHT_OFFSET{50}; |
66 | | |
67 | | template <typename T> |
68 | | std::vector<unsigned char> ToByteVector(const T& in) |
69 | 2.07M | { |
70 | 2.07M | return std::vector<unsigned char>(in.begin(), in.end()); |
71 | 2.07M | } std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<CPubKey>(CPubKey const&) Line | Count | Source | 69 | 130k | { | 70 | 130k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 130k | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<CKeyID>(CKeyID const&) Line | Count | Source | 69 | 14 | { | 70 | 14 | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 14 | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<CScriptID>(CScriptID const&) Line | Count | Source | 69 | 41 | { | 70 | 41 | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 41 | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<uint160>(uint160 const&) Line | Count | Source | 69 | 42 | { | 70 | 42 | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 42 | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<uint256>(uint256 const&) Line | Count | Source | 69 | 104 | { | 70 | 104 | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 104 | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<WitnessV0ScriptHash>(WitnessV0ScriptHash const&) Line | Count | Source | 69 | 18.8k | { | 70 | 18.8k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 18.8k | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<XOnlyPubKey>(XOnlyPubKey const&) Line | Count | Source | 69 | 1.02M | { | 70 | 1.02M | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 1.02M | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<CScript>(CScript const&) Line | Count | Source | 69 | 362 | { | 70 | 362 | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 362 | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<WitnessV1Taproot>(WitnessV1Taproot const&) Line | Count | Source | 69 | 130k | { | 70 | 130k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 130k | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<std::vector<unsigned char, std::allocator<unsigned char>>>(std::vector<unsigned char, std::allocator<unsigned char>> const&) Line | Count | Source | 69 | 39.9k | { | 70 | 39.9k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 39.9k | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<PKHash>(PKHash const&) Line | Count | Source | 69 | 183k | { | 70 | 183k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 183k | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<ScriptHash>(ScriptHash const&) Line | Count | Source | 69 | 139k | { | 70 | 139k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 139k | } |
std::vector<unsigned char, std::allocator<unsigned char>> ToByteVector<WitnessV0KeyHash>(WitnessV0KeyHash const&) Line | Count | Source | 69 | 410k | { | 70 | 410k | return std::vector<unsigned char>(in.begin(), in.end()); | 71 | 410k | } |
|
72 | | |
73 | | /** Script opcodes */ |
74 | | enum opcodetype |
75 | | { |
76 | | // push value |
77 | | OP_0 = 0x00, |
78 | | OP_FALSE = OP_0, |
79 | | OP_PUSHDATA1 = 0x4c, |
80 | | OP_PUSHDATA2 = 0x4d, |
81 | | OP_PUSHDATA4 = 0x4e, |
82 | | OP_1NEGATE = 0x4f, |
83 | | OP_RESERVED = 0x50, |
84 | | OP_1 = 0x51, |
85 | | OP_TRUE=OP_1, |
86 | | OP_2 = 0x52, |
87 | | OP_3 = 0x53, |
88 | | OP_4 = 0x54, |
89 | | OP_5 = 0x55, |
90 | | OP_6 = 0x56, |
91 | | OP_7 = 0x57, |
92 | | OP_8 = 0x58, |
93 | | OP_9 = 0x59, |
94 | | OP_10 = 0x5a, |
95 | | OP_11 = 0x5b, |
96 | | OP_12 = 0x5c, |
97 | | OP_13 = 0x5d, |
98 | | OP_14 = 0x5e, |
99 | | OP_15 = 0x5f, |
100 | | OP_16 = 0x60, |
101 | | |
102 | | // control |
103 | | OP_NOP = 0x61, |
104 | | OP_VER = 0x62, |
105 | | OP_IF = 0x63, |
106 | | OP_NOTIF = 0x64, |
107 | | OP_VERIF = 0x65, |
108 | | OP_VERNOTIF = 0x66, |
109 | | OP_ELSE = 0x67, |
110 | | OP_ENDIF = 0x68, |
111 | | OP_VERIFY = 0x69, |
112 | | OP_RETURN = 0x6a, |
113 | | |
114 | | // stack ops |
115 | | OP_TOALTSTACK = 0x6b, |
116 | | OP_FROMALTSTACK = 0x6c, |
117 | | OP_2DROP = 0x6d, |
118 | | OP_2DUP = 0x6e, |
119 | | OP_3DUP = 0x6f, |
120 | | OP_2OVER = 0x70, |
121 | | OP_2ROT = 0x71, |
122 | | OP_2SWAP = 0x72, |
123 | | OP_IFDUP = 0x73, |
124 | | OP_DEPTH = 0x74, |
125 | | OP_DROP = 0x75, |
126 | | OP_DUP = 0x76, |
127 | | OP_NIP = 0x77, |
128 | | OP_OVER = 0x78, |
129 | | OP_PICK = 0x79, |
130 | | OP_ROLL = 0x7a, |
131 | | OP_ROT = 0x7b, |
132 | | OP_SWAP = 0x7c, |
133 | | OP_TUCK = 0x7d, |
134 | | |
135 | | // splice ops |
136 | | OP_CAT = 0x7e, |
137 | | OP_SUBSTR = 0x7f, |
138 | | OP_LEFT = 0x80, |
139 | | OP_RIGHT = 0x81, |
140 | | OP_SIZE = 0x82, |
141 | | |
142 | | // bit logic |
143 | | OP_INVERT = 0x83, |
144 | | OP_AND = 0x84, |
145 | | OP_OR = 0x85, |
146 | | OP_XOR = 0x86, |
147 | | OP_EQUAL = 0x87, |
148 | | OP_EQUALVERIFY = 0x88, |
149 | | OP_RESERVED1 = 0x89, |
150 | | OP_RESERVED2 = 0x8a, |
151 | | |
152 | | // numeric |
153 | | OP_1ADD = 0x8b, |
154 | | OP_1SUB = 0x8c, |
155 | | OP_2MUL = 0x8d, |
156 | | OP_2DIV = 0x8e, |
157 | | OP_NEGATE = 0x8f, |
158 | | OP_ABS = 0x90, |
159 | | OP_NOT = 0x91, |
160 | | OP_0NOTEQUAL = 0x92, |
161 | | |
162 | | OP_ADD = 0x93, |
163 | | OP_SUB = 0x94, |
164 | | OP_MUL = 0x95, |
165 | | OP_DIV = 0x96, |
166 | | OP_MOD = 0x97, |
167 | | OP_LSHIFT = 0x98, |
168 | | OP_RSHIFT = 0x99, |
169 | | |
170 | | OP_BOOLAND = 0x9a, |
171 | | OP_BOOLOR = 0x9b, |
172 | | OP_NUMEQUAL = 0x9c, |
173 | | OP_NUMEQUALVERIFY = 0x9d, |
174 | | OP_NUMNOTEQUAL = 0x9e, |
175 | | OP_LESSTHAN = 0x9f, |
176 | | OP_GREATERTHAN = 0xa0, |
177 | | OP_LESSTHANOREQUAL = 0xa1, |
178 | | OP_GREATERTHANOREQUAL = 0xa2, |
179 | | OP_MIN = 0xa3, |
180 | | OP_MAX = 0xa4, |
181 | | |
182 | | OP_WITHIN = 0xa5, |
183 | | |
184 | | // crypto |
185 | | OP_RIPEMD160 = 0xa6, |
186 | | OP_SHA1 = 0xa7, |
187 | | OP_SHA256 = 0xa8, |
188 | | OP_HASH160 = 0xa9, |
189 | | OP_HASH256 = 0xaa, |
190 | | OP_CODESEPARATOR = 0xab, |
191 | | OP_CHECKSIG = 0xac, |
192 | | OP_CHECKSIGVERIFY = 0xad, |
193 | | OP_CHECKMULTISIG = 0xae, |
194 | | OP_CHECKMULTISIGVERIFY = 0xaf, |
195 | | |
196 | | // expansion |
197 | | OP_NOP1 = 0xb0, |
198 | | OP_CHECKLOCKTIMEVERIFY = 0xb1, |
199 | | OP_NOP2 = OP_CHECKLOCKTIMEVERIFY, |
200 | | OP_CHECKSEQUENCEVERIFY = 0xb2, |
201 | | OP_NOP3 = OP_CHECKSEQUENCEVERIFY, |
202 | | OP_NOP4 = 0xb3, |
203 | | OP_NOP5 = 0xb4, |
204 | | OP_NOP6 = 0xb5, |
205 | | OP_NOP7 = 0xb6, |
206 | | OP_NOP8 = 0xb7, |
207 | | OP_NOP9 = 0xb8, |
208 | | OP_NOP10 = 0xb9, |
209 | | |
210 | | // Opcode added by BIP 342 (Tapscript) |
211 | | OP_CHECKSIGADD = 0xba, |
212 | | |
213 | | OP_INVALIDOPCODE = 0xff, |
214 | | }; |
215 | | |
216 | | // Maximum value that an opcode can be |
217 | | static const unsigned int MAX_OPCODE = OP_NOP10; |
218 | | |
219 | | std::string GetOpName(opcodetype opcode); |
220 | | |
221 | | class scriptnum_error : public std::runtime_error |
222 | | { |
223 | | public: |
224 | 9.29k | explicit scriptnum_error(const std::string& str) : std::runtime_error(str) {} |
225 | | }; |
226 | | |
227 | | class CScriptNum |
228 | | { |
229 | | /** |
230 | | * Numeric opcodes (OP_1ADD, etc) are restricted to operating on 4-byte integers. |
231 | | * The semantics are subtle, though: operands must be in the range [-2^31 +1...2^31 -1], |
232 | | * but results may overflow (and are valid as long as they are not used in a subsequent |
233 | | * numeric operation). CScriptNum enforces those semantics by storing results as |
234 | | * an int64 and allowing out-of-range values to be returned as a vector of bytes but |
235 | | * throwing an exception if arithmetic is done or the result is interpreted as an integer. |
236 | | */ |
237 | | public: |
238 | | |
239 | | explicit CScriptNum(const int64_t& n) |
240 | 1.08M | { |
241 | 1.08M | m_value = n; |
242 | 1.08M | } |
243 | | |
244 | | static const size_t nDefaultMaxNumSize = 4; |
245 | | |
246 | | explicit CScriptNum(const std::vector<unsigned char>& vch, bool fRequireMinimal, |
247 | | const size_t nMaxNumSize = nDefaultMaxNumSize) |
248 | 8.91M | { |
249 | 8.91M | if (vch.size() > nMaxNumSize) { |
250 | 1.89k | throw scriptnum_error("script number overflow"); |
251 | 1.89k | } |
252 | 8.91M | if (fRequireMinimal && vch.size() > 0) { |
253 | | // Check that the number is encoded with the minimum possible |
254 | | // number of bytes. |
255 | | // |
256 | | // If the most-significant-byte - excluding the sign bit - is zero |
257 | | // then we're not minimal. Note how this test also rejects the |
258 | | // negative-zero encoding, 0x80. |
259 | 7.96M | if ((vch.back() & 0x7f) == 0) { |
260 | | // One exception: if there's more than one byte and the most |
261 | | // significant bit of the second-most-significant-byte is set |
262 | | // it would conflict with the sign bit. An example of this case |
263 | | // is +-255, which encode to 0xff00 and 0xff80 respectively. |
264 | | // (big-endian). |
265 | 7.90k | if (vch.size() <= 1 || (vch[vch.size() - 2] & 0x80) == 0) { |
266 | 7.39k | throw scriptnum_error("non-minimally encoded script number"); |
267 | 7.39k | } |
268 | 7.90k | } |
269 | 7.96M | } |
270 | 8.90M | m_value = set_vch(vch); |
271 | 8.90M | } |
272 | | |
273 | 8.31M | inline bool operator==(const int64_t& rhs) const { return m_value == rhs; } |
274 | 86.6k | inline auto operator<=>(const int64_t& rhs) const { return m_value <=> rhs; } |
275 | | |
276 | 8.29M | inline bool operator==(const CScriptNum& rhs) const { return operator==(rhs.m_value); } |
277 | 29.9k | inline auto operator<=>(const CScriptNum& rhs) const { return operator<=>(rhs.m_value); } |
278 | | |
279 | 201k | inline CScriptNum operator+( const int64_t& rhs) const { return CScriptNum(m_value + rhs);} |
280 | 7.02k | inline CScriptNum operator-( const int64_t& rhs) const { return CScriptNum(m_value - rhs);} |
281 | 10.3k | inline CScriptNum operator+( const CScriptNum& rhs) const { return operator+(rhs.m_value); } |
282 | 4.21k | inline CScriptNum operator-( const CScriptNum& rhs) const { return operator-(rhs.m_value); } |
283 | | |
284 | 1.82k | inline CScriptNum& operator+=( const CScriptNum& rhs) { return operator+=(rhs.m_value); } |
285 | 814 | inline CScriptNum& operator-=( const CScriptNum& rhs) { return operator-=(rhs.m_value); } |
286 | | |
287 | 19.3k | inline CScriptNum operator&( const int64_t& rhs) const { return CScriptNum(m_value & rhs);} |
288 | 0 | inline CScriptNum operator&( const CScriptNum& rhs) const { return operator&(rhs.m_value); } |
289 | | |
290 | 0 | inline CScriptNum& operator&=( const CScriptNum& rhs) { return operator&=(rhs.m_value); } |
291 | | |
292 | | inline CScriptNum operator-() const |
293 | 2.94k | { |
294 | 2.94k | assert(m_value != std::numeric_limits<int64_t>::min()); |
295 | 2.94k | return CScriptNum(-m_value); |
296 | 2.94k | } |
297 | | |
298 | | inline CScriptNum& operator=( const int64_t& rhs) |
299 | 8.28M | { |
300 | 8.28M | m_value = rhs; |
301 | 8.28M | return *this; |
302 | 8.28M | } |
303 | | |
304 | | inline CScriptNum& operator+=( const int64_t& rhs) |
305 | 1.82k | { |
306 | 1.82k | assert(rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits<int64_t>::max() - rhs) || |
307 | 1.82k | (rhs < 0 && m_value >= std::numeric_limits<int64_t>::min() - rhs)); |
308 | 1.82k | m_value += rhs; |
309 | 1.82k | return *this; |
310 | 1.82k | } |
311 | | |
312 | | inline CScriptNum& operator-=( const int64_t& rhs) |
313 | 814 | { |
314 | 814 | assert(rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits<int64_t>::min() + rhs) || |
315 | 814 | (rhs < 0 && m_value <= std::numeric_limits<int64_t>::max() + rhs)); |
316 | 814 | m_value -= rhs; |
317 | 814 | return *this; |
318 | 814 | } |
319 | | |
320 | | inline CScriptNum& operator&=( const int64_t& rhs) |
321 | 0 | { |
322 | 0 | m_value &= rhs; |
323 | 0 | return *this; |
324 | 0 | } |
325 | | |
326 | | int getint() const |
327 | 348k | { |
328 | 348k | if (m_value > std::numeric_limits<int>::max()) |
329 | 1.22k | return std::numeric_limits<int>::max(); |
330 | 347k | else if (m_value < std::numeric_limits<int>::min()) |
331 | 874 | return std::numeric_limits<int>::min(); |
332 | 346k | return m_value; |
333 | 348k | } |
334 | | |
335 | 11.3k | int64_t GetInt64() const { return m_value; } |
336 | | |
337 | | std::vector<unsigned char> getvch() const |
338 | 9.30M | { |
339 | 9.30M | return serialize(m_value); |
340 | 9.30M | } |
341 | | |
342 | | static std::vector<unsigned char> serialize(const int64_t& value) |
343 | 9.57M | { |
344 | 9.57M | if(value == 0) |
345 | 116k | return std::vector<unsigned char>(); |
346 | | |
347 | 9.45M | std::vector<unsigned char> result; |
348 | 9.45M | const bool neg = value < 0; |
349 | 9.45M | uint64_t absvalue = neg ? ~static_cast<uint64_t>(value) + 1 : static_cast<uint64_t>(value); |
350 | | |
351 | 19.1M | while(absvalue) |
352 | 9.69M | { |
353 | 9.69M | result.push_back(absvalue & 0xff); |
354 | 9.69M | absvalue >>= 8; |
355 | 9.69M | } |
356 | | |
357 | | // - If the most significant byte is >= 0x80 and the value is positive, push a |
358 | | // new zero-byte to make the significant byte < 0x80 again. |
359 | | |
360 | | // - If the most significant byte is >= 0x80 and the value is negative, push a |
361 | | // new 0x80 byte that will be popped off when converting to an integral. |
362 | | |
363 | | // - If the most significant byte is < 0x80 and the value is negative, add |
364 | | // 0x80 to it, since it will be subtracted and interpreted as a negative when |
365 | | // converting to an integral. |
366 | | |
367 | 9.45M | if (result.back() & 0x80) |
368 | 66.3k | result.push_back(neg ? 0x80 : 0); |
369 | 9.39M | else if (neg) |
370 | 12.2k | result.back() |= 0x80; |
371 | | |
372 | 9.45M | return result; |
373 | 9.57M | } |
374 | | |
375 | | private: |
376 | | static int64_t set_vch(const std::vector<unsigned char>& vch) |
377 | 8.90M | { |
378 | 8.90M | if (vch.empty()) |
379 | 397k | return 0; |
380 | | |
381 | 8.51M | int64_t result = 0; |
382 | 17.0M | for (size_t i = 0; i != vch.size(); ++i) |
383 | 8.56M | result |= static_cast<int64_t>(vch[i]) << 8*i; |
384 | | |
385 | | // If the input vector's most significant byte is 0x80, remove it from |
386 | | // the result's msb and return a negative. |
387 | 8.51M | if (vch.back() & 0x80) |
388 | 19.1k | return -((int64_t)(result & ~(0x80ULL << (8 * (vch.size() - 1))))); |
389 | | |
390 | 8.49M | return result; |
391 | 8.51M | } |
392 | | |
393 | | int64_t m_value; |
394 | | }; |
395 | | |
396 | | /** |
397 | | * We use a prevector for the script to reduce the considerable memory overhead |
398 | | * of vectors in cases where they normally contain a small number of small elements. |
399 | | */ |
400 | | using CScriptBase = prevector<36, uint8_t>; |
401 | | |
402 | | bool GetScriptOp(CScriptBase::const_iterator& pc, CScriptBase::const_iterator end, opcodetype& opcodeRet, std::vector<unsigned char>* pvchRet); |
403 | | |
404 | | /** Serialized script, used inside transaction inputs and outputs */ |
405 | | class CScript : public CScriptBase |
406 | | { |
407 | | private: |
408 | | inline void AppendDataSize(const uint32_t size) |
409 | 2.68M | { |
410 | 2.68M | if (size < OP_PUSHDATA1) { |
411 | 2.68M | insert(end(), static_cast<value_type>(size)); |
412 | 2.68M | } else if (size <= 0xff) { |
413 | 2.48k | insert(end(), OP_PUSHDATA1); |
414 | 2.48k | insert(end(), static_cast<value_type>(size)); |
415 | 2.48k | } else if (size <= 0xffff) { |
416 | 377 | insert(end(), OP_PUSHDATA2); |
417 | 377 | value_type data[2]; |
418 | 377 | WriteLE16(data, size); |
419 | 377 | insert(end(), std::cbegin(data), std::cend(data)); |
420 | 377 | } else { |
421 | 3 | insert(end(), OP_PUSHDATA4); |
422 | 3 | value_type data[4]; |
423 | 3 | WriteLE32(data, size); |
424 | 3 | insert(end(), std::cbegin(data), std::cend(data)); |
425 | 3 | } |
426 | 2.68M | } |
427 | | |
428 | | void AppendData(std::span<const value_type> data) |
429 | 2.68M | { |
430 | 2.68M | insert(end(), data.begin(), data.end()); |
431 | 2.68M | } |
432 | | |
433 | | protected: |
434 | | CScript& push_int64(int64_t n) |
435 | 344k | { |
436 | 344k | if (n == -1 || (n >= 1 && n <= 16)) |
437 | 69.4k | { |
438 | 69.4k | push_back(n + (OP_1 - 1)); |
439 | 69.4k | } |
440 | 274k | else if (n == 0) |
441 | 2.87k | { |
442 | 2.87k | push_back(OP_0); |
443 | 2.87k | } |
444 | 271k | else |
445 | 271k | { |
446 | 271k | *this << CScriptNum::serialize(n); |
447 | 271k | } |
448 | 344k | return *this; |
449 | 344k | } |
450 | | |
451 | | public: |
452 | 91.3M | CScript() = default; |
453 | | template <std::input_iterator InputIterator> |
454 | 605k | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { }CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char>>>>(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char>>>, __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char>>>) Line | Count | Source | 454 | 36.9k | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<unsigned char const*>(unsigned char const*, unsigned char const*) Line | Count | Source | 454 | 13 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 18446744073709551615ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 18446744073709551615ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 18446744073709551615ul>::__iter_tag>) Line | Count | Source | 454 | 6.90k | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char>>>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char>>>, __gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char>>>) Line | Count | Source | 454 | 194k | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 4ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 4ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 4ul>::__iter_tag>) Line | Count | Source | 454 | 7 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 8ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 8ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 8ul>::__iter_tag>) Line | Count | Source | 454 | 4 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 1ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 1ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 1ul>::__iter_tag>) Line | Count | Source | 454 | 6 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 5ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 5ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 5ul>::__iter_tag>) Line | Count | Source | 454 | 2 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 3ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 3ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 3ul>::__iter_tag>) Line | Count | Source | 454 | 7 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 7ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 7ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 7ul>::__iter_tag>) Line | Count | Source | 454 | 2 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 25ul>::__iter_tag>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 25ul>::__iter_tag>, __gnu_cxx::__normal_iterator<unsigned char const*, std::span<unsigned char const, 25ul>::__iter_tag>) Line | Count | Source | 454 | 2 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
CScript::CScript<prevector<36u, unsigned char, unsigned int, int>::const_iterator>(prevector<36u, unsigned char, unsigned int, int>::const_iterator, prevector<36u, unsigned char, unsigned int, int>::const_iterator) Line | Count | Source | 454 | 366k | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } |
|
455 | | |
456 | 30.6M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); }void CScript::SerializationOps<ParamsStream<SizeComputer&, TransactionSerParams>, CScript const, ActionSerialize>(CScript const&, ParamsStream<SizeComputer&, TransactionSerParams>&, ActionSerialize) Line | Count | Source | 456 | 7.43M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<DataStream&, TransactionSerParams>, CScript, ActionUnserialize>(CScript&, ParamsStream<DataStream&, TransactionSerParams>&, ActionUnserialize) Line | Count | Source | 456 | 383k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<DataStream&, TransactionSerParams>, CScript const, ActionSerialize>(CScript const&, ParamsStream<DataStream&, TransactionSerParams>&, ActionSerialize) Line | Count | Source | 456 | 197k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<DataStream, CScript, ActionUnserialize>(CScript&, DataStream&, ActionUnserialize) Line | Count | Source | 456 | 9.75k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<SpanReader, CScript, ActionUnserialize>(CScript&, SpanReader&, ActionUnserialize) Line | Count | Source | 456 | 6.85k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<HashWriter&, TransactionSerParams>, CScript const, ActionSerialize>(CScript const&, ParamsStream<HashWriter&, TransactionSerParams>&, ActionSerialize) Line | Count | Source | 456 | 5.33M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<SpanReader&, TransactionSerParams>, CScript, ActionUnserialize>(CScript&, ParamsStream<SpanReader&, TransactionSerParams>&, ActionUnserialize) Line | Count | Source | 456 | 794k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<SizeComputer, CScript const, ActionSerialize>(CScript const&, SizeComputer&, ActionSerialize) Line | Count | Source | 456 | 375k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<DataStream, CScript const, ActionSerialize>(CScript const&, DataStream&, ActionSerialize) Line | Count | Source | 456 | 9.02k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<AutoFile&, TransactionSerParams>, CScript, ActionUnserialize>(CScript&, ParamsStream<AutoFile&, TransactionSerParams>&, ActionUnserialize) Line | Count | Source | 456 | 1.24k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<HashWriter, CScript const, ActionSerialize>(CScript const&, HashWriter&, ActionSerialize) Line | Count | Source | 456 | 15.3M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<VectorWriter&, TransactionSerParams>, CScript const, ActionSerialize>(CScript const&, ParamsStream<VectorWriter&, TransactionSerParams>&, ActionSerialize) Line | Count | Source | 456 | 242k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<BufferedWriter<AutoFile>&, TransactionSerParams>, CScript const, ActionSerialize>(CScript const&, ParamsStream<BufferedWriter<AutoFile>&, TransactionSerParams>&, ActionSerialize) Line | Count | Source | 456 | 557k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<AutoFile&, TransactionSerParams>, CScript const, ActionSerialize>(CScript const&, ParamsStream<AutoFile&, TransactionSerParams>&, ActionSerialize) Line | Count | Source | 456 | 4.38k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
void CScript::SerializationOps<ParamsStream<BufferedFile&, TransactionSerParams>, CScript, ActionUnserialize>(CScript&, ParamsStream<BufferedFile&, TransactionSerParams>&, ActionUnserialize) Line | Count | Source | 456 | 5.83k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } |
|
457 | | |
458 | 0 | explicit CScript(int64_t b) { operator<<(b); } |
459 | 50.0k | explicit CScript(opcodetype b) { operator<<(b); } |
460 | 0 | explicit CScript(const CScriptNum& b) { operator<<(b); } |
461 | | // delete non-existent constructor to defend against future introduction |
462 | | // e.g. via prevector |
463 | | explicit CScript(const std::vector<unsigned char>& b) = delete; |
464 | | |
465 | | /** Delete non-existent operator to defend against future introduction */ |
466 | | CScript& operator<<(const CScript& b) = delete; |
467 | | |
468 | 344k | CScript& operator<<(int64_t b) LIFETIMEBOUND { return push_int64(b); } |
469 | | |
470 | | CScript& operator<<(opcodetype opcode) LIFETIMEBOUND |
471 | 6.23M | { |
472 | 6.23M | if (opcode < 0 || opcode > 0xff) |
473 | 0 | throw std::runtime_error("CScript::operator<<(): invalid opcode"); |
474 | 6.23M | insert(end(), (unsigned char)opcode); |
475 | 6.23M | return *this; |
476 | 6.23M | } |
477 | | |
478 | | CScript& operator<<(const CScriptNum& b) LIFETIMEBOUND |
479 | 14.8k | { |
480 | 14.8k | *this << b.getvch(); |
481 | 14.8k | return *this; |
482 | 14.8k | } |
483 | | |
484 | | CScript& operator<<(std::span<const std::byte> b) LIFETIMEBOUND |
485 | 2.68M | { |
486 | 2.68M | AppendDataSize(b.size()); |
487 | 2.68M | AppendData({reinterpret_cast<const value_type*>(b.data()), b.size()}); |
488 | 2.68M | return *this; |
489 | 2.68M | } |
490 | | |
491 | | // For compatibility reasons. In new code, prefer using std::byte instead of uint8_t. |
492 | | CScript& operator<<(std::span<const value_type> b) LIFETIMEBOUND |
493 | 2.67M | { |
494 | 2.67M | return *this << std::as_bytes(b); |
495 | 2.67M | } |
496 | | |
497 | | bool GetOp(const_iterator& pc, opcodetype& opcodeRet, std::vector<unsigned char>& vchRet) const |
498 | 70.5M | { |
499 | 70.5M | return GetScriptOp(pc, end(), opcodeRet, &vchRet); |
500 | 70.5M | } |
501 | | |
502 | | bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const |
503 | 618M | { |
504 | 618M | return GetScriptOp(pc, end(), opcodeRet, nullptr); |
505 | 618M | } |
506 | | |
507 | | /** Encode/decode small integers: */ |
508 | | static int DecodeOP_N(opcodetype opcode) |
509 | 1.35M | { |
510 | 1.35M | if (opcode == OP_0) |
511 | 792k | return 0; |
512 | 1.35M | assert(opcode >= OP_1 && opcode <= OP_16); |
513 | 565k | return (int)opcode - (int)(OP_1 - 1); |
514 | 565k | } |
515 | | static opcodetype EncodeOP_N(int n) |
516 | 122 | { |
517 | 122 | assert(n >= 0 && n <= 16); |
518 | 122 | if (n == 0) |
519 | 0 | return OP_0; |
520 | 122 | return (opcodetype)(OP_1+n-1); |
521 | 122 | } |
522 | | |
523 | | /** |
524 | | * Pre-version-0.6, Bitcoin always counted CHECKMULTISIGs |
525 | | * as 20 sigops. With pay-to-script-hash, that changed: |
526 | | * CHECKMULTISIGs serialized in scriptSigs are |
527 | | * counted more accurately, assuming they are of the form |
528 | | * ... OP_N CHECKMULTISIG ... |
529 | | */ |
530 | | unsigned int GetSigOpCount(bool fAccurate) const; |
531 | | |
532 | | /** |
533 | | * Accurately count sigOps, including sigOps in |
534 | | * pay-to-script-hash transactions: |
535 | | */ |
536 | | unsigned int GetSigOpCount(const CScript& scriptSig) const; |
537 | | |
538 | | /* |
539 | | * OP_1 <0x4e73> |
540 | | */ |
541 | | bool IsPayToAnchor() const; |
542 | | /** Checks if output of IsWitnessProgram comes from a P2A output script |
543 | | */ |
544 | | static bool IsPayToAnchor(int version, const std::vector<unsigned char>& program); |
545 | | |
546 | | bool IsPayToScriptHash() const; |
547 | | bool IsPayToWitnessScriptHash() const; |
548 | | bool IsWitnessProgram(int& version, std::vector<unsigned char>& program) const; |
549 | | |
550 | | bool IsPayToTaproot() const; |
551 | | |
552 | | /** Called by IsStandardTx and P2SH/BIP62 VerifyScript (which makes it consensus-critical). */ |
553 | | bool IsPushOnly(const_iterator pc) const; |
554 | | bool IsPushOnly() const; |
555 | | |
556 | | /** Check if the script contains valid OP_CODES */ |
557 | | bool HasValidOps() const; |
558 | | |
559 | | /** |
560 | | * Returns whether the script is guaranteed to fail at execution, |
561 | | * regardless of the initial stack. This allows outputs to be pruned |
562 | | * instantly when entering the UTXO set. |
563 | | */ |
564 | | bool IsUnspendable() const |
565 | 21.9M | { |
566 | 21.9M | return (size() > 0 && *begin() == OP_RETURN) || (size() > MAX_SCRIPT_SIZE); |
567 | 21.9M | } |
568 | | |
569 | | void clear() |
570 | 88.0M | { |
571 | | // The default prevector::clear() does not release memory |
572 | 88.0M | CScriptBase::clear(); |
573 | 88.0M | shrink_to_fit(); |
574 | 88.0M | } |
575 | | }; |
576 | | |
577 | | struct CScriptWitness |
578 | | { |
579 | | // Note that this encodes the data elements being pushed, rather than |
580 | | // encoding them as a CScript that pushes them. |
581 | | std::vector<std::vector<unsigned char> > stack; |
582 | | |
583 | | // Some compilers complain without a default constructor |
584 | 9.33M | CScriptWitness() = default; |
585 | | |
586 | 1.60M | bool IsNull() const { return stack.empty(); } |
587 | | |
588 | 8.88k | void SetNull() { stack.clear(); stack.shrink_to_fit(); } |
589 | | |
590 | | std::string ToString() const; |
591 | | |
592 | | bool operator==(const CScriptWitness&) const = default; |
593 | | }; |
594 | | |
595 | | /** A reference to a CScript: the Hash160 of its serialization */ |
596 | | class CScriptID : public BaseHash<uint160> |
597 | | { |
598 | | public: |
599 | 392k | CScriptID() : BaseHash() {} |
600 | | explicit CScriptID(const CScript& in); |
601 | 66.2k | explicit CScriptID(const uint160& in) : BaseHash(in) {} |
602 | | }; |
603 | | |
604 | | /** Test for OP_SUCCESSx opcodes as defined by BIP342. */ |
605 | | bool IsOpSuccess(const opcodetype& opcode); |
606 | | |
607 | | bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode); |
608 | | |
609 | | /** Build a script by concatenating other scripts, or any argument accepted by CScript::operator<<. */ |
610 | | template<typename... Ts> |
611 | | CScript BuildScript(Ts&&... inputs) |
612 | 1.70M | { |
613 | 1.70M | CScript ret; |
614 | 1.70M | int cnt{0}; |
615 | | |
616 | 3.41M | ([&ret, &cnt] (Ts&& input) { |
617 | 3.41M | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { |
618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. |
619 | 1.68M | if (cnt == 0) { |
620 | 1.66M | ret = std::forward<Ts>(input); |
621 | 1.66M | } else { |
622 | 22.7k | ret.insert(ret.end(), input.begin(), input.end()); |
623 | 22.7k | } |
624 | 1.72M | } else { |
625 | | // Otherwise invoke CScript::operator<<. |
626 | 1.72M | ret << input; |
627 | 1.72M | } |
628 | 3.41M | cnt++; |
629 | 3.41M | } (std::forward<Ts>(inputs)), ...); CScript BuildScript<std::vector<unsigned char, std::allocator<unsigned char>>>(std::vector<unsigned char, std::allocator<unsigned char>>&&)::'lambda'(std::vector<unsigned char, std::allocator<unsigned char>>&&)::operator()(std::vector<unsigned char, std::allocator<unsigned char>>&&) const Line | Count | Source | 616 | 3.63k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 3.63k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 3.63k | ret << input; | 627 | 3.63k | } | 628 | 3.63k | cnt++; | 629 | 3.63k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 590 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 590 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 590 | ret << input; | 627 | 590 | } | 628 | 590 | cnt++; | 629 | 590 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 590 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 590 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 590 | ret << input; | 627 | 590 | } | 628 | 590 | cnt++; | 629 | 590 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(std::vector<unsigned char, std::allocator<unsigned char>>&&)::operator()(std::vector<unsigned char, std::allocator<unsigned char>>&&) const Line | Count | Source | 616 | 590 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 590 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 590 | ret << input; | 627 | 590 | } | 628 | 590 | cnt++; | 629 | 590 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 590 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 590 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 590 | ret << input; | 627 | 590 | } | 628 | 590 | cnt++; | 629 | 590 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<unsigned int const&, opcodetype>(unsigned int const&, opcodetype&&)::'lambda'(unsigned int const&)::operator()(unsigned int const&) const Line | Count | Source | 616 | 7.66k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 7.66k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 7.66k | ret << input; | 627 | 7.66k | } | 628 | 7.66k | cnt++; | 629 | 7.66k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<unsigned int const&, opcodetype>(unsigned int const&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 7.66k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 7.66k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 7.66k | ret << input; | 627 | 7.66k | } | 628 | 7.66k | cnt++; | 629 | 7.66k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&)::'lambda2'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&)::'lambda'(int&&)::operator()(int&&) const Line | Count | Source | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&)::'lambda'(std::vector<unsigned char, std::allocator<unsigned char>> const&)::operator()(std::vector<unsigned char, std::allocator<unsigned char>> const&) const Line | Count | Source | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 7.82k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 7.82k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 7.82k | ret << input; | 627 | 7.82k | } | 628 | 7.82k | cnt++; | 629 | 7.82k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 7.82k | ([&ret, &cnt] (Ts&& input) { | 617 | 7.82k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 7.82k | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 7.82k | } else { | 622 | 7.82k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 7.82k | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 7.82k | cnt++; | 629 | 7.82k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 7.82k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 7.82k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 7.82k | ret << input; | 627 | 7.82k | } | 628 | 7.82k | cnt++; | 629 | 7.82k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&>(opcodetype&&, CScript&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 1.48k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 1.48k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.48k | ret << input; | 627 | 1.48k | } | 628 | 1.48k | cnt++; | 629 | 1.48k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&>(opcodetype&&, CScript&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 1.48k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.48k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.48k | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 1.48k | } else { | 622 | 1.48k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.48k | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 1.48k | cnt++; | 629 | 1.48k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype>(CScript&&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 1.65M | ([&ret, &cnt] (Ts&& input) { | 617 | 1.65M | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.65M | if (cnt == 0) { | 620 | 1.65M | ret = std::forward<Ts>(input); | 621 | 1.65M | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 1.65M | cnt++; | 629 | 1.65M | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype>(CScript&&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 1.65M | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 1.65M | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.65M | ret << input; | 627 | 1.65M | } | 628 | 1.65M | cnt++; | 629 | 1.65M | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | 145 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 145 | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 145 | } else { | 622 | 145 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 145 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda2'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 24 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 24 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 24 | ret << input; | 627 | 24 | } | 628 | 24 | cnt++; | 629 | 24 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 24 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 24 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 24 | ret << input; | 627 | 24 | } | 628 | 24 | cnt++; | 629 | 24 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 24 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 24 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 24 | ret << input; | 627 | 24 | } | 628 | 24 | cnt++; | 629 | 24 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 24 | ([&ret, &cnt] (Ts&& input) { | 617 | 24 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 24 | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 24 | } else { | 622 | 24 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 24 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 24 | cnt++; | 629 | 24 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 24 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 24 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 24 | ret << input; | 627 | 24 | } | 628 | 24 | cnt++; | 629 | 24 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype>(opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 1.37k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 1.37k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.37k | ret << input; | 627 | 1.37k | } | 628 | 1.37k | cnt++; | 629 | 1.37k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, CScript&>(CScript&&, CScript&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 1.11k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.11k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.11k | if (cnt == 0) { | 620 | 1.11k | ret = std::forward<Ts>(input); | 621 | 1.11k | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 1.11k | cnt++; | 629 | 1.11k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, CScript&>(CScript&&, CScript&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 1.11k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.11k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.11k | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 1.11k | } else { | 622 | 1.11k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.11k | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 1.11k | cnt++; | 629 | 1.11k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, CScript&, opcodetype>(CScript&&, CScript&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 9.31k | ([&ret, &cnt] (Ts&& input) { | 617 | 9.31k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 9.31k | if (cnt == 0) { | 620 | 9.31k | ret = std::forward<Ts>(input); | 621 | 9.31k | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 9.31k | cnt++; | 629 | 9.31k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, CScript&, opcodetype>(CScript&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 9.31k | ([&ret, &cnt] (Ts&& input) { | 617 | 9.31k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 9.31k | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 9.31k | } else { | 622 | 9.31k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 9.31k | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 9.31k | cnt++; | 629 | 9.31k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, CScript&, opcodetype>(CScript&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 9.31k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 9.31k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 9.31k | ret << input; | 627 | 9.31k | } | 628 | 9.31k | cnt++; | 629 | 9.31k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 150 | ([&ret, &cnt] (Ts&& input) { | 617 | 150 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 150 | if (cnt == 0) { | 620 | 150 | ret = std::forward<Ts>(input); | 621 | 150 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 150 | cnt++; | 629 | 150 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 150 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 150 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 150 | ret << input; | 627 | 150 | } | 628 | 150 | cnt++; | 629 | 150 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 150 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 150 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 150 | ret << input; | 627 | 150 | } | 628 | 150 | cnt++; | 629 | 150 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 150 | ([&ret, &cnt] (Ts&& input) { | 617 | 150 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 150 | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 150 | } else { | 622 | 150 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 150 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 150 | cnt++; | 629 | 150 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 150 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 150 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 150 | ret << input; | 627 | 150 | } | 628 | 150 | cnt++; | 629 | 150 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 57 | ([&ret, &cnt] (Ts&& input) { | 617 | 57 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 57 | if (cnt == 0) { | 620 | 57 | ret = std::forward<Ts>(input); | 621 | 57 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 57 | cnt++; | 629 | 57 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 57 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 57 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 57 | ret << input; | 627 | 57 | } | 628 | 57 | cnt++; | 629 | 57 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 57 | ([&ret, &cnt] (Ts&& input) { | 617 | 57 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 57 | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 57 | } else { | 622 | 57 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 57 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 57 | cnt++; | 629 | 57 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 57 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 57 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 57 | ret << input; | 627 | 57 | } | 628 | 57 | cnt++; | 629 | 57 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 1.05k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 1.05k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.05k | ret << input; | 627 | 1.05k | } | 628 | 1.05k | cnt++; | 629 | 1.05k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 1.05k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.05k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.05k | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 1.05k | } else { | 622 | 1.05k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.05k | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 1.05k | cnt++; | 629 | 1.05k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 1.05k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 1.05k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.05k | ret << input; | 627 | 1.05k | } | 628 | 1.05k | cnt++; | 629 | 1.05k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 1.05k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.05k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.05k | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 1.05k | } else { | 622 | 1.05k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.05k | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 1.05k | cnt++; | 629 | 1.05k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<opcodetype, CScript&, opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 1.05k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 1.05k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.05k | ret << input; | 627 | 1.05k | } | 628 | 1.05k | cnt++; | 629 | 1.05k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | 262 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 262 | if (cnt == 0) { | 620 | 262 | ret = std::forward<Ts>(input); | 621 | 262 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda1'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 262 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 262 | ret << input; | 627 | 262 | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | 262 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 262 | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 262 | } else { | 622 | 262 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 262 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda0'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 262 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 262 | ret << input; | 627 | 262 | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(CScript&)::operator()(CScript&) const Line | Count | Source | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | 262 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 262 | if (cnt == 0) { | 620 | 0 | ret = std::forward<Ts>(input); | 621 | 262 | } else { | 622 | 262 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 262 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 262 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 262 | ret << input; | 627 | 262 | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<unsigned int const&>(unsigned int const&)::'lambda'(unsigned int const&)::operator()(unsigned int const&) const Line | Count | Source | 616 | 212 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 212 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 212 | ret << input; | 627 | 212 | } | 628 | 212 | cnt++; | 629 | 212 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 445 | ([&ret, &cnt] (Ts&& input) { | 617 | 445 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 445 | if (cnt == 0) { | 620 | 445 | ret = std::forward<Ts>(input); | 621 | 445 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 445 | cnt++; | 629 | 445 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&)::'lambda'(std::vector<unsigned char, std::allocator<unsigned char>>&&)::operator()(std::vector<unsigned char, std::allocator<unsigned char>>&&) const Line | Count | Source | 616 | 445 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 445 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 445 | ret << input; | 627 | 445 | } | 628 | 445 | cnt++; | 629 | 445 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, unsigned long, opcodetype>(CScript&&, unsigned long&&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 212 | ([&ret, &cnt] (Ts&& input) { | 617 | 212 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 212 | if (cnt == 0) { | 620 | 212 | ret = std::forward<Ts>(input); | 621 | 212 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 212 | cnt++; | 629 | 212 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, unsigned long, opcodetype>(CScript&&, unsigned long&&, opcodetype&&)::'lambda'(unsigned long&&)::operator()(unsigned long&&) const Line | Count | Source | 616 | 212 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 212 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 212 | ret << input; | 627 | 212 | } | 628 | 212 | cnt++; | 629 | 212 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, unsigned long, opcodetype>(CScript&&, unsigned long&&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 212 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 212 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 212 | ret << input; | 627 | 212 | } | 628 | 212 | cnt++; | 629 | 212 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(std::vector<unsigned char, std::allocator<unsigned char>>&&)::operator()(std::vector<unsigned char, std::allocator<unsigned char>>&&) const Line | Count | Source | 616 | 52 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 52 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 52 | ret << input; | 627 | 52 | } | 628 | 52 | cnt++; | 629 | 52 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 52 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 52 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 52 | ret << input; | 627 | 52 | } | 628 | 52 | cnt++; | 629 | 52 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | 145 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 145 | if (cnt == 0) { | 620 | 145 | ret = std::forward<Ts>(input); | 621 | 145 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(std::vector<unsigned char, std::allocator<unsigned char>>&&)::operator()(std::vector<unsigned char, std::allocator<unsigned char>>&&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, unsigned int const&, opcodetype>(CScript&&, unsigned int const&, opcodetype&&)::'lambda'(CScript&&)::operator()(CScript&&) const Line | Count | Source | 616 | 600 | ([&ret, &cnt] (Ts&& input) { | 617 | 600 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 600 | if (cnt == 0) { | 620 | 600 | ret = std::forward<Ts>(input); | 621 | 600 | } else { | 622 | 0 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 0 | } | 624 | | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | | ret << input; | 627 | | } | 628 | 600 | cnt++; | 629 | 600 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, unsigned int const&, opcodetype>(CScript&&, unsigned int const&, opcodetype&&)::'lambda'(unsigned int const&)::operator()(unsigned int const&) const Line | Count | Source | 616 | 600 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 600 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 600 | ret << input; | 627 | 600 | } | 628 | 600 | cnt++; | 629 | 600 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<CScript, unsigned int const&, opcodetype>(CScript&&, unsigned int const&, opcodetype&&)::'lambda'(opcodetype&&)::operator()(opcodetype&&) const Line | Count | Source | 616 | 600 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 600 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 600 | ret << input; | 627 | 600 | } | 628 | 600 | cnt++; | 629 | 600 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<long const&>(long const&)::'lambda'(long const&)::operator()(long const&) const Line | Count | Source | 616 | 16 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 16 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 16 | ret << input; | 627 | 16 | } | 628 | 16 | cnt++; | 629 | 16 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<unsigned long const&>(unsigned long const&)::'lambda'(unsigned long const&)::operator()(unsigned long const&) const Line | Count | Source | 616 | 234 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 234 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 234 | ret << input; | 627 | 234 | } | 628 | 234 | cnt++; | 629 | 234 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<int const&>(int const&)::'lambda'(int const&)::operator()(int const&) const Line | Count | Source | 616 | 234 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 234 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 234 | ret << input; | 627 | 234 | } | 628 | 234 | cnt++; | 629 | 234 | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<unsigned int&>(unsigned int&)::'lambda'(unsigned int&)::operator()(unsigned int&) const Line | Count | Source | 616 | 10.5k | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 10.5k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 10.5k | ret << input; | 627 | 10.5k | } | 628 | 10.5k | cnt++; | 629 | 10.5k | } (std::forward<Ts>(inputs)), ...); |
CScript BuildScript<unsigned long&>(unsigned long&)::'lambda'(unsigned long&)::operator()(unsigned long&) const Line | Count | Source | 616 | 173 | ([&ret, &cnt] (Ts&& input) { | 617 | | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | | if (cnt == 0) { | 620 | | ret = std::forward<Ts>(input); | 621 | | } else { | 622 | | ret.insert(ret.end(), input.begin(), input.end()); | 623 | | } | 624 | 173 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 173 | ret << input; | 627 | 173 | } | 628 | 173 | cnt++; | 629 | 173 | } (std::forward<Ts>(inputs)), ...); |
|
630 | | |
631 | 1.70M | return ret; |
632 | 1.70M | } CScript BuildScript<std::vector<unsigned char, std::allocator<unsigned char>>>(std::vector<unsigned char, std::allocator<unsigned char>>&&) Line | Count | Source | 612 | 3.63k | { | 613 | 3.63k | CScript ret; | 614 | 3.63k | int cnt{0}; | 615 | | | 616 | 3.63k | ([&ret, &cnt] (Ts&& input) { | 617 | 3.63k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 3.63k | if (cnt == 0) { | 620 | 3.63k | ret = std::forward<Ts>(input); | 621 | 3.63k | } else { | 622 | 3.63k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 3.63k | } | 624 | 3.63k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 3.63k | ret << input; | 627 | 3.63k | } | 628 | 3.63k | cnt++; | 629 | 3.63k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 3.63k | return ret; | 632 | 3.63k | } |
CScript BuildScript<opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&) Line | Count | Source | 612 | 590 | { | 613 | 590 | CScript ret; | 614 | 590 | int cnt{0}; | 615 | | | 616 | 590 | ([&ret, &cnt] (Ts&& input) { | 617 | 590 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 590 | if (cnt == 0) { | 620 | 590 | ret = std::forward<Ts>(input); | 621 | 590 | } else { | 622 | 590 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 590 | } | 624 | 590 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 590 | ret << input; | 627 | 590 | } | 628 | 590 | cnt++; | 629 | 590 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 590 | return ret; | 632 | 590 | } |
CScript BuildScript<unsigned int const&, opcodetype>(unsigned int const&, opcodetype&&) Line | Count | Source | 612 | 7.66k | { | 613 | 7.66k | CScript ret; | 614 | 7.66k | int cnt{0}; | 615 | | | 616 | 7.66k | ([&ret, &cnt] (Ts&& input) { | 617 | 7.66k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 7.66k | if (cnt == 0) { | 620 | 7.66k | ret = std::forward<Ts>(input); | 621 | 7.66k | } else { | 622 | 7.66k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 7.66k | } | 624 | 7.66k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 7.66k | ret << input; | 627 | 7.66k | } | 628 | 7.66k | cnt++; | 629 | 7.66k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 7.66k | return ret; | 632 | 7.66k | } |
CScript BuildScript<opcodetype, int, opcodetype, opcodetype, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype>(opcodetype&&, int&&, opcodetype&&, opcodetype&&, std::vector<unsigned char, std::allocator<unsigned char>> const&, opcodetype&&) Line | Count | Source | 612 | 525 | { | 613 | 525 | CScript ret; | 614 | 525 | int cnt{0}; | 615 | | | 616 | 525 | ([&ret, &cnt] (Ts&& input) { | 617 | 525 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 525 | if (cnt == 0) { | 620 | 525 | ret = std::forward<Ts>(input); | 621 | 525 | } else { | 622 | 525 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 525 | } | 624 | 525 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 525 | ret << input; | 627 | 525 | } | 628 | 525 | cnt++; | 629 | 525 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 525 | return ret; | 632 | 525 | } |
CScript BuildScript<opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 7.82k | { | 613 | 7.82k | CScript ret; | 614 | 7.82k | int cnt{0}; | 615 | | | 616 | 7.82k | ([&ret, &cnt] (Ts&& input) { | 617 | 7.82k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 7.82k | if (cnt == 0) { | 620 | 7.82k | ret = std::forward<Ts>(input); | 621 | 7.82k | } else { | 622 | 7.82k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 7.82k | } | 624 | 7.82k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 7.82k | ret << input; | 627 | 7.82k | } | 628 | 7.82k | cnt++; | 629 | 7.82k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 7.82k | return ret; | 632 | 7.82k | } |
CScript BuildScript<opcodetype, CScript&>(opcodetype&&, CScript&) Line | Count | Source | 612 | 1.48k | { | 613 | 1.48k | CScript ret; | 614 | 1.48k | int cnt{0}; | 615 | | | 616 | 1.48k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.48k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.48k | if (cnt == 0) { | 620 | 1.48k | ret = std::forward<Ts>(input); | 621 | 1.48k | } else { | 622 | 1.48k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.48k | } | 624 | 1.48k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.48k | ret << input; | 627 | 1.48k | } | 628 | 1.48k | cnt++; | 629 | 1.48k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 1.48k | return ret; | 632 | 1.48k | } |
CScript BuildScript<CScript, opcodetype>(CScript&&, opcodetype&&) Line | Count | Source | 612 | 1.65M | { | 613 | 1.65M | CScript ret; | 614 | 1.65M | int cnt{0}; | 615 | | | 616 | 1.65M | ([&ret, &cnt] (Ts&& input) { | 617 | 1.65M | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.65M | if (cnt == 0) { | 620 | 1.65M | ret = std::forward<Ts>(input); | 621 | 1.65M | } else { | 622 | 1.65M | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.65M | } | 624 | 1.65M | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.65M | ret << input; | 627 | 1.65M | } | 628 | 1.65M | cnt++; | 629 | 1.65M | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 1.65M | return ret; | 632 | 1.65M | } |
CScript BuildScript<opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 145 | { | 613 | 145 | CScript ret; | 614 | 145 | int cnt{0}; | 615 | | | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | 145 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 145 | if (cnt == 0) { | 620 | 145 | ret = std::forward<Ts>(input); | 621 | 145 | } else { | 622 | 145 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 145 | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 145 | return ret; | 632 | 145 | } |
CScript BuildScript<opcodetype, opcodetype, opcodetype, CScript&, opcodetype>(opcodetype&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 24 | { | 613 | 24 | CScript ret; | 614 | 24 | int cnt{0}; | 615 | | | 616 | 24 | ([&ret, &cnt] (Ts&& input) { | 617 | 24 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 24 | if (cnt == 0) { | 620 | 24 | ret = std::forward<Ts>(input); | 621 | 24 | } else { | 622 | 24 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 24 | } | 624 | 24 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 24 | ret << input; | 627 | 24 | } | 628 | 24 | cnt++; | 629 | 24 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 24 | return ret; | 632 | 24 | } |
CScript BuildScript<opcodetype>(opcodetype&&) Line | Count | Source | 612 | 1.37k | { | 613 | 1.37k | CScript ret; | 614 | 1.37k | int cnt{0}; | 615 | | | 616 | 1.37k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.37k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.37k | if (cnt == 0) { | 620 | 1.37k | ret = std::forward<Ts>(input); | 621 | 1.37k | } else { | 622 | 1.37k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.37k | } | 624 | 1.37k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.37k | ret << input; | 627 | 1.37k | } | 628 | 1.37k | cnt++; | 629 | 1.37k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 1.37k | return ret; | 632 | 1.37k | } |
CScript BuildScript<CScript, CScript&>(CScript&&, CScript&) Line | Count | Source | 612 | 1.11k | { | 613 | 1.11k | CScript ret; | 614 | 1.11k | int cnt{0}; | 615 | | | 616 | 1.11k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.11k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.11k | if (cnt == 0) { | 620 | 1.11k | ret = std::forward<Ts>(input); | 621 | 1.11k | } else { | 622 | 1.11k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.11k | } | 624 | 1.11k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.11k | ret << input; | 627 | 1.11k | } | 628 | 1.11k | cnt++; | 629 | 1.11k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 1.11k | return ret; | 632 | 1.11k | } |
CScript BuildScript<CScript, CScript&, opcodetype>(CScript&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 9.31k | { | 613 | 9.31k | CScript ret; | 614 | 9.31k | int cnt{0}; | 615 | | | 616 | 9.31k | ([&ret, &cnt] (Ts&& input) { | 617 | 9.31k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 9.31k | if (cnt == 0) { | 620 | 9.31k | ret = std::forward<Ts>(input); | 621 | 9.31k | } else { | 622 | 9.31k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 9.31k | } | 624 | 9.31k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 9.31k | ret << input; | 627 | 9.31k | } | 628 | 9.31k | cnt++; | 629 | 9.31k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 9.31k | return ret; | 632 | 9.31k | } |
CScript BuildScript<CScript, opcodetype, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 150 | { | 613 | 150 | CScript ret; | 614 | 150 | int cnt{0}; | 615 | | | 616 | 150 | ([&ret, &cnt] (Ts&& input) { | 617 | 150 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 150 | if (cnt == 0) { | 620 | 150 | ret = std::forward<Ts>(input); | 621 | 150 | } else { | 622 | 150 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 150 | } | 624 | 150 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 150 | ret << input; | 627 | 150 | } | 628 | 150 | cnt++; | 629 | 150 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 150 | return ret; | 632 | 150 | } |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 57 | { | 613 | 57 | CScript ret; | 614 | 57 | int cnt{0}; | 615 | | | 616 | 57 | ([&ret, &cnt] (Ts&& input) { | 617 | 57 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 57 | if (cnt == 0) { | 620 | 57 | ret = std::forward<Ts>(input); | 621 | 57 | } else { | 622 | 57 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 57 | } | 624 | 57 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 57 | ret << input; | 627 | 57 | } | 628 | 57 | cnt++; | 629 | 57 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 57 | return ret; | 632 | 57 | } |
CScript BuildScript<opcodetype, CScript&, opcodetype, CScript&, opcodetype>(opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 1.05k | { | 613 | 1.05k | CScript ret; | 614 | 1.05k | int cnt{0}; | 615 | | | 616 | 1.05k | ([&ret, &cnt] (Ts&& input) { | 617 | 1.05k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 1.05k | if (cnt == 0) { | 620 | 1.05k | ret = std::forward<Ts>(input); | 621 | 1.05k | } else { | 622 | 1.05k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 1.05k | } | 624 | 1.05k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 1.05k | ret << input; | 627 | 1.05k | } | 628 | 1.05k | cnt++; | 629 | 1.05k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 1.05k | return ret; | 632 | 1.05k | } |
CScript BuildScript<CScript, opcodetype, CScript&, opcodetype, CScript&, opcodetype>(CScript&&, opcodetype&&, CScript&, opcodetype&&, CScript&, opcodetype&&) Line | Count | Source | 612 | 262 | { | 613 | 262 | CScript ret; | 614 | 262 | int cnt{0}; | 615 | | | 616 | 262 | ([&ret, &cnt] (Ts&& input) { | 617 | 262 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 262 | if (cnt == 0) { | 620 | 262 | ret = std::forward<Ts>(input); | 621 | 262 | } else { | 622 | 262 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 262 | } | 624 | 262 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 262 | ret << input; | 627 | 262 | } | 628 | 262 | cnt++; | 629 | 262 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 262 | return ret; | 632 | 262 | } |
CScript BuildScript<unsigned int const&>(unsigned int const&) Line | Count | Source | 612 | 212 | { | 613 | 212 | CScript ret; | 614 | 212 | int cnt{0}; | 615 | | | 616 | 212 | ([&ret, &cnt] (Ts&& input) { | 617 | 212 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 212 | if (cnt == 0) { | 620 | 212 | ret = std::forward<Ts>(input); | 621 | 212 | } else { | 622 | 212 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 212 | } | 624 | 212 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 212 | ret << input; | 627 | 212 | } | 628 | 212 | cnt++; | 629 | 212 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 212 | return ret; | 632 | 212 | } |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&) Line | Count | Source | 612 | 445 | { | 613 | 445 | CScript ret; | 614 | 445 | int cnt{0}; | 615 | | | 616 | 445 | ([&ret, &cnt] (Ts&& input) { | 617 | 445 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 445 | if (cnt == 0) { | 620 | 445 | ret = std::forward<Ts>(input); | 621 | 445 | } else { | 622 | 445 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 445 | } | 624 | 445 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 445 | ret << input; | 627 | 445 | } | 628 | 445 | cnt++; | 629 | 445 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 445 | return ret; | 632 | 445 | } |
CScript BuildScript<CScript, unsigned long, opcodetype>(CScript&&, unsigned long&&, opcodetype&&) Line | Count | Source | 612 | 212 | { | 613 | 212 | CScript ret; | 614 | 212 | int cnt{0}; | 615 | | | 616 | 212 | ([&ret, &cnt] (Ts&& input) { | 617 | 212 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 212 | if (cnt == 0) { | 620 | 212 | ret = std::forward<Ts>(input); | 621 | 212 | } else { | 622 | 212 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 212 | } | 624 | 212 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 212 | ret << input; | 627 | 212 | } | 628 | 212 | cnt++; | 629 | 212 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 212 | return ret; | 632 | 212 | } |
CScript BuildScript<std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&) Line | Count | Source | 612 | 52 | { | 613 | 52 | CScript ret; | 614 | 52 | int cnt{0}; | 615 | | | 616 | 52 | ([&ret, &cnt] (Ts&& input) { | 617 | 52 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 52 | if (cnt == 0) { | 620 | 52 | ret = std::forward<Ts>(input); | 621 | 52 | } else { | 622 | 52 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 52 | } | 624 | 52 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 52 | ret << input; | 627 | 52 | } | 628 | 52 | cnt++; | 629 | 52 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 52 | return ret; | 632 | 52 | } |
CScript BuildScript<CScript, std::vector<unsigned char, std::allocator<unsigned char>>, opcodetype>(CScript&&, std::vector<unsigned char, std::allocator<unsigned char>>&&, opcodetype&&) Line | Count | Source | 612 | 145 | { | 613 | 145 | CScript ret; | 614 | 145 | int cnt{0}; | 615 | | | 616 | 145 | ([&ret, &cnt] (Ts&& input) { | 617 | 145 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 145 | if (cnt == 0) { | 620 | 145 | ret = std::forward<Ts>(input); | 621 | 145 | } else { | 622 | 145 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 145 | } | 624 | 145 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 145 | ret << input; | 627 | 145 | } | 628 | 145 | cnt++; | 629 | 145 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 145 | return ret; | 632 | 145 | } |
CScript BuildScript<CScript, unsigned int const&, opcodetype>(CScript&&, unsigned int const&, opcodetype&&) Line | Count | Source | 612 | 600 | { | 613 | 600 | CScript ret; | 614 | 600 | int cnt{0}; | 615 | | | 616 | 600 | ([&ret, &cnt] (Ts&& input) { | 617 | 600 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 600 | if (cnt == 0) { | 620 | 600 | ret = std::forward<Ts>(input); | 621 | 600 | } else { | 622 | 600 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 600 | } | 624 | 600 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 600 | ret << input; | 627 | 600 | } | 628 | 600 | cnt++; | 629 | 600 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 600 | return ret; | 632 | 600 | } |
CScript BuildScript<long const&>(long const&) Line | Count | Source | 612 | 16 | { | 613 | 16 | CScript ret; | 614 | 16 | int cnt{0}; | 615 | | | 616 | 16 | ([&ret, &cnt] (Ts&& input) { | 617 | 16 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 16 | if (cnt == 0) { | 620 | 16 | ret = std::forward<Ts>(input); | 621 | 16 | } else { | 622 | 16 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 16 | } | 624 | 16 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 16 | ret << input; | 627 | 16 | } | 628 | 16 | cnt++; | 629 | 16 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 16 | return ret; | 632 | 16 | } |
CScript BuildScript<unsigned long const&>(unsigned long const&) Line | Count | Source | 612 | 234 | { | 613 | 234 | CScript ret; | 614 | 234 | int cnt{0}; | 615 | | | 616 | 234 | ([&ret, &cnt] (Ts&& input) { | 617 | 234 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 234 | if (cnt == 0) { | 620 | 234 | ret = std::forward<Ts>(input); | 621 | 234 | } else { | 622 | 234 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 234 | } | 624 | 234 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 234 | ret << input; | 627 | 234 | } | 628 | 234 | cnt++; | 629 | 234 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 234 | return ret; | 632 | 234 | } |
CScript BuildScript<int const&>(int const&) Line | Count | Source | 612 | 234 | { | 613 | 234 | CScript ret; | 614 | 234 | int cnt{0}; | 615 | | | 616 | 234 | ([&ret, &cnt] (Ts&& input) { | 617 | 234 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 234 | if (cnt == 0) { | 620 | 234 | ret = std::forward<Ts>(input); | 621 | 234 | } else { | 622 | 234 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 234 | } | 624 | 234 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 234 | ret << input; | 627 | 234 | } | 628 | 234 | cnt++; | 629 | 234 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 234 | return ret; | 632 | 234 | } |
CScript BuildScript<unsigned int&>(unsigned int&) Line | Count | Source | 612 | 10.5k | { | 613 | 10.5k | CScript ret; | 614 | 10.5k | int cnt{0}; | 615 | | | 616 | 10.5k | ([&ret, &cnt] (Ts&& input) { | 617 | 10.5k | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 10.5k | if (cnt == 0) { | 620 | 10.5k | ret = std::forward<Ts>(input); | 621 | 10.5k | } else { | 622 | 10.5k | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 10.5k | } | 624 | 10.5k | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 10.5k | ret << input; | 627 | 10.5k | } | 628 | 10.5k | cnt++; | 629 | 10.5k | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 10.5k | return ret; | 632 | 10.5k | } |
CScript BuildScript<unsigned long&>(unsigned long&) Line | Count | Source | 612 | 173 | { | 613 | 173 | CScript ret; | 614 | 173 | int cnt{0}; | 615 | | | 616 | 173 | ([&ret, &cnt] (Ts&& input) { | 617 | 173 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { | 618 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. | 619 | 173 | if (cnt == 0) { | 620 | 173 | ret = std::forward<Ts>(input); | 621 | 173 | } else { | 622 | 173 | ret.insert(ret.end(), input.begin(), input.end()); | 623 | 173 | } | 624 | 173 | } else { | 625 | | // Otherwise invoke CScript::operator<<. | 626 | 173 | ret << input; | 627 | 173 | } | 628 | 173 | cnt++; | 629 | 173 | } (std::forward<Ts>(inputs)), ...); | 630 | | | 631 | 173 | return ret; | 632 | 173 | } |
|
633 | | |
634 | | #endif // BITCOIN_SCRIPT_SCRIPT_H |