185d2f8c5Sopenharmony_ci/* 285d2f8c5Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 385d2f8c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 485d2f8c5Sopenharmony_ci * you may not use this file except in compliance with the License. 585d2f8c5Sopenharmony_ci * You may obtain a copy of the License at 685d2f8c5Sopenharmony_ci * 785d2f8c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 885d2f8c5Sopenharmony_ci * 985d2f8c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1085d2f8c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1185d2f8c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1285d2f8c5Sopenharmony_ci * See the License for the specific language governing permissions and 1385d2f8c5Sopenharmony_ci * limitations under the License. 1485d2f8c5Sopenharmony_ci */ 1585d2f8c5Sopenharmony_ci 1685d2f8c5Sopenharmony_ci#ifndef IAM_PTR_H 1785d2f8c5Sopenharmony_ci#define IAM_PTR_H 1885d2f8c5Sopenharmony_ci 1985d2f8c5Sopenharmony_ci#include <memory> 2085d2f8c5Sopenharmony_ci 2185d2f8c5Sopenharmony_ci#include "refbase.h" 2285d2f8c5Sopenharmony_ci 2385d2f8c5Sopenharmony_cinamespace OHOS { 2485d2f8c5Sopenharmony_cinamespace UserIam { 2585d2f8c5Sopenharmony_cinamespace Common { 2685d2f8c5Sopenharmony_citemplate <typename T> 2785d2f8c5Sopenharmony_cistatic inline std::shared_ptr<T> SptrToStdSharedPtr(sptr<T> &other) 2885d2f8c5Sopenharmony_ci{ 2985d2f8c5Sopenharmony_ci return std::shared_ptr<T>(other.GetRefPtr(), [other](T *) mutable { other = nullptr; }); 3085d2f8c5Sopenharmony_ci} 3185d2f8c5Sopenharmony_ci 3285d2f8c5Sopenharmony_citemplate <typename T, typename... Args> 3385d2f8c5Sopenharmony_cistatic inline std::shared_ptr<T> MakeShared(Args &&... args) 3485d2f8c5Sopenharmony_ci{ 3585d2f8c5Sopenharmony_ci try { 3685d2f8c5Sopenharmony_ci return std::make_shared<T>(std::forward<Args>(args)...); 3785d2f8c5Sopenharmony_ci } catch (...) { 3885d2f8c5Sopenharmony_ci return nullptr; 3985d2f8c5Sopenharmony_ci } 4085d2f8c5Sopenharmony_ci} 4185d2f8c5Sopenharmony_ci 4285d2f8c5Sopenharmony_citemplate <typename T, typename... Args> 4385d2f8c5Sopenharmony_cistatic inline std::unique_ptr<T> MakeUnique(Args &&... args) 4485d2f8c5Sopenharmony_ci{ 4585d2f8c5Sopenharmony_ci try { 4685d2f8c5Sopenharmony_ci return std::make_unique<T>(std::forward<Args>(args)...); 4785d2f8c5Sopenharmony_ci } catch (...) { 4885d2f8c5Sopenharmony_ci return nullptr; 4985d2f8c5Sopenharmony_ci } 5085d2f8c5Sopenharmony_ci} 5185d2f8c5Sopenharmony_ci} // namespace Common 5285d2f8c5Sopenharmony_ci} // namespace UserIam 5385d2f8c5Sopenharmony_ci} // namespace OHOS 5485d2f8c5Sopenharmony_ci 5585d2f8c5Sopenharmony_ci#endif // IAM_PTR_H