103f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao/*
203f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * Copyright 2011, The Android Open Source Project
303f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao *
403f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
503f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * you may not use this file except in compliance with the License.
603f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * You may obtain a copy of the License at
703f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao *
803f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao *     http://www.apache.org/licenses/LICENSE-2.0
903f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao *
1003f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * Unless required by applicable law or agreed to in writing, software
1103f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
1203f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * See the License for the specific language governing permissions and
1403f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao * limitations under the License.
1503f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao */
1603f75e22ad9ea75dc536d199c3d11a98884be314Shih-wei Liao
17ec32227de4dbcb4c684d78716336d803140167beTDYa#ifndef RSL_ASSERT_H
18ec32227de4dbcb4c684d78716336d803140167beTDYa#define RSL_ASSERT_H
19ec32227de4dbcb4c684d78716336d803140167beTDYa
20ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien#if defined(__cplusplus)
21ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chienextern "C" {
22ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien#endif
23ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien
24ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chienextern void ASSERT_FAILED(char const *file,
25ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien                          unsigned line,
26ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien                          char const *expr);
27ec32227de4dbcb4c684d78716336d803140167beTDYa
28ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien#if defined(__cplusplus)
29ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien} // extern "C"
30ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien#endif
31ec32227de4dbcb4c684d78716336d803140167beTDYa
32ec32227de4dbcb4c684d78716336d803140167beTDYa#ifdef RSL_NDEBUG
33ec32227de4dbcb4c684d78716336d803140167beTDYa
34ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien#define rsl_assert(EXPR) \
35ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien  do { } while (0)
36ec32227de4dbcb4c684d78716336d803140167beTDYa
37ec32227de4dbcb4c684d78716336d803140167beTDYa#else
38ec32227de4dbcb4c684d78716336d803140167beTDYa
39ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien#define rsl_assert(EXPR)                                      \
40ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien  do {                                                        \
41ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien    if (!(EXPR)) {                                            \
42ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien      ASSERT_FAILED(__FILE__, __LINE__, #EXPR);               \
43ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien    }                                                         \
44ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien  } while (0)
45ec32227de4dbcb4c684d78716336d803140167beTDYa
46ec32227de4dbcb4c684d78716336d803140167beTDYa#endif
47ec32227de4dbcb4c684d78716336d803140167beTDYa
48ec32227de4dbcb4c684d78716336d803140167beTDYa#endif // RSL_ASSERT_H
49