libcamera: log: Add an ASSERT macro

The ASSERT() macro is similar to the assert() macro defined by the C
standard, but uses the libcamera logging infrastructure.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart 2019-01-04 17:46:35 +02:00
parent 99a3e7bcfb
commit ce24c052de
2 changed files with 25 additions and 0 deletions

View file

@ -36,6 +36,15 @@ private:
#define LOG(severity) LogMessage(__FILE__, __LINE__, Log##severity).stream()
#ifndef NDEBUG
#define ASSERT(condition) static_cast<void>(({ \
if (!(condition)) \
LOG(Fatal) << "assertion \"" #condition "\" failed"; \
}))
#else
#define ASSERT(condition) static_cast<void>(false && (condition))
#endif
} /* namespace libcamera */
#endif /* __LIBCAMERA_LOG_H__ */

View file

@ -48,6 +48,22 @@ namespace libcamera {
* terminates immediately after printing the message.
*/
/**
* \def ASSERT(condition)
* \brief Abort program execution if assertion fails
*
* If \a condition is false, ASSERT() logs an error message with the Fatal log
* level and aborts program execution.
*
* If the macro NDEBUG is defined before including log.h, ASSERT() generates no
* code.
*
* Using conditions that have side effects with ASSERT() is not recommended, as
* these effects would depend on whether NDEBUG is defined or not. Similarly,
* ASSERT() should not be used to check for errors that can occur under normal
* conditions as those checks would then be removed when compiling with NDEBUG.
*/
static const char *log_severity_name(LogSeverity severity)
{
static const char * const names[] = {