From ada171e5311566396826c538902744b7b3d9ffc7 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Thu, 25 Nov 2021 02:17:20 +0300 Subject: [PATCH] Some optimizations --- Models/Script.cpp | 20 ++++++++++---------- Models/Script.h | 12 ++++++++++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Models/Script.cpp b/Models/Script.cpp index e8cf803..9ccac02 100644 --- a/Models/Script.cpp +++ b/Models/Script.cpp @@ -6,20 +6,19 @@ Script::Script(std::span data, bool coinbase): _operations(10) { for(auto iter = data.begin(); iter != data.end();) { - ScriptOperation operation; - operation.opCode = OpCode(*iter++); + auto opCode = OpCode(*iter++); size_t available = data.end() - iter; - if(operation.opCode <= OpCode::OP_PUSHDATA4) { + if(opCode <= OpCode::OP_PUSHDATA4) { size_t dataSize = 0; - if(operation.opCode < OpCode::OP_PUSHDATA1) { - dataSize = operation.opCode; - } else if(operation.opCode == OpCode::OP_PUSHDATA1 && available >= 1) { + if(opCode < OpCode::OP_PUSHDATA1) { + dataSize = opCode; + } else if(opCode == OpCode::OP_PUSHDATA1 && available >= 1) { dataSize = *iter++; - } else if(operation.opCode == OpCode::OP_PUSHDATA2 && available >= 2) { + } else if(opCode == OpCode::OP_PUSHDATA2 && available >= 2) { dataSize = *((uint16_t*)&iter[0]); iter += 2; - } else if(operation.opCode == OpCode::OP_PUSHDATA4 && available >= 4) { + } else if(opCode == OpCode::OP_PUSHDATA4 && available >= 4) { dataSize = *((uint32_t *)&iter[0]); iter += 4; } @@ -30,11 +29,12 @@ Script::Script(std::span data, bool coinbase): _operations(10) { } if(dataSize > 0) { - operation.input = std::vector(iter, iter + dataSize); + _operations.emplace_back(opCode, std::vector(iter, iter + dataSize)); iter += dataSize; + continue; } } - _operations.emplace_back(operation); + _operations.emplace_back(ScriptOperation(opCode)); } _type = coinbase ? ScriptType::Coinbase : type(); diff --git a/Models/Script.h b/Models/Script.h index df42a9b..7870de0 100644 --- a/Models/Script.h +++ b/Models/Script.h @@ -156,6 +156,18 @@ enum ScriptType { struct ScriptOperation { OpCode opCode = OP_INVALIDOPCODE; std::optional> input = std::nullopt; + + ScriptOperation(OpCode opCode, std::vector&& param) { + this->opCode = opCode; + this->input = param; + } + + ScriptOperation(OpCode opCode) { + this->opCode = opCode; + } + + ScriptOperation() { + } }; class Script {