• 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     do {                                   \
44         if (!(expr)) {                     \
45             ERROR_AND_RETURN(expr, (ret)); \
46         }                                  \
47     } while (0)
48 
49 #define CHECK_EQ_RETURN(a, b, ret)      CHECK_AND_RETURN((a) == (b), ret)
50 #define CHECK_NE_RETURN(a, b, ret)      CHECK_AND_RETURN((a) != (b), ret)
51 #define CHECK_GE_RETURN(a, b, ret)      CHECK_AND_RETURN((a) >= (b), ret)
52 #define CHECK_GT_RETURN(a, b, ret)      CHECK_AND_RETURN((a) > (b), ret)
53 #define CHECK_LE_RETURN(a, b, ret)      CHECK_AND_RETURN((a) <= (b), ret)
54 #define CHECK_LT_RETURN(a, b, ret)      CHECK_AND_RETURN((a) < (b), ret)
55 #define CHECK_NULL_RETURN(ptr, ret)     CHECK_AND_RETURN((ptr) == NULL, ret)
56 #define CHECK_NOT_NULL_RETURN(ptr, ret) CHECK_AND_RETURN((ptr) != NULL, ret)
57 
58 #define LONGS_EQUAL_RETURN(x, y)                                                              \
59     do {                                                                                      \
60         int xx = (x);                                                                         \
61         int yy = (y);                                                                         \
62         if (xx != yy) {                                                                       \
63             HDF_LOGE(__FILE__ "(line:%d): expect:%d->" #x ", got:%d->" #y, __LINE__, xx, yy); \
64             return HDF_FAILURE;                                                               \
65         }                                                                                     \
66     } while (0)
67 
68 #define CHECK_TRUE_RETURN(cond)                                        \
69     do {                                                               \
70         if (cond) {                                                    \
71             break;                                                     \
72         }                                                              \
73         HDF_LOGE(__FILE__ "(line:%d): " #cond " is false!", __LINE__); \
74         return HDF_FAILURE;                                            \
75     } while (0)
76 
77 #define CHECK_FALSE_RETURN(cond)                                      \
78     do {                                                              \
79         if (!(cond)) {                                                \
80             break;                                                    \
81         }                                                             \
82         HDF_LOGE(__FILE__ "(line:%d): " #cond " is true!", __LINE__); \
83         return HDF_FAILURE;                                           \
84     } while (0)
85 
86 #endif /* PLATFORM_ASSERT_H */
87