• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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