GL Studio Safety Critical Embedded C++ Runtime Library
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
gls_assert.h
Go to the documentation of this file.
1/*! \file gls_assert.h
2
3\brief This header defines the runtime assert checking macros for
4 the GL Studio DO-178B Runtime Library.
5
6\par Copyright Information
7Copyright (C) 1999-2012 The DiSTI Corporation<br>
8Orlando, FL USA<br>
9All rights reserved.<br>
10
11 This file is copyrighted software and contains proprietary trade secrets of
12DiSTI, and embodies substantial creative efforts as well as confidential
13information, ideas, and expressions.
14
15 Permission to use, and copy this software and its documentation for any
16purpose is hereby granted per the Distribution Agreement and/or the Licensing
17Agreement signed with DiSTI. This permission is granted provided that:
18 1. The above copyright notice appears in all copies.
19 2. That both the copyright notice and this permission notice appear in
20 the supporting documentation.
21 3. That the names DiSTI and GL Studio not be used in advertising or
22 publicity pertaining to distribution of the software without specific,
23 written prior permission of DiSTI.
24
25 Permission to modify the software is granted, but not the right to
26distribute the source code whether modified, or non-modified. Modifying the
27software might invalidate the DO-178B certification package.
28
29 Permission to distribute binaries produced by compiling source code, or
30modified source code is granted, provided you:
31 1. Provide your name and address as the primary contact for the support
32 of your modified version.
33 2. Retain our contact information in regard to use of the base software.
34
35 DiSTI does not provide warranty for this software or guarantee that it
36satisfies any specification or requirement unless otherwise stated in a
37specific contractual arrangement between the customer and DiSTI.
38
39*/
40#ifndef _GLS_ASSERT_H
41#define _GLS_ASSERT_H
42
43#include "gls_include.h"
44
45#if defined( GLS_DEBUG ) && defined( GLS_UNIT_TEST )
46#pragma BullseyeCoverage save off
47#include <exception>
48#include <sstream>
49/** This class is used to report library assertion failures when running unit tests
50 * in debug mode. ( GLS_DEBUG && GLS_UNIT_TEST )
51 */
52class GlsAssertionFailure : public std::exception
53{
54public:
55 /** Constructor - create an instance with the given attributes
56 * \param msg string message describing the assertion failure
57 * \pre none
58 * \post GlsAssert macro is disabled
59 */
60 GlsAssertionFailure( const char* const msg ) :
61 std::exception( msg )
62 {
63 // disable further GlsAssert s from throwing
64 _glsAssertIsEnabled = false;
65 }
66
67 /** Dtor
68 * \pre none
69 * \post the GlsAssert macro is reenabled
70 */
71 ~GlsAssertionFailure() { _glsAssertIsEnabled = true; }
72
73 /** Determine if the GlsAssert macro should throw a GlsAssertionFailure in the debug unit test
74 * build. GlsAssert is disabled after the first assertion failure so that further potential
75 * assertion failures are not thrown as the stack unwinds. One assertion failure stops the
76 * unit test immediately so further assertion failures do not need to be thrown. The GlsAssert
77 * macro is reenabled by the destructor for this class which is called once the assertion has
78 * been caught and handled by the unit test runner.
79 * \pre none
80 * \post none
81 * \return true if the GlsAssert macro should throw a GlsAssertionFailure else false
82 */
83 static bool GlsAssertIsEnabled( void ) { return( _glsAssertIsEnabled ); }
84
85protected:
86 static bool _glsAssertIsEnabled; /**< true if the GlsAssert macro should throw
87 * a GlsAssertionFailure else false */
88};
89#pragma BullseyeCoverage restore
90#endif // ( GLS_DEBUG && GLS_UNIT_TEST )
91
92#if defined( GLS_DEBUG )
93 #if defined( GLS_UNIT_TEST )
94 // define GlsAssert macro to throw a GlsAssertionFailure when running unit tests in debug mode
95 #define GlsAssert( _exp ) if( !( _exp ) && GlsAssertionFailure::GlsAssertIsEnabled() ) \
96 { \
97 std::ostringstream msg; \
98 msg << "( " << #_exp << " ) at " << __FILE__ << " (" << __LINE__ << ")"; \
99 throw( GlsAssertionFailure( msg.str().c_str() ) ); \
100 }
101 #else
102 // define GlsAssert macro to use assert() if in debug mode and not unit test mode
103 #include <assert.h>
104 #define GlsAssert( _exp ) assert( _exp )
105 #endif // GLS_UNIT_TEST
106#else
107 // define GlsAssert macro as empty if not in debug mode
108 #define GlsAssert( _exp )
109#endif // defined( GLS_DEBUG )
110
111#define GlsError() GlsAssert( false )
112
113#endif // _GLS_ASSERT_H
This header defines any preprocessor defines needed to configure the GL Studio DO-178B Runtime Librar...