blob: 6ae06e1614490f972c41b7a7d283b8e015f16b01 [file] [log] [blame] [edit]
/* Copyright 2023 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef CAMERA_TOOLS_MCTK_DEBUG_H_
#define CAMERA_TOOLS_MCTK_DEBUG_H_
#include <stdlib.h>
#include <source_location>
#include <string> /* to_string */
#include <string_view>
/* The function names here are UPPER CASE in order to be consistent with
* their classic use as macros, and with the one remaining macro MCTK_ASSERT.
*/
/* Print a message, without a prefix. */
void MCTK_VERBOSE(std::string_view msg);
/* Print a message, prefixed with the caller's name. */
void MCTK_ERR(std::string_view msg,
std::source_location = std::source_location::current());
void MCTK_PERROR(std::string_view msg,
std::source_location = std::source_location::current());
/* Print failed expression, then halt and catch fire. */
#define MCTK_ASSERT(exp) \
do { \
if (!(exp)) { \
MCTK_ERR("Failed assertion on: " #exp); \
\
exit(EXIT_FAILURE); \
} \
} while (0)
/* Print both expressions of a failed equality, then halt and catch fire. */
// clang-format off
#define MCTK_ASSERT_EQ(exp1, exp2) \
do { \
decltype((exp1)) __exp1 = (exp1); \
decltype((exp2)) __exp2 = (exp2); \
if (!((__exp1) == (__exp2))) { \
MCTK_ERR("Failed assertion on: MCTK_ASSERT_EQ(" #exp1 ", " #exp2 ")"); \
MCTK_ERR("Values : " + \
std::to_string(__exp1) + " == " + std::to_string(__exp2)); \
\
exit(EXIT_FAILURE); \
} \
} while (0)
// clang-format on
/* Print error message, then halt and catch fire. */
[[noreturn]] void MCTK_PANIC(
std::string_view msg,
std::source_location = std::source_location::current());
#endif // CAMERA_TOOLS_MCTK_DEBUG_H_