From 545a508429afe1d22760563d252839e13ecd12a3 Mon Sep 17 00:00:00 2001 From: Kevin Cheng Date: Thu, 11 Nov 2021 01:36:33 +0000 Subject: Clean up constructor interface - replace string type constructor argument with "const string&" - replace vector type constructor argument with "const vector&" - add rvalue reference constructor for TosaSerializationOperator and TosaSerializationBasicBlock - add SetData() for TosaSerializationTensor, so tensor can be constructed first and data can be linked later Signed-off-by: Kevin Cheng Change-Id: I7c739df54c37b7ba69ebb6e5af118f660c7c0623 --- include/tosa_serialization_handler.h | 40 ++++++++++++++++----- src/tosa_serialization_handler.cpp | 69 ++++++++++++++++++++++++++---------- 2 files changed, 83 insertions(+), 26 deletions(-) diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h index a60e506..b07fa3b 100644 --- a/include/tosa_serialization_handler.h +++ b/include/tosa_serialization_handler.h @@ -114,7 +114,7 @@ public: const flatbuffers::Vector* shape, DType dtype, const flatbuffers::Vector* data); - TosaSerializationTensor(std::string& name, + TosaSerializationTensor(const std::string& name, const std::vector& shape, DType dtype, const std::vector& data); @@ -148,6 +148,14 @@ public: { _name = name; } + void SetData(const std::vector& data) + { + _data = data; + } + void SetData(std::vector&& data) + { + _data = std::move(data); + } private: DType _dtype; /* data type enumeration, see tosa_isa_generated.h */ @@ -166,8 +174,15 @@ public: const TosaAttributeBase* attribute, QuantInfo qinfo_type, const TosaQuantInfoBase* qinfo, - std::vector input_tensor_names, - std::vector output_tensor_names); + const std::vector& input_tensor_names, + const std::vector& output_tensor_names); + TosaSerializationOperator(Op op, + Attribute attribute_type, + const TosaAttributeBase* attribute, + QuantInfo qinfo_type, + const TosaQuantInfoBase* qinfo, + std::vector&& input_tensor_names, + std::vector&& output_tensor_names); ~TosaSerializationOperator(); // accessor @@ -201,6 +216,10 @@ public: } private: + void InitializeAttributeQinfo(Attribute attribute_type, + const TosaAttributeBase* attribute, + QuantInfo qinfo_type, + const TosaQuantInfoBase* qinfo); Op _op; /* operator enum, see tosa_isa_generated.h for enumeration table */ Attribute _attribute_type; /* operator attribute enum, used for dynamic casting TosaAttributeBase class */ TosaAttributeBase* _attribute; /* real attribute class goes here */ @@ -214,11 +233,16 @@ class TosaSerializationBasicBlock { public: // constructor and destructor - TosaSerializationBasicBlock(std::string name, - std::vector operators, - std::vector tensors, - std::vector inputs, - std::vector outputs); + TosaSerializationBasicBlock(const std::string& name, + const std::vector& operators, + const std::vector& tensors, + const std::vector& inputs, + const std::vector& outputs); + TosaSerializationBasicBlock(std::string&& name, + std::vector&& operators, + std::vector&& tensors, + std::vector&& inputs, + std::vector&& outputs); ~TosaSerializationBasicBlock(); // accessor diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp index a382542..547c3db 100644 --- a/src/tosa_serialization_handler.cpp +++ b/src/tosa_serialization_handler.cpp @@ -36,7 +36,7 @@ TosaSerializationTensor::TosaSerializationTensor(const flatbuffers::String* name } } -TosaSerializationTensor::TosaSerializationTensor(std::string& name, +TosaSerializationTensor::TosaSerializationTensor(const std::string& name, const std::vector& shape, DType dtype, const std::vector& data) @@ -50,22 +50,17 @@ TosaSerializationTensor::TosaSerializationTensor(std::string& name, TosaSerializationTensor::TosaSerializationTensor() { _dtype = DType_UNKNOWN; - - _name = "UNKNOWN"; + _name = "UNKNOWN"; } TosaSerializationTensor::~TosaSerializationTensor() {} -TosaSerializationOperator::TosaSerializationOperator(Op op, - Attribute attribute_type, - const TosaAttributeBase* attribute, - QuantInfo qinfo_type, - const TosaQuantInfoBase* qinfo, - std::vector input_tensor_names, - std::vector output_tensor_names) +void TosaSerializationOperator::InitializeAttributeQinfo(Attribute attribute_type, + const TosaAttributeBase* attribute, + QuantInfo qinfo_type, + const TosaQuantInfoBase* qinfo) { - _op = op; _attribute_type = attribute_type; switch (attribute_type) @@ -104,25 +99,50 @@ TosaSerializationOperator::TosaSerializationOperator(Op op, } assert(_attribute && _qinfo); +} +TosaSerializationOperator::TosaSerializationOperator(Op op, + Attribute attribute_type, + const TosaAttributeBase* attribute, + QuantInfo qinfo_type, + const TosaQuantInfoBase* qinfo, + const std::vector& input_tensor_names, + const std::vector& output_tensor_names) +{ + _op = op; _input_tensor_names = input_tensor_names; _output_tensor_names = output_tensor_names; + + InitializeAttributeQinfo(attribute_type, attribute, qinfo_type, qinfo); +} + +TosaSerializationOperator::TosaSerializationOperator(Op op, + Attribute attribute_type, + const TosaAttributeBase* attribute, + QuantInfo qinfo_type, + const TosaQuantInfoBase* qinfo, + std::vector&& input_tensor_names, + std::vector&& output_tensor_names) +{ + _op = op; + _input_tensor_names = std::move(input_tensor_names); + _output_tensor_names = std::move(output_tensor_names); + + InitializeAttributeQinfo(attribute_type, attribute, qinfo_type, qinfo); } TosaSerializationOperator::~TosaSerializationOperator() { delete _attribute; delete _qinfo; - // TosaSerializationTensor should be free'd in TosaSerializationSerializationHandler destructor } -TosaSerializationBasicBlock::TosaSerializationBasicBlock(std::string name, - std::vector operators, - std::vector tensors, - std::vector inputs, - std::vector outputs) +TosaSerializationBasicBlock::TosaSerializationBasicBlock(const std::string& name, + const std::vector& operators, + const std::vector& tensors, + const std::vector& inputs, + const std::vector& outputs) { - _name = name; _operators = operators; _tensors = tensors; @@ -130,6 +150,19 @@ TosaSerializationBasicBlock::TosaSerializationBasicBlock(std::string name, _outputs = outputs; } +TosaSerializationBasicBlock::TosaSerializationBasicBlock(std::string&& name, + std::vector&& operators, + std::vector&& tensors, + std::vector&& inputs, + std::vector&& outputs) +{ + _name = std::move(name); + _operators = std::move(operators); + _tensors = std::move(tensors); + _inputs = std::move(inputs); + _outputs = std::move(outputs); +} + TosaSerializationBasicBlock::~TosaSerializationBasicBlock() { // deallocate all operators -- cgit v1.2.1