• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development 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 
16 #include "sharing_data.h"
17 #include "common/media_log.h"
18 
19 namespace OHOS {
20 namespace Sharing {
IsInt32()21 bool SharingValue::IsInt32()
22 {
23     SHARING_LOGD("trace.");
24     if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_INT32)) {
25         return true;
26     }
27 
28     return false;
29 }
30 
IsBool()31 bool SharingValue::IsBool()
32 {
33     SHARING_LOGD("trace.");
34     if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_BOOL)) {
35         return true;
36     }
37 
38     return false;
39 }
40 
IsString()41 bool SharingValue::IsString()
42 {
43     SHARING_LOGD("trace.");
44     if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_STRING)) {
45         return true;
46     }
47 
48     return false;
49 }
50 
IsVector()51 bool SharingValue::IsVector()
52 {
53     SHARING_LOGD("trace.");
54     if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_VECTOR)) {
55         return true;
56     }
57 
58     return false;
59 }
60 
Print()61 void SharingValue::Print()
62 {
63     SHARING_LOGD("trace.");
64     if (IsInt32()) {
65         int32_t value = 0;
66         GetValue(value);
67         SHARING_LOGD("print %{public}d.", value);
68     } else if (IsBool()) {
69         bool value = 0;
70         GetValue(value);
71         SHARING_LOGD("print %{public}d.", value);
72     } else if (IsString()) {
73         std::string value("");
74         GetValue(value);
75         SHARING_LOGD("print %{public}s.", value.c_str());
76     } else if (IsVector()) {
77         std::vector<int32_t> value{};
78         GetValue(value);
79         for (auto &item : value) {
80             SHARING_LOGD("print %{public}d.", item);
81         }
82     }
83 }
84 
PutSharingValue(const std::string & key,const SharingValue::Ptr value)85 int32_t SharingDataGroupByTag::PutSharingValue(const std::string &key, const SharingValue::Ptr value)
86 {
87     SHARING_LOGD("trace.");
88     auto iter = datas_.find(key);
89     if (iter == datas_.end()) {
90         datas_.emplace(key, value);
91     } else {
92         iter->second = value;
93     }
94 
95     return CONFIGURE_ERROR_NONE;
96 }
97 
PutSharingValues(const std::unordered_map<std::string,SharingValue::Ptr> & values)98 int32_t SharingDataGroupByTag::PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values)
99 {
100     SHARING_LOGD("trace.");
101     datas_ = values;
102     return CONFIGURE_ERROR_NONE;
103 }
104 
GetSharingValue(const std::string & key)105 SharingValue::Ptr SharingDataGroupByTag::GetSharingValue(const std::string &key)
106 {
107     SHARING_LOGD("trace.");
108     SharingValue::Ptr value = nullptr;
109     auto iter = datas_.find(key);
110     if (iter != datas_.end()) {
111         value = iter->second;
112     }
113 
114     return value;
115 }
116 
GetSharingValues(std::unordered_map<std::string,SharingValue::Ptr> & values)117 int32_t SharingDataGroupByTag::GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values)
118 {
119     SHARING_LOGD("trace.");
120     values = datas_;
121     return CONFIGURE_ERROR_NONE;
122 }
123 
HasKey(const std::string & key)124 bool SharingDataGroupByTag::HasKey(const std::string &key)
125 {
126     SHARING_LOGD("trace.");
127     return datas_.find(key) != datas_.end();
128 }
129 
ForEach(Each each)130 void SharingDataGroupByTag::ForEach(Each each)
131 {
132     SHARING_LOGD("trace.");
133     auto iter = datas_.begin();
134     while (iter != datas_.end()) {
135         std::string key = iter->first;
136         each(key, iter->second);
137         iter++;
138     }
139 }
140 
Print()141 void SharingDataGroupByTag::Print()
142 {
143     SHARING_LOGD("trace.");
144     auto iter = datas_.begin();
145     while (iter != datas_.end()) {
146         std::string key = iter->first;
147         SharingValue::Ptr value = iter->second;
148         if (value) {
149             value->Print();
150         }
151         iter++;
152     }
153 }
154 
PutSharingValue(const std::string & tag,const std::string & key,const SharingValue::Ptr value)155 int32_t SharingDataGroupByModule::PutSharingValue(const std::string &tag, const std::string &key,
156                                                   const SharingValue::Ptr value)
157 {
158     SHARING_LOGD("trace.");
159     auto iter = datass_.find(tag);
160     if (iter == datass_.end()) {
161         auto grpData = std::make_shared<SharingDataGroupByTag>(tag);
162         if (grpData == nullptr) {
163             SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
164             return CONFIGURE_ERROR_NOT_FIND;
165         }
166         grpData->PutSharingValue(key, value);
167         datass_.emplace(std::make_pair(tag, grpData));
168         return CONFIGURE_ERROR_NONE;
169     }
170 
171     return iter->second->PutSharingValue(key, value);
172 }
173 
PutSharingValues(const std::string & tag,const std::unordered_map<std::string,SharingValue::Ptr> & values)174 int32_t SharingDataGroupByModule::PutSharingValues(const std::string &tag,
175                                                    const std::unordered_map<std::string, SharingValue::Ptr> &values)
176 {
177     SHARING_LOGD("trace.");
178     auto iter = datass_.find(tag);
179     if (iter == datass_.end()) {
180         auto grpData = std::make_shared<SharingDataGroupByTag>(tag);
181         if (grpData == nullptr) {
182             SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
183             return CONFIGURE_ERROR_NOT_FIND;
184         }
185         grpData->PutSharingValues(values);
186         datass_.emplace(std::make_pair(tag, grpData));
187         return CONFIGURE_ERROR_NONE;
188     }
189 
190     return iter->second->PutSharingValues(values);
191 }
192 
PutSharingValues(const std::string & tag,const SharingDataGroupByTag::Ptr & value)193 int32_t SharingDataGroupByModule::PutSharingValues(const std::string &tag, const SharingDataGroupByTag::Ptr &value)
194 {
195     SHARING_LOGD("trace.");
196     auto iter = datass_.find(tag);
197     if (iter == datass_.end()) {
198         datass_.emplace(std::make_pair(tag, value));
199         return CONFIGURE_ERROR_NONE;
200     }
201 
202     iter->second = value;
203     return CONFIGURE_ERROR_NONE;
204 }
205 
GetSharingValue(const std::string & tag,const std::string & key)206 SharingValue::Ptr SharingDataGroupByModule::GetSharingValue(const std::string &tag, const std::string &key)
207 {
208     SHARING_LOGD("trace.");
209     auto iter = datass_.find(tag);
210     if (iter == datass_.end()) {
211         SHARING_LOGE("nullptr.");
212         return nullptr;
213     }
214 
215     return iter->second->GetSharingValue(key);
216 }
217 
GetSharingValues(const std::string & tag,std::unordered_map<std::string,SharingValue::Ptr> & values)218 int32_t SharingDataGroupByModule::GetSharingValues(const std::string &tag,
219                                                    std::unordered_map<std::string, SharingValue::Ptr> &values)
220 {
221     SHARING_LOGD("trace.");
222     auto iter = datass_.find(tag);
223     if (iter == datass_.end()) {
224         SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
225         return CONFIGURE_ERROR_NOT_FIND;
226     }
227 
228     return iter->second->GetSharingValues(values);
229 }
230 
GetSharingValues(const std::string & tag,SharingDataGroupByTag::Ptr & value)231 int32_t SharingDataGroupByModule::GetSharingValues(const std::string &tag, SharingDataGroupByTag::Ptr &value)
232 {
233     SHARING_LOGD("trace.");
234     auto iter = datass_.find(tag);
235     if (iter == datass_.end()) {
236         SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
237         return CONFIGURE_ERROR_NOT_FIND;
238     }
239 
240     value = iter->second;
241     return CONFIGURE_ERROR_NONE;
242 }
243 
HasKey(const std::string & tag,const std::string & key)244 bool SharingDataGroupByModule::HasKey(const std::string &tag, const std::string &key)
245 {
246     SHARING_LOGD("trace.");
247     auto iter = datass_.find(tag);
248     if (iter == datass_.end()) {
249         return false;
250     }
251 
252     return iter->second->HasKey(key);
253 }
254 
HasTag(const std::string & tag)255 bool SharingDataGroupByModule::HasTag(const std::string &tag)
256 {
257     SHARING_LOGD("trace.");
258     return datass_.find(tag) != datass_.end();
259 }
260 
ForEach(Each each)261 void SharingDataGroupByModule::ForEach(Each each)
262 {
263     SHARING_LOGD("trace.");
264     auto iter = datass_.begin();
265     while (iter != datass_.end()) {
266         std::string key = iter->first;
267         each(key, iter->second);
268         iter++;
269     }
270 }
271 
Print()272 void SharingDataGroupByModule::Print()
273 {
274     SHARING_LOGD("trace.");
275     auto iter = datass_.begin();
276     while (iter != datass_.end()) {
277         SHARING_LOGD("forEach print %{public}s.", iter->first.c_str());
278         SharingDataGroupByTag::Ptr value = iter->second;
279         if (value) {
280             value->Print();
281         }
282         iter++;
283     }
284 }
285 
PutSharingValue(const std::string & key,const SharingValue::Ptr value,const std::string & module,const std::string & tag)286 int32_t SharingData::PutSharingValue(const std::string &key, const SharingValue::Ptr value, const std::string &module,
287                                      const std::string &tag)
288 {
289     SHARING_LOGD("trace.");
290     auto iter = datass_.find(module);
291     if (iter == datass_.end()) {
292         auto moduleData = std::make_shared<SharingDataGroupByModule>(module);
293         if (moduleData == nullptr) {
294             SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
295             return CONFIGURE_ERROR_NOT_FIND;
296         }
297         moduleData->PutSharingValue(tag, key, value);
298         datass_.emplace(std::make_pair(module, moduleData));
299         return CONFIGURE_ERROR_NONE;
300     }
301 
302     return iter->second->PutSharingValue(tag, key, value);
303 }
PutSharingValues(const SharingDataGroupByModule::Ptr & values,const std::string & module)304 int32_t SharingData::PutSharingValues(const SharingDataGroupByModule::Ptr &values, const std::string &module)
305 {
306     SHARING_LOGD("trace.");
307     auto iter = datass_.find(module);
308     if (iter == datass_.end()) {
309         datass_.emplace(std::make_pair(module, values));
310         return CONFIGURE_ERROR_NONE;
311     }
312 
313     iter->second = values;
314     return CONFIGURE_ERROR_NONE;
315 }
316 
PutSharingValues(const std::unordered_map<std::string,SharingValue::Ptr> & values,const std::string & module,const std::string & tag)317 int32_t SharingData::PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values,
318                                       const std::string &module, const std::string &tag)
319 {
320     SHARING_LOGD("trace.");
321     auto iter = datass_.find(module);
322     if (iter == datass_.end()) {
323         auto moduleData = std::make_shared<SharingDataGroupByModule>(module);
324         if (moduleData == nullptr) {
325             SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
326             return CONFIGURE_ERROR_NOT_FIND;
327         }
328         moduleData->PutSharingValues(tag, values);
329         datass_.emplace(std::make_pair(module, moduleData));
330         return CONFIGURE_ERROR_NONE;
331     }
332 
333     return iter->second->PutSharingValues(tag, values);
334 }
335 
GetSharingValue(const std::string & key,const std::string & module,const std::string & tag)336 SharingValue::Ptr SharingData::GetSharingValue(const std::string &key, const std::string &module,
337                                                const std::string &tag)
338 {
339     SHARING_LOGD("trace.");
340     auto iter = datass_.find(module);
341     if (iter == datass_.end()) {
342         return nullptr;
343     }
344 
345     return iter->second->GetSharingValue(tag, key);
346 }
347 
GetSharingValues(SharingDataGroupByModule::Ptr & values,const std::string & module)348 int32_t SharingData::GetSharingValues(SharingDataGroupByModule::Ptr &values, const std::string &module)
349 {
350     SHARING_LOGD("trace.");
351     auto iter = datass_.find(module);
352     if (iter == datass_.end()) {
353         return CONFIGURE_ERROR_NOT_FIND;
354     }
355 
356     values = iter->second;
357     return CONFIGURE_ERROR_NONE;
358 }
359 
GetSharingValues(std::unordered_map<std::string,SharingValue::Ptr> & values,const std::string & module,const std::string & tag)360 int32_t SharingData::GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values,
361                                       const std::string &module, const std::string &tag)
362 {
363     SHARING_LOGD("trace.");
364     auto iter = datass_.find(module);
365     if (iter == datass_.end()) {
366         return CONFIGURE_ERROR_NOT_FIND;
367     }
368 
369     return iter->second->GetSharingValues(tag, values);
370 }
371 
GetSharingValues(SharingDataGroupByTag::Ptr & value,const std::string & module,const std::string & tag)372 int32_t SharingData::GetSharingValues(SharingDataGroupByTag::Ptr &value, const std::string &module,
373                                       const std::string &tag)
374 {
375     SHARING_LOGD("trace.");
376     auto iter = datass_.find(module);
377     if (iter == datass_.end()) {
378         return CONFIGURE_ERROR_NOT_FIND;
379     }
380 
381     return iter->second->GetSharingValues(tag, value);
382 }
383 
HasKey(const std::string & key,const std::string & module,const std::string & tag)384 bool SharingData::HasKey(const std::string &key, const std::string &module, const std::string &tag)
385 {
386     SHARING_LOGD("trace.");
387     auto iter = datass_.find(module);
388     if (iter == datass_.end()) {
389         return false;
390     }
391 
392     return iter->second->HasKey(tag, key);
393 }
394 
HasModule(const std::string & module)395 bool SharingData::HasModule(const std::string &module)
396 {
397     SHARING_LOGD("trace.");
398     return datass_.find(module) != datass_.end();
399 }
400 
HasTag(const std::string & module,const std::string & tag)401 bool SharingData::HasTag(const std::string &module, const std::string &tag)
402 {
403     SHARING_LOGD("trace.");
404     auto iter = datass_.find(module);
405     if (iter == datass_.end()) {
406         return false;
407     }
408 
409     return iter->second->HasTag(tag);
410 }
411 
ForEach(Each each)412 void SharingData::ForEach(Each each)
413 {
414     SHARING_LOGD("trace.");
415     auto iter = datass_.begin();
416     while (iter != datass_.end()) {
417         std::string key = iter->first;
418         SHARING_LOGD("forEach %{public}s.", key.c_str());
419         each(key, iter->second);
420         iter++;
421     }
422 }
423 
Print()424 void SharingData::Print()
425 {
426     SHARING_LOGD("trace.");
427     auto iter = datass_.begin();
428     while (iter != datass_.end()) {
429         SHARING_LOGD("forEach print %{public}s.", iter->first.c_str());
430         SharingDataGroupByModule::Ptr value = iter->second;
431         if (value) {
432             value->Print();
433         }
434         iter++;
435     }
436 }
437 
438 } // namespace Sharing
439 } // namespace OHOS