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