blob: 9c1d653677e2e68c8d10c599833cebaf3c0307d0 [file] [log] [blame]
/*
* Copyright 2010-2016 Nest Labs Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* @file
* This file defines macros and interfaces for performing
* compile- and run-time assertion checking and run-time
* exception handling when #NL_ASSERT_PRODUCTION is false.
*
*/
#ifndef NLCORE_NLASSERT_NONPRODUCTION_H
#define NLCORE_NLASSERT_NONPRODUCTION_H
#include "nlassert-internal.h"
/**
* @ingroup check-style
*
* @{
*
*/
/**
* @def NL_ASSERT_CHECK_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for check-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_CHECK_NONPRODUCTION_FLAGS NL_ASSERT_CHECK_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_CHECK_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_BACKTRACE | NL_ASSERT_FLAG_LOG | NL_ASSERT_FLAG_TRAP)
/**
* @def NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for check-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_CHECK_NONPRODUCTION_FLAGS NL_ASSERT_CHECK_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS)
#define NL_ASSERT_CHECK_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlCHECK(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, if
* the condition is false.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlVERIFY
*
*/
#define nlCHECK(aCondition) __nlCHECK(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aCondition)
/**
* @def nlCHECK_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* executes @p anAction if the condition is false.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlVERIFY_ACTION
*
*/
#define nlCHECK_ACTION(aCondition, anAction) __nlCHECK_ACTION(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aCondition, anAction)
/**
* @def nlCHECK_PRINT(aCondition, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* prints @p aMessage if the condition is false.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlVERIFY_PRINT
*
*/
#define nlCHECK_PRINT(aCondition, aMessage) __nlCHECK_PRINT(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aCondition, aMessage)
/**
* @def nlCHECK_SUCCESS(aStatus)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)) and takes action, based
* on configuration, if the status is unsuccessful.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlVERIFY_SUCCESS
*
*/
#define nlCHECK_SUCCESS(aStatus) __nlCHECK_SUCCESS(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aStatus)
/**
* @def nlCHECK_SUCCESS_ACTION(aStatus, anAction)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)) and takes action, based
* on configuration, and executes @p anAction if the status is
* unsuccessful.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlVERIFY_SUCCESS_ACTION
*
*/
#define nlCHECK_SUCCESS_ACTION(aStatus, anAction) __nlCHECK_SUCCESS_ACTION(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aStatus, anAction)
/**
* @def nlCHECK_SUCCESS_PRINT(aStatus, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)) and takes action, based
* on configuration, and prints @p aMessage if the status is
* unsuccessful.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlVERIFY_SUCCESS_PRINT
*
*/
#define nlCHECK_SUCCESS_PRINT(aStatus, aMessage) __nlCHECK_SUCCESS_PRINT(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aStatus, aMessage)
/**
* @def nlNCHECK(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false and takes action, based on configuration, if
* the condition is true.
*
* @note This is the logical inverse of #nlCHECK
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlCHECK
* @sa #nlNVERIFY
*
*/
#define nlNCHECK(aCondition) __nlNCHECK(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aCondition)
/**
* @def nlNCHECK_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false and takes action, based on configuration, and
* executes @p anAction if the condition is true.
*
* @note This is the logical inverse of #nlCHECK_ACTION
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlCHECK_ACTION
* @sa #nlNVERIFY_ACTION
*
*/
#define nlNCHECK_ACTION(aCondition, anAction) __nlNCHECK_ACTION(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aCondition, anAction)
/**
* @def nlNCHECK_PRINT(aCondition, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false and takes action, based on configuration, and
* prints @p aMessage if the condition is true.
*
* @note This is the logical inverse of #nlCHECK_PRINT
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_CHECK_NONPRODUCTION_FLAGS
*
* @sa #nlCHECK_PRINT
* @sa #nlNVERIFY_PRINT
*
*/
#define nlNCHECK_PRINT(aCondition, aMessage) __nlNCHECK_PRINT(NL_ASSERT_CHECK_NONPRODUCTION_FLAGS, aCondition, aMessage)
/**
* @}
*
*/
/**
* @ingroup verify-style
*
* @{
*
*/
/**
* @def NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for verify-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_BACKTRACE | NL_ASSERT_FLAG_LOG | NL_ASSERT_FLAG_TRAP)
/**
* @def NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for verify-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS)
#define NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlVERIFY(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, if
* the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlCHECK
*
*/
#define nlVERIFY(aCondition) __nlVERIFY(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aCondition)
/**
* @def nlVERIFY_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* executes @p anAction if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlCHECK_ACTION
*
*/
#define nlVERIFY_ACTION(aCondition, anAction) __nlVERIFY_ACTION(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aCondition, anAction)
/**
* @def nlVERIFY_PRINT(aCondition, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* prints @p aMessage if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlCHECK_PRINT
*
*/
#define nlVERIFY_PRINT(aCondition, aMessage) __nlVERIFY_PRINT(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aCondition, aMessage)
/**
* @def nlVERIFY_SUCCESS(aStatus)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)) and takes action, based
* on configuration, if the status is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlCHECK_SUCCESS
*
*/
#define nlVERIFY_SUCCESS(aStatus) __nlVERIFY_SUCCESS(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aStatus)
/**
* @def nlVERIFY_SUCCESS_ACTION(aStatus, anAction)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)) and takes action, based
* on configuration, and executes @p anAction if the status is
* unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlCHECK_SUCCESS_ACTION
*
*/
#define nlVERIFY_SUCCESS_ACTION(aStatus, anAction) __nlVERIFY_SUCCESS_ACTION(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aStatus, anAction)
/**
* @def nlVERIFY_SUCCESS_PRINT(aStatus, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)) and takes action, based
* on configuration, and prints @p aMessage if the status is
* unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlCHECK_SUCCESS_PRINT
*
*/
#define nlVERIFY_SUCCESS_PRINT(aStatus, aMessage) __nlVERIFY_SUCCESS_PRINT(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aStatus, aMessage)
/**
* @def nlNVERIFY(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false and takes action, based on configuration, if
* the condition is true.
*
* @note This is the logical inverse of #nlVERIFY
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlVERIFY
* @sa #nlNCHECK
*
*/
#define nlNVERIFY(aCondition) __nlNVERIFY(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aCondition)
/**
* @def nlNVERIFY_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false and takes action, based on configuration, and
* executes @p anAction if the condition is true.
*
* @note This is the logical inverse of #nlVERIFY_ACTION
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlVERIFY_ACTION
* @sa #nlNCHECK_ACTION
*
*/
#define nlNVERIFY_ACTION(aCondition, anAction) __nlNVERIFY_ACTION(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aCondition, anAction)
/**
* @def nlNVERIFY_PRINT(aCondition, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false and takes action, based on configuration, and
* prints @p aMessage if the condition is true.
*
* @note This is the logical inverse of #nlVERIFY_PRINT
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_VERIFY_PRODUCTION_FLAGS
*
* @sa #nlVERIFY_PRINT
* @sa #nlNCHECK_PRINT
*
*/
#define nlNVERIFY_PRINT(aCondition, aMessage) __nlNVERIFY_PRINT(NL_ASSERT_VERIFY_NONPRODUCTION_FLAGS, aCondition, aMessage)
/**
* @}
*
*/
/**
* @ingroup desire-style
*
* @{
*
*/
/**
* @def NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for desire-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_LOG)
/**
* @def NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for desire-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS)
#define NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlDESIRE(aCondition, aLabel)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and branches to @p aLabel if the condition is
* false.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT
* @sa #nlREQUIRE
*
*/
#define nlDESIRE(aCondition, aLabel) __nlEXPECT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel)
/**
* @def nlDESIRE_PRINT(aCondition, aLabel, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both prints @p aMessage and then branches
* to @p aLabel if the condition is false.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_PRINT
* @sa #nlREQUIRE_PRINT
*
*/
#define nlDESIRE_PRINT(aCondition, aLabel, aMessage) __nlEXPECT_PRINT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, aMessage)
/**
* @def nlDESIRE_ACTION(aCondition, aLabel, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both executes @p anAction and branches to
* @p aLabel if the condition is false.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_ACTION
* @sa #nlREQUIRE_ACTION
*
*/
#define nlDESIRE_ACTION(aCondition, aLabel, anAction) __nlEXPECT_ACTION(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction)
/**
* @def nlDESIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, prints @p aMessage, executes @p anAction, and
* branches to @p aLabel if the condition is false.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_ACTION_PRINT
* @sa #nlREQUIRE_ACTION_PRINT
*
*/
#define nlDESIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage) __nlEXPECT_ACTION_PRINT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction, aMessage)
/**
* @def nlDESIRE_SUCCESS(aStatus, aLabel)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and branches to @p
* aLabel if the status is unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS
* @sa #nlREQUIRE_SUCCESS
*
*/
#define nlDESIRE_SUCCESS(aStatus, aLabel) __nlEXPECT_SUCCESS(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aStatus, aLabel)
/**
* @def nlDESIRE_SUCCESS_PRINT(aStatus, aLabel, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both prints @p
* aMessage and then branches to @p aLabel if the status is
* unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_PRINT
* @sa #nlREQUIRE_SUCCESS_PRINT
*
*/
#define nlDESIRE_SUCCESS_PRINT(aStatus, aLabel, aMessage) __nlEXPECT_SUCCESS_PRINT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aStatus, aLabel, aMessage)
/**
* @def nlDESIRE_SUCCESS_ACTION(aStatus, aLabel, anAction)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both executes @p
* anAction and branches to @p aLabel if the status is
* unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_ACTION
* @sa #nlREQUIRE_SUCCESS_ACTION
*
*/
#define nlDESIRE_SUCCESS_ACTION(aStatus, aLabel, anAction) __nlEXPECT_SUCCESS_ACTION(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aStatus, aLabel, anAction)
/**
* @def nlDESIRE_SUCCESS_ACTION_PRINT(aStatus, aLabel, anAction, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), prints @p aMessage,
* executes @p anAction, and branches to @p aLabel if the status is
* unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_ACTION_PRINT
* @sa #nlREQUIRE_SUCCESS_ACTION_PRINT
*
*/
#define nlDESIRE_SUCCESS_ACTION_PRINT(aStatus, aLabel, anAction, aMessage) __nlEXPECT_SUCCESS_ACTION_PRINT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aStatus, aLabel, anAction, aMessage)
/**
* @def nlNDESIRE(aCondition, aLabel)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and branches to @p aLabel if the condition is
* true.
*
* @note This is the logical inverse of #nlDESIRE.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlDESIRE
* @sa #nlNEXPECT
* @sa #nlNREQUIRE
*
*/
#define nlNDESIRE(aCondition, aLabel) __nlNEXPECT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel)
/**
* @def nlNDESIRE_PRINT(aCondition, aLabel, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both prints @p aMessage and then branches
* to @p aLabel if the condition is true.
*
* @note This is the logical inverse of #nlDESIRE_PRINT.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlDESIRE_PRINT
* @sa #nlNEXPECT_PRINT
* @sa #nlNREQUIRE_PRINT
*
*/
#define nlNDESIRE_PRINT(aCondition, aLabel, aMessage) __nlNEXPECT_PRINT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, aMessage)
/**
* @def nlNDESIRE_ACTION(aCondition, aLabel, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both executes @p anAction and branches to
* @p aLabel if the condition is true.
*
* @note This is the logical inverse of #nlDESIRE_ACTION.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlDESIRE_ACTION
* @sa #nlNEXPECT_ACTION
* @sa #nlNREQUIRE_ACTION
*
*/
#define nlNDESIRE_ACTION(aCondition, aLabel, anAction) __nlNEXPECT_ACTION(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction)
/**
* @def nlNDESIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, prints @p aMessage, executes @p anAction, and
* branches to @p aLabel if the condition is true.
*
* @note This is the logical inverse of #nlDESIRE_ACTION_PRINT.
*
* __Anticipated Assertion Firing Frequency:__ Occasional
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_DESIRE_PRODUCTION_FLAGS
*
* @sa #nlDESIRE_ACTION_PRINT
* @sa #nlNEXPECT_ACTION_PRINT
* @sa #nlNREQUIRE_ACTION_PRINT
*
*/
#define nlNDESIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage) __nlNEXPECT_ACTION_PRINT(NL_ASSERT_DESIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction, aMessage)
/**
* @}
*
*/
/**
* @ingroup require-style
*
* @{
*
*/
/**
* @def NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for require-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_BACKTRACE | NL_ASSERT_FLAG_LOG | NL_ASSERT_FLAG_TRAP)
/**
* @def NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for require-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS)
#define NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlREQUIRE(aCondition, aLabel)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and branches to @p aLabel if the condition is
* false.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT
* @sa #nlDESIRE
*
*/
#define nlREQUIRE(aCondition, aLabel) __nlEXPECT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel)
/**
* @def nlREQUIRE_PRINT(aCondition, aLabel, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both prints @p aMessage and then branches
* to @p aLabel if the condition is false.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_PRINT
* @sa #nlDESIRE_PRINT
*
*/
#define nlREQUIRE_PRINT(aCondition, aLabel, aMessage) __nlEXPECT_PRINT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, aMessage)
/**
* @def nlREQUIRE_ACTION(aCondition, aLabel, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both executes @p anAction and branches to
* @p aLabel if the condition is false.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_ACTION
* @sa #nlDESIRE_ACTION
*
*/
#define nlREQUIRE_ACTION(aCondition, aLabel, anAction) __nlEXPECT_ACTION(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction)
/**
* @def nlREQUIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, prints @p aMessage, executes @p anAction, and
* branches to @p aLabel if the condition is false.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_ACTION_PRINT
* @sa #nlDESIRE_ACTION_PRINT
*
*/
#define nlREQUIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage) __nlEXPECT_ACTION_PRINT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction, aMessage)
/**
* @def nlREQUIRE_SUCCESS(aStatus, aLabel)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and branches to @p
* aLabel if the status is unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS
* @sa #nlDESIRE_SUCCESS
*
*/
#define nlREQUIRE_SUCCESS(aStatus, aLabel) __nlEXPECT_SUCCESS(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aStatus, aLabel)
/**
* @def nlREQUIRE_SUCCESS_PRINT(aStatus, aLabel, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both prints @p
* aMessage and then branches to @p aLabel if the status is
* unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_PRINT
* @sa #nlDESIRE_SUCCESS_PRINT
*
*/
#define nlREQUIRE_SUCCESS_PRINT(aStatus, aLabel, aMessage) __nlEXPECT_SUCCESS_PRINT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aStatus, aLabel, aMessage)
/**
* @def nlREQUIRE_SUCCESS_ACTION(aStatus, aLabel, anAction)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both executes @p
* anAction and branches to @p aLabel if the status is
* unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_ACTION
* @sa #nlDESIRE_SUCCESS_ACTION
*
*/
#define nlREQUIRE_SUCCESS_ACTION(aStatus, aLabel, anAction) __nlEXPECT_SUCCESS_ACTION(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aStatus, aLabel, anAction)
/**
* @def nlREQUIRE_SUCCESS_ACTION_PRINT(aStatus, aLabel, anAction, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), prints @p aMessage,
* executes @p anAction, and branches to @p aLabel if the status is
* unsuccessful.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aLabel The local label to which execution branches
* when @p aStatus does not evaluate to zero
* (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_ACTION_PRINT
* @sa #nlDESIRE_SUCCESS_ACTION_PRINT
*
*/
#define nlREQUIRE_SUCCESS_ACTION_PRINT(aStatus, aLabel, anAction, aMessage) __nlEXPECT_SUCCESS_ACTION_PRINT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aStatus, aLabel, anAction, aMessage)
/**
* @def nlNREQUIRE(aCondition, aLabel)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and branches to @p aLabel if the condition is
* true.
*
* @note This is the logical inverse of #nlREQUIRE.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlREQUIRE
* @sa #nlNEXPECT
* @sa #nlNDESIRE
*
*/
#define nlNREQUIRE(aCondition, aLabel) __nlNEXPECT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel)
/**
* @def nlNREQUIRE_PRINT(aCondition, aLabel, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both prints @p aMessage and then branches
* to @p aLabel if the condition is true.
*
* @note This is the logical inverse of #nlREQUIRE_PRINT.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlREQUIRE_PRINT
* @sa #nlNEXPECT_PRINT
* @sa #nlNDESIRE_PRINT
*
*/
#define nlNREQUIRE_PRINT(aCondition, aLabel, aMessage) __nlNEXPECT_PRINT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, aMessage)
/**
* @def nlNREQUIRE_ACTION(aCondition, aLabel, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both executes @p anAction and branches to
* @p aLabel if the condition is true.
*
* @note This is the logical inverse of #nlREQUIRE_ACTION.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlREQUIRE_ACTION
* @sa #nlNEXPECT_ACTION
* @sa #nlNDESIRE_ACTION
*
*/
#define nlNREQUIRE_ACTION(aCondition, aLabel, anAction) __nlNEXPECT_ACTION(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction)
/**
* @def nlNREQUIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, prints @p aMessage, executes @p anAction, and
* branches to @p aLabel if the condition is true.
*
* @note This is the logical inverse of #nlREQUIRE_ACTION_PRINT.
*
* __Anticipated Assertion Firing Frequency:__ Rare
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aLabel The local label to which execution branches
* when @p aCondition evaluates to false (i.e.
* compares equal to zero).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_REQUIRE_PRODUCTION_FLAGS
*
* @sa #nlREQUIRE_ACTION_PRINT
* @sa #nlNEXPECT_ACTION_PRINT
* @sa #nlNDESIRE_ACTION_PRINT
*
*/
#define nlNREQUIRE_ACTION_PRINT(aCondition, aLabel, anAction, aMessage) __nlNEXPECT_ACTION_PRINT(NL_ASSERT_REQUIRE_NONPRODUCTION_FLAGS, aCondition, aLabel, anAction, aMessage)
/**
* @}
*
*/
/**
* @ingroup precondition-style
*
* @{
*
*/
/**
* @def NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for precondition-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_BACKTRACE | NL_ASSERT_FLAG_LOG | NL_ASSERT_FLAG_TRAP)
/**
* @def NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for precondition-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS)
#define NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlPRECONDITION(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and returns from the enclosing function if the
* condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT
* @sa #nlDESIRE
* @sa #nlREQUIRE
*
*/
#define nlPRECONDITION(aCondition) __nlPRECONDITION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return)
/**
* @def nlPRECONDITION_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both executes @p anAction and returns from
* the enclosing function if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_ACTION
* @sa #nlDESIRE_ACTION
* @sa #nlREQUIRE_ACTION
*
*/
#define nlPRECONDITION_ACTION(aCondition, anAction) __nlPRECONDITION_ACTION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return, anAction)
/**
* @def nlPRECONDITION_PRINT(aCondition, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both prints @p aMessage and then returns
* from the enclosing function if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_PRINT
* @sa #nlDESIRE_PRINT
* @sa #nlREQUIRE_PRINT
*
*/
#define nlPRECONDITION_PRINT(aCondition, aMessage) __nlPRECONDITION_PRINT(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return, aMessage)
/**
* @def nlPRECONDITION_SUCCESS(aStatus)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and returns from the
* enclosing function if the status is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS
* @sa #nlDESIRE_SUCCESS
* @sa #nlREQUIRE_SUCCESS
*
*/
#define nlPRECONDITION_SUCCESS(aStatus) __nlPRECONDITION_SUCCESS(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aStatus, return)
/**
* @def nlPRECONDITION_SUCCESS_ACTION(aStatus, anAction)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both executes @p
* anAction and returns from the enclosing function if the status
* is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_ACTION
* @sa #nlDESIRE_SUCCESS_ACTION
* @sa #nlREQUIRE_SUCCESS_ACTION
*
*/
#define nlPRECONDITION_SUCCESS_ACTION(aStatus, anAction) __nlPRECONDITION_SUCCESS_ACTION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aStatus, return, anAction)
/**
* @def nlPRECONDITION_SUCCESS_PRINT(aStatus, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both prints @p
* aMessage and then returns from the enclosing function if the
* status is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_PRINT
* @sa #nlDESIRE_SUCCESS_PRINT
* @sa #nlREQUIRE_SUCCESS_PRINT
*
*/
#define nlPRECONDITION_SUCCESS_PRINT(aStatus, aMessage) __nlPRECONDITION_SUCCESS_PRINT(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aStatus, return, aMessage)
/**
* @def nlNPRECONDITION(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and returns from the enclosing function if
* the condition is true.
*
* @note This is the logical inverse of #nlPRECONDITION.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlPRECONDITION
*
* @sa #nlNEXPECT
* @sa #nlNDESIRE
* @sa #nlNREQUIRE
*
*/
#define nlNPRECONDITION(aCondition) __nlNPRECONDITION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return)
/**
* @def nlNPRECONDITION_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both executes @p anAction and returns from
* the enclosing function if the condition is true.
*
* @note This is the logical inverse of #nlPRECONDITION_ACTION.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlPRECONDITION_ACTION
*
* @sa #nlNEXPECT_ACTION
* @sa #nlNDESIRE_ACTION
* @sa #nlNREQUIRE_ACTION
*
*/
#define nlNPRECONDITION_ACTION(aCondition, anAction) __nlNPRECONDITION_ACTION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return, anAction)
/**
* @def nlNPRECONDITION_PRINT(aCondition, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both prints @p aMessage and then returns
* from the enclosing function if the condition is true.
*
* @note This is the logical inverse of #nlPRECONDITION_PRINT.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlPRECONDITION_PRINT
*
* @sa #nlNEXPECT_PRINT
* @sa #nlNDESIRE_PRINT
* @sa #nlNREQUIRE_PRINT
*
*/
#define nlNPRECONDITION_PRINT(aCondition, aMessage) __nlNPRECONDITION_PRINT(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return, aMessage)
/**
* @def nlPRECONDITION_VALUE(aCondition, aValue)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and returns @p aValue from the enclosing
* function if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aValue The value to be returned when the assertion
* fails.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT
* @sa #nlDESIRE
* @sa #nlREQUIRE
*
*/
#define nlPRECONDITION_VALUE(aCondition, aValue) __nlPRECONDITION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return aValue)
/**
* @def nlPRECONDITION_VALUE_ACTION(aCondition, aValue, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both executes @p anAction and returns @p
* aValue from the enclosing function if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aValue The value to be returned when the assertion
* fails.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_ACTION
* @sa #nlDESIRE_ACTION
* @sa #nlREQUIRE_ACTION
*
*/
#define nlPRECONDITION_VALUE_ACTION(aCondition, aValue, anAction) __nlPRECONDITION_ACTION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return aValue, anAction)
/**
* @def nlPRECONDITION_VALUE_PRINT(aCondition, aValue, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true, and both prints @p aMessage and then returns
* @p aValue from the enclosing function if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aValue The value to be returned when the assertion
* fails.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_PRINT
* @sa #nlDESIRE_PRINT
* @sa #nlREQUIRE_PRINT
*
*/
#define nlPRECONDITION_VALUE_PRINT(aCondition, aValue, aMessage) __nlPRECONDITION_PRINT(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return aValue, aMessage)
/**
* @def nlPRECONDITION_VALUE_SUCCESS(aStatus, aValue)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and returns @p aValue
* from the enclosing function if the status is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aValue The value to be returned when the assertion
* fails.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS
* @sa #nlDESIRE_SUCCESS
* @sa #nlREQUIRE_SUCCESS
*
*/
#define nlPRECONDITION_VALUE_SUCCESS(aStatus, aValue) __nlPRECONDITION_SUCCESS(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aStatus, return aValue)
/**
* @def nlPRECONDITION_VALUE_SUCCESS_ACTION(aStatus, aValue, anAction)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both executes @p
* anAction and returns @p aValue from the enclosing function if
* the status is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aValue The value to be returned when the assertion
* fails.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_ACTION
* @sa #nlDESIRE_SUCCESS_ACTION
* @sa #nlREQUIRE_SUCCESS_ACTION
*
*/
#define nlPRECONDITION_VALUE_SUCCESS_ACTION(aStatus, aValue, anAction) __nlPRECONDITION_SUCCESS_ACTION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aStatus, return aValue, anAction)
/**
* @def nlPRECONDITION_VALUE_SUCCESS_PRINT(aStatus, aValue, aMessage)
*
* @brief
* This checks for the specified status, which is expected to
* commonly be successful (i.e. zero (0)), and both prints @p
* aMessage and then returns @p aValue from the enclosing function
* if the status is unsuccessful.
*
* @param[in] aStatus A scalar status to be evaluated against zero (0).
* @param[in] aValue The value to be returned when the assertion
* fails.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlEXPECT_SUCCESS_PRINT
* @sa #nlDESIRE_SUCCESS_PRINT
* @sa #nlREQUIRE_SUCCESS_PRINT
*
*/
#define nlPRECONDITION_VALUE_SUCCESS_PRINT(aStatus, aValue, aMessage) __nlPRECONDITION_SUCCESS_PRINT(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aStatus, return aValue, aMessage)
/**
* @def nlNPRECONDITION_VALUE(aCondition, aValue)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and returns @p aValue from the enclosing
* function if the condition is true.
*
* @note This is the logical inverse of #nlPRECONDITION_VALUE.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aValue The value to be returned when the assertion
* fails.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlPRECONDITION_VALUE
*
* @sa #nlNEXPECT
* @sa #nlNDESIRE
* @sa #nlNREQUIRE
*
*/
#define nlNPRECONDITION_VALUE(aCondition, aValue) __nlNPRECONDITION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return aValue)
/**
* @def nlNPRECONDITION_VALUE_ACTION(aCondition, aValue, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both executes @p anAction and returns @p
* aValue from the enclosing function if the condition is true.
*
* @note This is the logical inverse of #nlPRECONDITION_VALUE_ACTION.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aValue The value to be returned when the assertion
* fails.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlPRECONDITION_VALUE_ACTION
*
* @sa #nlNEXPECT_ACTION
* @sa #nlNDESIRE_ACTION
* @sa #nlNREQUIRE_ACTION
*
*/
#define nlNPRECONDITION_VALUE_ACTION(aCondition, aValue, anAction) __nlNPRECONDITION_ACTION(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return aValue, anAction)
/**
* @def nlNPRECONDITION_VALUE_PRINT(aCondition, aValue, aMessage)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be false, and both prints @p aMessage and then returns
* @p aValue from the enclosing function if the condition is true.
*
* @note This is the logical inverse of #nlPRECONDITION_VALUE_PRINT.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] aValue The value to be returned when the assertion
* fails.
* @param[in] aMessage A pointer to a NULL-terminated C string
* containing a caller-specified message
* further describing the assertion failure.
*
* @sa #NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_PRECONDITION_PRODUCTION_FLAGS
*
* @sa #nlPRECONDITION_VALUE_PRINT
*
* @sa #nlNEXPECT_PRINT
* @sa #nlNDESIRE_PRINT
* @sa #nlNREQUIRE_PRINT
*
*/
#define nlNPRECONDITION_VALUE_PRINT(aCondition, aValue, aMessage) __nlNPRECONDITION_PRINT(NL_ASSERT_PRECONDITION_NONPRODUCTION_FLAGS, aCondition, return aValue, aMessage)
/**
* @}
*
*/
/**
* @ingroup assert-style
*
* @{
*
*/
/**
* @def NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for assert-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_BACKTRACE | NL_ASSERT_FLAG_LOG)
/**
* @def NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for assert-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS)
#define NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlASSERT(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* invokes #NL_ASSERT_ABORT() if the condition is false.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS
*
* @sa #nlCHECK
* @sa #nlVERIFY
* @sa #nlABORT
*
*/
#define nlASSERT(aCondition) __nlABORT(NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS, aCondition)
/**
* @def nlASSERT_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* both executes @p anAction and then invokes #NL_ASSERT_ABORT() if
* the condition is false.
*
* @note If #NL_ASSERT_PRODUCTION is true, the check is made inactive. But
* side-effects, if any, in the asserted expression will still be produced.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS
*
* @sa #nlCHECK_ACTION
* @sa #nlVERIFY_ACTION
* @sa #nlABORT_ACTION
*
*/
#define nlASSERT_ACTION(aCondition, anAction) __nlABORT_ACTION(NL_ASSERT_ASSERT_NONPRODUCTION_FLAGS, aCondition, anAction)
/**
* @}
*
*/
/**
* @ingroup abort-style
*
* @{
*
*/
/**
* @def NL_ASSERT_ABORT_NONPRODUCTION_FLAGS_DEFAULT
*
* @brief
* This defines the default behavioral flags for abort-style
* exception family assertions when #NL_ASSERT_PRODUCTION is
* disabled.
*
* This may be used to override #NL_ASSERT_ABORT_NONPRODUCTION_FLAGS as follows:
*
* @code
* #define NL_ASSERT_ABORT_NONPRODUCTION_FLAGS NL_ASSERT_ABORT_NONPRODUCTION_FLAGS_DEFAULT
*
* #include <nlassert.h>
* @endcode
*
* @sa #NL_ASSERT_ABORT_NONPRODUCTION_FLAGS
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*
*/
#define NL_ASSERT_ABORT_NONPRODUCTION_FLAGS_DEFAULT (NL_ASSERT_FLAG_BACKTRACE | NL_ASSERT_FLAG_LOG)
/**
* @def NL_ASSERT_ABORT_NONPRODUCTION_FLAGS
*
* @brief
* This defines the behavioral flags when #NL_ASSERT_PRODUCTION is
* disabled that govern the behavior for abort-style exception
* family assertions when the assertion expression evaluates to
* false.
*
* @sa #NL_ASSERT_USE_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_ABORT_NONPRODUCTION_FLAGS_DEFAULT
*
* @sa #NL_ASSERT_PRODUCTION
*
* @sa #NL_ASSERT_FLAG_BACKTRACE
* @sa #NL_ASSERT_FLAG_LOG
* @sa #NL_ASSERT_FLAG_TRAP
*/
#if NL_ASSERT_USE_FLAGS_DEFAULT
#define NL_ASSERT_ABORT_NONPRODUCTION_FLAGS NL_ASSERT_ABORT_NONPRODUCTION_FLAGS_DEFAULT
#elif !defined(NL_ASSERT_ABORT_NONPRODUCTION_FLAGS)
#define NL_ASSERT_ABORT_NONPRODUCTION_FLAGS (NL_ASSERT_FLAG_NONE)
#endif
/**
* @def nlABORT(aCondition)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* invokes #NL_ASSERT_ABORT() if the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
*
* @sa #NL_ASSERT_ABORT_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_ABORT_PRODUCTION_FLAGS
*
* @sa #nlCHECK
* @sa #nlVERIFY
* @sa #nlASSERT
*
*/
#define nlABORT(aCondition) __nlABORT(NL_ASSERT_ABORT_NONPRODUCTION_FLAGS, aCondition)
/**
* @def nlABORT_ACTION(aCondition, anAction)
*
* @brief
* This checks for the specified condition, which is expected to
* commonly be true and takes action, based on configuration, and
* both executes @p anAction and then invokes #NL_ASSERT_ABORT() if
* the condition is false.
*
* @param[in] aCondition A Boolean expression to be evaluated.
* @param[in] anAction An expression or block to execute when the
* assertion fails. This will be executed
* after #NL_ASSERT_LOG() and
* #NL_ASSERT_BACKTRACE() but before
* #NL_ASSERT_TRAP().
*
* @sa #NL_ASSERT_ABORT_NONPRODUCTION_FLAGS
* @sa #NL_ASSERT_ABORT_PRODUCTION_FLAGS
*
* @sa #nlCHECK_ACTION
* @sa #nlVERIFY_ACTION
* @sa #nlASSERT_ACTION
*
*/
#define nlABORT_ACTION(aCondition, anAction) __nlABORT_ACTION(NL_ASSERT_ABORT_NONPRODUCTION_FLAGS, aCondition, anAction)
/**
* @}
*
*/
#endif /* NLCORE_NLASSERT_NONPRODUCTION_H */