xref: /btstack/3rd-party/bluedroid/decoder/include/oi_assert.h (revision df25739fc3ea5a0a90f0f5925e6461d653697d2e)
1*df25739fSMilanka Ringwald /******************************************************************************
2*df25739fSMilanka Ringwald  *
3*df25739fSMilanka Ringwald  *  Copyright (C) 2014 The Android Open Source Project
4*df25739fSMilanka Ringwald  *  Copyright 2002 - 2004 Open Interface North America, Inc. All rights reserved.
5*df25739fSMilanka Ringwald  *
6*df25739fSMilanka Ringwald  *  Licensed under the Apache License, Version 2.0 (the "License");
7*df25739fSMilanka Ringwald  *  you may not use this file except in compliance with the License.
8*df25739fSMilanka Ringwald  *  You may obtain a copy of the License at:
9*df25739fSMilanka Ringwald  *
10*df25739fSMilanka Ringwald  *  http://www.apache.org/licenses/LICENSE-2.0
11*df25739fSMilanka Ringwald  *
12*df25739fSMilanka Ringwald  *  Unless required by applicable law or agreed to in writing, software
13*df25739fSMilanka Ringwald  *  distributed under the License is distributed on an "AS IS" BASIS,
14*df25739fSMilanka Ringwald  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*df25739fSMilanka Ringwald  *  See the License for the specific language governing permissions and
16*df25739fSMilanka Ringwald  *  limitations under the License.
17*df25739fSMilanka Ringwald  *
18*df25739fSMilanka Ringwald  ******************************************************************************/
19*df25739fSMilanka Ringwald #ifndef _OI_ASSERT_H
20*df25739fSMilanka Ringwald #define _OI_ASSERT_H
21*df25739fSMilanka Ringwald /** @file
22*df25739fSMilanka Ringwald   This file provides macros and functions for compile-time and run-time assertions.
23*df25739fSMilanka Ringwald 
24*df25739fSMilanka Ringwald   When the OI_DEBUG preprocessor value is defined, the macro OI_ASSERT is compiled into
25*df25739fSMilanka Ringwald   the program, providing for a runtime assertion failure check.
26*df25739fSMilanka Ringwald   C_ASSERT is a macro that can be used to perform compile time checks.
27*df25739fSMilanka Ringwald */
28*df25739fSMilanka Ringwald /**********************************************************************************
29*df25739fSMilanka Ringwald   $Revision: #1 $
30*df25739fSMilanka Ringwald ***********************************************************************************/
31*df25739fSMilanka Ringwald 
32*df25739fSMilanka Ringwald 
33*df25739fSMilanka Ringwald /** \addtogroup Debugging Debugging APIs */
34*df25739fSMilanka Ringwald /**@{*/
35*df25739fSMilanka Ringwald 
36*df25739fSMilanka Ringwald #ifdef __cplusplus
37*df25739fSMilanka Ringwald extern "C" {
38*df25739fSMilanka Ringwald #endif
39*df25739fSMilanka Ringwald 
40*df25739fSMilanka Ringwald 
41*df25739fSMilanka Ringwald #ifdef OI_DEBUG
42*df25739fSMilanka Ringwald 
43*df25739fSMilanka Ringwald /** The macro OI_ASSERT takes a condition argument. If the asserted condition
44*df25739fSMilanka Ringwald     does not evaluate to true, the OI_ASSERT macro calls the host-dependent function,
45*df25739fSMilanka Ringwald     OI_AssertFail(), which reports the failure and generates a runtime error.
46*df25739fSMilanka Ringwald */
47*df25739fSMilanka Ringwald void OI_AssertFail(char* file, int line, char* reason);
48*df25739fSMilanka Ringwald 
49*df25739fSMilanka Ringwald 
50*df25739fSMilanka Ringwald #define OI_ASSERT(condition) \
51*df25739fSMilanka Ringwald     { if (!(condition)) OI_AssertFail(__FILE__, __LINE__, #condition); }
52*df25739fSMilanka Ringwald 
53*df25739fSMilanka Ringwald #define OI_ASSERT_FAIL(msg) \
54*df25739fSMilanka Ringwald     { OI_AssertFail(__FILE__, __LINE__, msg); }
55*df25739fSMilanka Ringwald 
56*df25739fSMilanka Ringwald #else
57*df25739fSMilanka Ringwald 
58*df25739fSMilanka Ringwald 
59*df25739fSMilanka Ringwald #define OI_ASSERT(condition)
60*df25739fSMilanka Ringwald #define OI_ASSERT_FAIL(msg)
61*df25739fSMilanka Ringwald 
62*df25739fSMilanka Ringwald #endif
63*df25739fSMilanka Ringwald 
64*df25739fSMilanka Ringwald 
65*df25739fSMilanka Ringwald /**
66*df25739fSMilanka Ringwald    C_ASSERT() can be used to perform many compile-time assertions: type sizes, field offsets, etc.
67*df25739fSMilanka Ringwald    An assertion failure results in compile time error C2118: negative subscript.
68*df25739fSMilanka Ringwald    Unfortunately, this elegant macro doesn't work with GCC, so it's all commented out
69*df25739fSMilanka Ringwald    for now. Perhaps later.....
70*df25739fSMilanka Ringwald */
71*df25739fSMilanka Ringwald 
72*df25739fSMilanka Ringwald #ifndef C_ASSERT
73*df25739fSMilanka Ringwald // #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
74*df25739fSMilanka Ringwald // #define C_ASSERT(e)
75*df25739fSMilanka Ringwald #endif
76*df25739fSMilanka Ringwald 
77*df25739fSMilanka Ringwald 
78*df25739fSMilanka Ringwald /*****************************************************************************/
79*df25739fSMilanka Ringwald #ifdef __cplusplus
80*df25739fSMilanka Ringwald }
81*df25739fSMilanka Ringwald #endif
82*df25739fSMilanka Ringwald 
83*df25739fSMilanka Ringwald /**@}*/
84*df25739fSMilanka Ringwald 
85*df25739fSMilanka Ringwald #endif /* _OI_ASSERT_H */
86*df25739fSMilanka Ringwald 
87