1a69a01cdSopenharmony_ci/* 2a69a01cdSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3a69a01cdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a69a01cdSopenharmony_ci * you may not use this file except in compliance with the License. 5a69a01cdSopenharmony_ci * You may obtain a copy of the License at 6a69a01cdSopenharmony_ci * 7a69a01cdSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a69a01cdSopenharmony_ci * 9a69a01cdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a69a01cdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a69a01cdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a69a01cdSopenharmony_ci * See the License for the specific language governing permissions and 13a69a01cdSopenharmony_ci * limitations under the License. 14a69a01cdSopenharmony_ci */ 15a69a01cdSopenharmony_ci 16a69a01cdSopenharmony_ci#include "wukong_tree.h" 17a69a01cdSopenharmony_ci 18a69a01cdSopenharmony_cinamespace OHOS { 19a69a01cdSopenharmony_cinamespace WuKong { 20a69a01cdSopenharmony_cibool WuKongTree::RecursUpdateNodeIndex(const uint32_t offset) 21a69a01cdSopenharmony_ci{ 22a69a01cdSopenharmony_ci index_ = index_ + offset; 23a69a01cdSopenharmony_ci for (auto child : children_) { 24a69a01cdSopenharmony_ci child->RecursUpdateNodeIndex(offset); 25a69a01cdSopenharmony_ci } 26a69a01cdSopenharmony_ci return true; 27a69a01cdSopenharmony_ci} 28a69a01cdSopenharmony_ciuint64_t WuKongTree::GetSubName(std::string name, uint32_t count, bool isAbility) 29a69a01cdSopenharmony_ci{ 30a69a01cdSopenharmony_ci TRACK_LOG_STR("name %s", name.c_str()); 31a69a01cdSopenharmony_ci const uint8_t heightPosion = 8; 32a69a01cdSopenharmony_ci uint64_t subName = 0; 33a69a01cdSopenharmony_ci uint32_t nameSize = name.size(); 34a69a01cdSopenharmony_ci if (isAbility) { 35a69a01cdSopenharmony_ci GetClearnAbility(name); 36a69a01cdSopenharmony_ci nameSize = name.size(); 37a69a01cdSopenharmony_ci for (uint32_t index = count; index > 0; index--) { 38a69a01cdSopenharmony_ci if (index > nameSize) { 39a69a01cdSopenharmony_ci continue; 40a69a01cdSopenharmony_ci } 41a69a01cdSopenharmony_ci subName |= name[nameSize - index]; 42a69a01cdSopenharmony_ci if (index > 1) { 43a69a01cdSopenharmony_ci subName = subName << heightPosion; 44a69a01cdSopenharmony_ci } 45a69a01cdSopenharmony_ci } 46a69a01cdSopenharmony_ci } else { 47a69a01cdSopenharmony_ci for (uint32_t index = count; index > 0; index--) { 48a69a01cdSopenharmony_ci if (index > nameSize) { 49a69a01cdSopenharmony_ci continue; 50a69a01cdSopenharmony_ci } 51a69a01cdSopenharmony_ci subName |= name[nameSize - index]; 52a69a01cdSopenharmony_ci if (index > 1) { 53a69a01cdSopenharmony_ci subName = subName << heightPosion; 54a69a01cdSopenharmony_ci } 55a69a01cdSopenharmony_ci } 56a69a01cdSopenharmony_ci } 57a69a01cdSopenharmony_ci return subName; 58a69a01cdSopenharmony_ci} 59a69a01cdSopenharmony_civoid WuKongTree::GetClearnAbility(std::string &name) 60a69a01cdSopenharmony_ci{ 61a69a01cdSopenharmony_ci std::string target = "Ability"; 62a69a01cdSopenharmony_ci std::string replacement = ""; 63a69a01cdSopenharmony_ci size_t pos = name.find(target); 64a69a01cdSopenharmony_ci while (pos != std::string::npos) { 65a69a01cdSopenharmony_ci name.replace(pos, target.length(), replacement); 66a69a01cdSopenharmony_ci pos = name.find(target, pos + replacement.length()); 67a69a01cdSopenharmony_ci } 68a69a01cdSopenharmony_ci} 69a69a01cdSopenharmony_ci} // namespace WuKong 70a69a01cdSopenharmony_ci} // namespace OHOS