• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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) {
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),
79     g_abilityType("0"),
80     g_bundleName(""),
81     g_abilityName(""),
82     g_operatorName(""),
83     g_message("")
84 {
85     g_childOperator.clear();
86     StOperator::countChild++;
87 }
88 
StOperator(const string & type,const string & bundle,const string & ability,const string & operatorName,const string & message)89 StOperator::StOperator(
90     const string &type, const string &bundle, const string &ability, const string &operatorName, const string &message)
91     : g_parentOperator(nullptr),
92       g_abilityType(type),
93       g_bundleName(bundle),
94       g_abilityName(ability),
95       g_operatorName(operatorName),
96       g_message("")
97 {
98     g_childOperator.clear();
99     StOperator::countChild++;
100 }
101 
~StOperator()102 StOperator::~StOperator()
103 {
104     g_childOperator.clear();
105     StOperator::countChild--;
106 }
107 
GetCountChild()108 int StOperator::GetCountChild()
109 {
110     return StOperator::countChild;
111 }
112 
GetAbilityType()113 string StOperator::GetAbilityType()
114 {
115     return g_abilityType;
116 }
117 
SetAbilityType(const string & type)118 StOperator &StOperator::SetAbilityType(const string &type)
119 {
120     g_abilityType = type;
121     return *this;
122 }
123 
GetBundleName()124 string StOperator::GetBundleName()
125 {
126     return g_bundleName;
127 }
128 
SetBundleName(const string & bundleName)129 StOperator &StOperator::SetBundleName(const string &bundleName)
130 {
131     g_bundleName = bundleName;
132     return *this;
133 }
134 
GetAbilityName()135 string StOperator::GetAbilityName()
136 {
137     return g_abilityName;
138 }
139 
SetAbilityName(const string & abilityName)140 StOperator &StOperator::SetAbilityName(const string &abilityName)
141 {
142     g_abilityName = abilityName;
143     return *this;
144 }
145 
GetOperatorName()146 string StOperator::GetOperatorName()
147 {
148     return g_operatorName;
149 }
150 
SetOperatorName(const string & operatorName)151 StOperator &StOperator::SetOperatorName(const string &operatorName)
152 {
153     g_operatorName = operatorName;
154     return *this;
155 }
156 
GetMessage()157 string StOperator::GetMessage()
158 {
159     return g_message;
160 }
161 
SetMessage(const string & message)162 StOperator &StOperator::SetMessage(const string &message)
163 {
164     g_message = message;
165     return *this;
166 }
167 
AddChildOperator(std::shared_ptr<StOperator> childOperator)168 StOperator &StOperator::AddChildOperator(std::shared_ptr<StOperator> childOperator)
169 {
170     if (!childOperator) {
171         return *this;
172     }
173     childOperator->g_parentOperator = std::make_shared<StOperator>(*this);
174     g_childOperator.emplace_back(childOperator);
175     return *this;
176 }
177 
GetChildOperator()178 std::vector<std::shared_ptr<StOperator>> StOperator::GetChildOperator()
179 {
180     return g_childOperator;
181 }
182 
PopChildOperator()183 std::vector<std::shared_ptr<StOperator>> StOperator::PopChildOperator()
184 {
185     std::vector<std::shared_ptr<StOperator>> popChildOperator = g_childOperator;
186     for (auto child : popChildOperator) {
187         child->g_parentOperator = nullptr;
188     }
189     g_childOperator.clear();
190     return popChildOperator;
191 }
192 } // namespace STtools