1a339c2d4Sopenharmony_ci/* 2a339c2d4Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3a339c2d4Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a339c2d4Sopenharmony_ci * you may not use this file except in compliance with the License. 5a339c2d4Sopenharmony_ci * You may obtain a copy of the License at 6a339c2d4Sopenharmony_ci * 7a339c2d4Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a339c2d4Sopenharmony_ci * 9a339c2d4Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a339c2d4Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a339c2d4Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a339c2d4Sopenharmony_ci * See the License for the specific language governing permissions and 13a339c2d4Sopenharmony_ci * limitations under the License. 14a339c2d4Sopenharmony_ci */ 15a339c2d4Sopenharmony_ci 16a339c2d4Sopenharmony_ci#ifndef IAM_PTR_H 17a339c2d4Sopenharmony_ci#define IAM_PTR_H 18a339c2d4Sopenharmony_ci 19a339c2d4Sopenharmony_ci#include <memory> 20a339c2d4Sopenharmony_ci 21a339c2d4Sopenharmony_ci#include "refbase.h" 22a339c2d4Sopenharmony_ci 23a339c2d4Sopenharmony_cinamespace OHOS { 24a339c2d4Sopenharmony_cinamespace UserIam { 25a339c2d4Sopenharmony_cinamespace Common { 26a339c2d4Sopenharmony_citemplate <typename T> 27a339c2d4Sopenharmony_cistatic inline std::shared_ptr<T> SptrToStdSharedPtr(sptr<T> &other) 28a339c2d4Sopenharmony_ci{ 29a339c2d4Sopenharmony_ci return std::shared_ptr<T>(other.GetRefPtr(), [other](T *) mutable { other = nullptr; }); 30a339c2d4Sopenharmony_ci} 31a339c2d4Sopenharmony_ci 32a339c2d4Sopenharmony_citemplate <typename T, typename... Args> 33a339c2d4Sopenharmony_cistatic inline std::shared_ptr<T> MakeShared(Args &&... args) 34a339c2d4Sopenharmony_ci{ 35a339c2d4Sopenharmony_ci try { 36a339c2d4Sopenharmony_ci return std::make_shared<T>(std::forward<Args>(args)...); 37a339c2d4Sopenharmony_ci } catch (...) { 38a339c2d4Sopenharmony_ci return nullptr; 39a339c2d4Sopenharmony_ci } 40a339c2d4Sopenharmony_ci} 41a339c2d4Sopenharmony_ci 42a339c2d4Sopenharmony_citemplate <typename T, typename... Args> 43a339c2d4Sopenharmony_cistatic inline std::unique_ptr<T> MakeUnique(Args &&... args) 44a339c2d4Sopenharmony_ci{ 45a339c2d4Sopenharmony_ci try { 46a339c2d4Sopenharmony_ci return std::make_unique<T>(std::forward<Args>(args)...); 47a339c2d4Sopenharmony_ci } catch (...) { 48a339c2d4Sopenharmony_ci return nullptr; 49a339c2d4Sopenharmony_ci } 50a339c2d4Sopenharmony_ci} 51a339c2d4Sopenharmony_ci} // namespace Common 52a339c2d4Sopenharmony_ci} // namespace UserIam 53a339c2d4Sopenharmony_ci} // namespace OHOS 54a339c2d4Sopenharmony_ci 55a339c2d4Sopenharmony_ci#endif // IAM_PTR_H 56