• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "stoperator.h"
16 #include <cstring>
17 
18 namespace STtools {
19 using std::string;
20 
PushOperatorInVector(std::vector<string> & vectorOperator,StOperator & ParentOperator)21 void PushOperatorInVector(std::vector<string> &vectorOperator, StOperator &ParentOperator)
22 {
23     vectorOperator.emplace_back(std::to_string(ParentOperator.GetChildOperator().size()));
24     vectorOperator.emplace_back(ParentOperator.GetAbilityType());
25     vectorOperator.emplace_back(ParentOperator.GetBundleName());
26     vectorOperator.emplace_back(ParentOperator.GetAbilityName());
27     vectorOperator.emplace_back(ParentOperator.GetOperatorName());
28     vectorOperator.emplace_back(ParentOperator.GetMessage());
29     for (auto child : ParentOperator.GetChildOperator()) {
30         PushOperatorInVector(vectorOperator, *child);
31     }
32 }
33 
SerializationStOperatorToVector(StOperator & ParentOperator)34 std::vector<string> SerializationStOperatorToVector(StOperator &ParentOperator)
35 {
36     std::vector<string> vectorOperator;
37     PushOperatorInVector(vectorOperator, ParentOperator);
38     return vectorOperator;
39 }
40 
PullOperatorFromVector(StOperator & ParentOperator,std::vector<string> & vectorOperator)41 void PullOperatorFromVector(StOperator &ParentOperator, std::vector<string> &vectorOperator)
42 {
43     int childnum = std::stoi(vectorOperator.front());
44     vectorOperator.erase(vectorOperator.begin());
45     string abilityType = vectorOperator.front();
46     vectorOperator.erase(vectorOperator.begin());
47     string bundleName = vectorOperator.front();
48     vectorOperator.erase(vectorOperator.begin());
49     string abilityName = vectorOperator.front();
50     vectorOperator.erase(vectorOperator.begin());
51     string operatorName = vectorOperator.front();
52     vectorOperator.erase(vectorOperator.begin());
53     string message = vectorOperator.front();
54     vectorOperator.erase(vectorOperator.begin());
55     ParentOperator.SetAbilityType(abilityType)
56         .SetBundleName(bundleName)
57         .SetAbilityName(abilityName)
58         .SetOperatorName(operatorName)
59         .SetMessage(message);
60     for (int i = 0; i < childnum; i++) {
61         auto child = std::make_shared<StOperator>();
62         if (child == nullptr) {
63             return;
64         }
65         ParentOperator.AddChildOperator(child);
66         PullOperatorFromVector(*(child.get()), vectorOperator);
67     }
68 }
69 
DeserializationStOperatorFromVector(StOperator & ParentOperator,std::vector<string> & vectorOperator)70 void DeserializationStOperatorFromVector(StOperator &ParentOperator, std::vector<string> &vectorOperator)
71 {
72     PullOperatorFromVector(ParentOperator, vectorOperator);
73 }
74 
75 int StOperator::countChild = 0;
76 
StOperator()77 StOperator::StOperator()
78     : g_parentOperator(nullptr), g_abilityType("0"),
79     g_bundleName(""), g_abilityName(""), g_operatorName(""), g_message("")
80 {
81     g_childOperator.clear();
82     StOperator::countChild++;
83 }
84 
StOperator(const string & type,const string & bundle,const string & ability,const string & operatorName,const string & message)85 StOperator::StOperator(
86     const string &type, const string &bundle, const string &ability, const string &operatorName, const string &message)
87     : g_parentOperator(nullptr),
88       g_abilityType(type),
89       g_bundleName(bundle),
90       g_abilityName(ability),
91       g_operatorName(operatorName),
92       g_message("")
93 {
94     g_childOperator.clear();
95     StOperator::countChild++;
96 }
97 
~StOperator()98 StOperator::~StOperator()
99 {
100     g_childOperator.clear();
101     StOperator::countChild--;
102 }
103 
GetCountChild()104 int StOperator::GetCountChild()
105 {
106     return StOperator::countChild;
107 }
108 
GetAbilityType()109 string StOperator::GetAbilityType()
110 {
111     return g_abilityType;
112 }
113 
SetAbilityType(const string & type)114 StOperator &StOperator::SetAbilityType(const string &type)
115 {
116     g_abilityType = type;
117     return *this;
118 }
119 
GetBundleName()120 string StOperator::GetBundleName()
121 {
122     return g_bundleName;
123 }
124 
SetBundleName(const string & bundleName)125 StOperator &StOperator::SetBundleName(const string &bundleName)
126 {
127     g_bundleName = bundleName;
128     return *this;
129 }
130 
GetAbilityName()131 string StOperator::GetAbilityName()
132 {
133     return g_abilityName;
134 }
135 
SetAbilityName(const string & abilityName)136 StOperator &StOperator::SetAbilityName(const string &abilityName)
137 {
138     g_abilityName = abilityName;
139     return *this;
140 }
141 
GetOperatorName()142 string StOperator::GetOperatorName()
143 {
144     return g_operatorName;
145 }
146 
SetOperatorName(const string & operatorName)147 StOperator &StOperator::SetOperatorName(const string &operatorName)
148 {
149     g_operatorName = operatorName;
150     return *this;
151 }
152 
GetMessage()153 string StOperator::GetMessage()
154 {
155     return g_message;
156 }
157 
SetMessage(const string & message)158 StOperator &StOperator::SetMessage(const string &message)
159 {
160     g_message = message;
161     return *this;
162 }
163 
AddChildOperator(std::shared_ptr<StOperator> childOperator)164 StOperator &StOperator::AddChildOperator(std::shared_ptr<StOperator> childOperator)
165 {
166     if (childOperator == nullptr) {
167         return *this;
168     }
169     childOperator->g_parentOperator = std::make_shared<StOperator>(*this);
170     g_childOperator.emplace_back(childOperator);
171     return *this;
172 }
173 
GetChildOperator()174 std::vector<std::shared_ptr<StOperator>> StOperator::GetChildOperator()
175 {
176     return g_childOperator;
177 }
178 
PopChildOperator()179 std::vector<std::shared_ptr<StOperator>> StOperator::PopChildOperator()
180 {
181     std::vector<std::shared_ptr<StOperator>> popChildOperator = g_childOperator;
182     for (auto child : popChildOperator) {
183         child->g_parentOperator = nullptr;
184     }
185     g_childOperator.clear();
186     return popChildOperator;
187 }
188 }  // namespace STtools