MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / CalcOps

Method CalcOps

src/script/miniscript.h:1004–1076  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1002
1003private:
1004 internal::Ops CalcOps() const {
1005 switch (fragment) {
1006 case Fragment::JUST_1: return {0, 0, {}};
1007 case Fragment::JUST_0: return {0, {}, 0};
1008 case Fragment::PK_K: return {0, 0, 0};
1009 case Fragment::PK_H: return {3, 0, 0};
1010 case Fragment::OLDER:
1011 case Fragment::AFTER: return {1, 0, {}};
1012 case Fragment::SHA256:
1013 case Fragment::RIPEMD160:
1014 case Fragment::HASH256:
1015 case Fragment::HASH160: return {4, 0, {}};
1016 case Fragment::AND_V: return {subs[0].ops.count + subs[1].ops.count, subs[0].ops.sat + subs[1].ops.sat, {}};
1017 case Fragment::AND_B: {
1018 const auto count{1 + subs[0].ops.count + subs[1].ops.count};
1019 const auto sat{subs[0].ops.sat + subs[1].ops.sat};
1020 const auto dsat{subs[0].ops.dsat + subs[1].ops.dsat};
1021 return {count, sat, dsat};
1022 }
1023 case Fragment::OR_B: {
1024 const auto count{1 + subs[0].ops.count + subs[1].ops.count};
1025 const auto sat{(subs[0].ops.sat + subs[1].ops.dsat) | (subs[1].ops.sat + subs[0].ops.dsat)};
1026 const auto dsat{subs[0].ops.dsat + subs[1].ops.dsat};
1027 return {count, sat, dsat};
1028 }
1029 case Fragment::OR_D: {
1030 const auto count{3 + subs[0].ops.count + subs[1].ops.count};
1031 const auto sat{subs[0].ops.sat | (subs[1].ops.sat + subs[0].ops.dsat)};
1032 const auto dsat{subs[0].ops.dsat + subs[1].ops.dsat};
1033 return {count, sat, dsat};
1034 }
1035 case Fragment::OR_C: {
1036 const auto count{2 + subs[0].ops.count + subs[1].ops.count};
1037 const auto sat{subs[0].ops.sat | (subs[1].ops.sat + subs[0].ops.dsat)};
1038 return {count, sat, {}};
1039 }
1040 case Fragment::OR_I: {
1041 const auto count{3 + subs[0].ops.count + subs[1].ops.count};
1042 const auto sat{subs[0].ops.sat | subs[1].ops.sat};
1043 const auto dsat{subs[0].ops.dsat | subs[1].ops.dsat};
1044 return {count, sat, dsat};
1045 }
1046 case Fragment::ANDOR: {
1047 const auto count{3 + subs[0].ops.count + subs[1].ops.count + subs[2].ops.count};
1048 const auto sat{(subs[1].ops.sat + subs[0].ops.sat) | (subs[0].ops.dsat + subs[2].ops.sat)};
1049 const auto dsat{subs[0].ops.dsat + subs[2].ops.dsat};
1050 return {count, sat, dsat};
1051 }
1052 case Fragment::MULTI: return {1, (uint32_t)keys.size(), (uint32_t)keys.size()};
1053 case Fragment::MULTI_A: return {(uint32_t)keys.size() + 1, 0, 0};
1054 case Fragment::WRAP_S:
1055 case Fragment::WRAP_C:
1056 case Fragment::WRAP_N: return {1 + subs[0].ops.count, subs[0].ops.sat, subs[0].ops.dsat};
1057 case Fragment::WRAP_A: return {2 + subs[0].ops.count, subs[0].ops.sat, subs[0].ops.dsat};
1058 case Fragment::WRAP_D: return {3 + subs[0].ops.count, subs[0].ops.sat, 0};
1059 case Fragment::WRAP_J: return {4 + subs[0].ops.count, subs[0].ops.sat, 0};
1060 case Fragment::WRAP_V: return {subs[0].ops.count + (subs[0].GetType() << "x"_mst), subs[0].ops.sat, {}};
1061 case Fragment::THRESH: {

Callers

nothing calls this directly

Calls 4

VectorFunction · 0.85
sizeMethod · 0.45
GetTypeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected