1 /*
2  * Copyright (c) 2022 Huawei Device 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 #ifndef OHOS_MEMORY_MEMMGR_COMMON_INCLUDE_MEM_MGR_PTR_UTIL_H
17 #define OHOS_MEMORY_MEMMGR_COMMON_INCLUDE_MEM_MGR_PTR_UTIL_H
18 
19 #include "hilog/log.h"
20 
21 namespace OHOS {
22 namespace Memory {
23 #define DECLARE_SHARED_POINTER(classType, ptrName) std::shared_ptr<classType> ptrName = nullptr
24 
25 #define DECLARE_UNIQUE_POINTER(classType, ptrName) std::unique_ptr<classType> ptrName = nullptr
26 
27 #define MAKE_POINTER(ptrSelf, ptrType, classType, errLog, errAction, ...)   \
28     do {                                                                    \
29         ptrSelf = nullptr;                                                  \
30         try {                                                               \
31             ptrSelf = std::make_##ptrType<classType>(__VA_ARGS__);          \
32         } catch (...) {                                                     \
33             HILOGE(errLog);                                                 \
34         };                                                                  \
35         if (ptrSelf == nullptr) {                                           \
36             errAction;                                                      \
37         }                                                                   \
38     } while (0)
39 } // namespace MemMgr
40 } // namespace OHOS
41 #endif // OHOS_MEMORY_MEMMGR_COMMON_INCLUDE_MEM_MGR_PTR_UTIL_H
42