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