10485dae0Sopenharmony_ci/* 20485dae0Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 30485dae0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 40485dae0Sopenharmony_ci * you may not use this file except in compliance with the License. 50485dae0Sopenharmony_ci * You may obtain a copy of the License at 60485dae0Sopenharmony_ci * 70485dae0Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 80485dae0Sopenharmony_ci * 90485dae0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 100485dae0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 110485dae0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120485dae0Sopenharmony_ci * See the License for the specific language governing permissions and 130485dae0Sopenharmony_ci * limitations under the License. 140485dae0Sopenharmony_ci */ 150485dae0Sopenharmony_ci 160485dae0Sopenharmony_ci#ifndef AIE_MACROS_H 170485dae0Sopenharmony_ci#define AIE_MACROS_H 180485dae0Sopenharmony_ci 190485dae0Sopenharmony_ci#include <cstdlib> 200485dae0Sopenharmony_ci#include <new> 210485dae0Sopenharmony_ci 220485dae0Sopenharmony_cinamespace OHOS { 230485dae0Sopenharmony_cinamespace AI { 240485dae0Sopenharmony_ci/** 250485dae0Sopenharmony_ci * If x is true, return ret, pass otherwise 260485dae0Sopenharmony_ci */ 270485dae0Sopenharmony_ci#define CHK_RET(x, ret) \ 280485dae0Sopenharmony_ci do { \ 290485dae0Sopenharmony_ci if (x) { \ 300485dae0Sopenharmony_ci return ret; \ 310485dae0Sopenharmony_ci } \ 320485dae0Sopenharmony_ci } while (0) 330485dae0Sopenharmony_ci 340485dae0Sopenharmony_ci/** 350485dae0Sopenharmony_ci * If x is true, return void, pass otherwise 360485dae0Sopenharmony_ci */ 370485dae0Sopenharmony_ci#define CHK_RET_NONE(x) \ 380485dae0Sopenharmony_ci do { \ 390485dae0Sopenharmony_ci if (x) { \ 400485dae0Sopenharmony_ci return; \ 410485dae0Sopenharmony_ci } \ 420485dae0Sopenharmony_ci } while (0) 430485dae0Sopenharmony_ci 440485dae0Sopenharmony_ci/** 450485dae0Sopenharmony_ci * Try assign classname to var, assign nullptr if failed 460485dae0Sopenharmony_ci */ 470485dae0Sopenharmony_ci#define AIE_NEW(var, classname) \ 480485dae0Sopenharmony_ci do { \ 490485dae0Sopenharmony_ci var = new(std::nothrow) classname; \ 500485dae0Sopenharmony_ci } while (0) 510485dae0Sopenharmony_ci 520485dae0Sopenharmony_ci/** 530485dae0Sopenharmony_ci * Try delete the pointer p, and set p to nullptr. 540485dae0Sopenharmony_ci */ 550485dae0Sopenharmony_ci#define AIE_DELETE(p) \ 560485dae0Sopenharmony_ci do { \ 570485dae0Sopenharmony_ci if (p == nullptr) { \ 580485dae0Sopenharmony_ci break; \ 590485dae0Sopenharmony_ci } \ 600485dae0Sopenharmony_ci delete p; \ 610485dae0Sopenharmony_ci p = nullptr; \ 620485dae0Sopenharmony_ci } while (0) 630485dae0Sopenharmony_ci 640485dae0Sopenharmony_ci/** 650485dae0Sopenharmony_ci * Try delete the pointer p[], and set p to nullptr. 660485dae0Sopenharmony_ci */ 670485dae0Sopenharmony_ci#define AIE_DELETE_ARRAY(p) \ 680485dae0Sopenharmony_ci do { \ 690485dae0Sopenharmony_ci if (p == nullptr) { \ 700485dae0Sopenharmony_ci break; \ 710485dae0Sopenharmony_ci } \ 720485dae0Sopenharmony_ci delete[] p; \ 730485dae0Sopenharmony_ci p = nullptr; \ 740485dae0Sopenharmony_ci } while (0) 750485dae0Sopenharmony_ci 760485dae0Sopenharmony_ci#undef FORBID_COPY_AND_ASSIGN 770485dae0Sopenharmony_ci/** 780485dae0Sopenharmony_ci * Forbid copy and assign classname, for singleton pattern. 790485dae0Sopenharmony_ci */ 800485dae0Sopenharmony_ci#define FORBID_COPY_AND_ASSIGN(CLASSNAME) \ 810485dae0Sopenharmony_ciprivate: \ 820485dae0Sopenharmony_ci CLASSNAME(const CLASSNAME&) = delete; \ 830485dae0Sopenharmony_ci CLASSNAME& operator = (const CLASSNAME&) = delete; \ 840485dae0Sopenharmony_ci CLASSNAME(CLASSNAME&&) = delete; \ 850485dae0Sopenharmony_ci CLASSNAME& operator = (CLASSNAME&&) = delete 860485dae0Sopenharmony_ci 870485dae0Sopenharmony_ci#undef FORBID_CREATE_BY_SELF 880485dae0Sopenharmony_ci/** 890485dae0Sopenharmony_ci * Forbid create classname, for singleton pattern. 900485dae0Sopenharmony_ci */ 910485dae0Sopenharmony_ci#define FORBID_CREATE_BY_SELF(CLASSNAME) \ 920485dae0Sopenharmony_ciprivate: \ 930485dae0Sopenharmony_ci CLASSNAME(); \ 940485dae0Sopenharmony_ci ~CLASSNAME() 950485dae0Sopenharmony_ci} // namespace AI 960485dae0Sopenharmony_ci} // namespace OHOS 970485dae0Sopenharmony_ci 980485dae0Sopenharmony_ci#endif // AIE_MACROS_H 99