1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef PLATFORM_ASSERT_H 10 #define PLATFORM_ASSERT_H 11 12 #include "platform_log.h" 13 14 #define ERROR_AND_LOG(expr) \ 15 do { \ 16 PLAT_LOGE(__FILE__ "(line:%d): " #expr " is false!", __LINE__); \ 17 } while (0) 18 19 #define CHECK(expr) \ 20 ( { \ 21 if (!(expr)) { \ 22 ERROR_AND_LOG(expr); \ 23 } \ 24 (expr); \ 25 }) 26 27 #define CHECK_EQ(a, b) CHECK((a) == (b)) 28 #define CHECK_NE(a, b) CHECK((a) != (b)) 29 #define CHECK_GE(a, b) CHECK((a) >= (b)) 30 #define CHECK_GT(a, b) CHECK((a) > (b)) 31 #define CHECK_LE(a, b) CHECK((a) <= (b)) 32 #define CHECK_LT(a, b) CHECK((a) < (b)) 33 #define CHECK_NULL(ptr) CHECK((ptr) == NULL) 34 #define CHECK_NOT_NULL(ptr) CHECK((ptr) != NULL) 35 36 #define ERROR_AND_RETURN(expr, ret) \ 37 do { \ 38 PLAT_LOGE(__FILE__ "(line:%d): " #expr " is false!", __LINE__); \ 39 return ret; \ 40 } while (0) 41 42 #define CHECK_AND_RETURN(expr, ret) \ 43 ( { \ 44 if (!(expr)) { \ 45 ERROR_AND_RETURN(expr, (ret)); \ 46 } \ 47 (expr); \ 48 }) 49 50 #define CHECK_EQ_RETURN(a, b, ret) CHECK_AND_RETURN((a) == (b), ret) 51 #define CHECK_NE_RETURN(a, b, ret) CHECK_AND_RETURN((a) != (b), ret) 52 #define CHECK_GE_RETURN(a, b, ret) CHECK_AND_RETURN((a) >= (b), ret) 53 #define CHECK_GT_RETURN(a, b, ret) CHECK_AND_RETURN((a) > (b), ret) 54 #define CHECK_LE_RETURN(a, b, ret) CHECK_AND_RETURN((a) <= (b), ret) 55 #define CHECK_LT_RETURN(a, b, ret) CHECK_AND_RETURN((a) < (b), ret) 56 #define CHECK_NULL_RETURN(ptr, ret) CHECK_AND_RETURN((ptr) == NULL, ret) 57 #define CHECK_NOT_NULL_RETURN(ptr, ret) CHECK_AND_RETURN((ptr) != NULL, ret) 58 59 #endif /* PLATFORM_ASSERT_H */ 60