1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: platform assertion
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_PLATFORM_UTILITY_ASSERT_H
13 #define EXTL_PLATFORM_UTILITY_ASSERT_H
15 /* ///////////////////////////////////////////////////////////////////////
18 #include "../../config/config.h"
19 #include "../../type/typedef.h"
21 /* ///////////////////////////////////////////////////////////////////////
25 #ifndef EXTL_ASSERT_DISABLE
26 # define EXTL_ASSERT(expr) ((expr)? ((void)0): \
27 EXTL_NS(EXTL_NS_PLATFORM(g_assertion_failed_proc)) \
28 (EXTL_LINENUM, #expr, EXTL_CURRENT_FUNCTION, EXTL_FILENAME))
30 # define EXTL_MESSAGE_ASSERT(expr, msg) EXTL_ASSERT(expr && msg)
31 # define EXTL_SET_ASSERT_FAILED_PROC(func) EXTL_NS(EXTL_NS_PLATFORM(set_assertion_failed_proc))(func)
33 # define EXTL_ASSERT(expr)
34 # define EXTL_MESSAGE_ASSERT(expr, msg)
35 # define EXTL_SET_ASSERT_FAILED_PROC(func)
38 /* The maximum size of the assertion-failed message text */
39 #define EXTL_ASSERT_MSG_SIZE_MAX 256
42 #if defined(EXTL_PLATFORM_IS_UNIX)
43 # include "../../unix/utility/assert_failed.h"
44 #elif defined(EXTL_PLATFORM_IS_WIN)
45 # include "../../win/utility/assert_failed.h"
48 /* ///////////////////////////////////////////////////////////////////////
49 * extl::platform namespace
51 EXTL_PLATFORM_BEGIN_WHOLE_NAMESPACE
53 /* using extl::platform::::win/unix::assertion_failed; */
54 #if defined(EXTL_PLATFORM_IS_UNIX)
55 EXTL_NS_USING(EXTL_NS(EXTL_NS_PLATFORM(EXTL_NS_UNIX(assertion_failed
))))
56 #elif defined(EXTL_PLATFORM_IS_WIN)
57 EXTL_NS_USING(EXTL_NS(EXTL_NS_PLATFORM(EXTL_NS_WIN(assertion_failed
))))
60 /* The assertion-failed handle function */
61 typedef void (*EXTL_ASSERTION_FAILED_PROC
)(e_uint_t const_ref nLine
,
62 e_char_t
const *pszExpr
,
63 e_char_t
const *pszFunc
,
64 e_char_t
const *pszFile
);
66 static EXTL_ASSERTION_FAILED_PROC g_assertion_failed_proc
= assertion_failed
;
68 /* Sets the assertion-failed handle function */
69 EXTL_INLINE EXTL_ASSERTION_FAILED_PROC
set_assertion_failed_proc(EXTL_ASSERTION_FAILED_PROC passertion_failedProc
)
71 EXTL_ASSERTION_FAILED_PROC pOldassertion_failedProc
= g_assertion_failed_proc
;
72 g_assertion_failed_proc
= (passertion_failedProc
== NULL
)? assertion_failed
: passertion_failedProc
;
73 return pOldassertion_failedProc
;
76 /* ///////////////////////////////////////////////////////////////////////
77 * extl::platform namespace
79 EXTL_PLATFORM_END_WHOLE_NAMESPACE
81 /* //////////////////////////////////////////////////////////////////// */
82 #endif /* EXTL_PLATFORM_UTILITY_ASSERT_H */
83 /* //////////////////////////////////////////////////////////////////// */