cpp-common
error.hh
Go to the documentation of this file.
1 // -*- mode: c++; c-basic-offset: 2; -*-
2 
9 #pragma once
10 
11 #include <cstring>
12 #include <iostream>
13 #include <optional>
14 
15 #include "nvsl/common.hh"
16 #include "nvsl/envvars.hh"
17 #include "nvsl/trace.hh"
18 
19 static inline std::string print_stuff__(std::string msg, std::string dec) {
20  std::cout << msg << " -- " << dec << std::endl;
21  return msg;
22 }
23 
25 #define PERROR_EXCEPTION(errcode, msg) \
26  ([]() { DBGE << msg << std::endl; }(), nvsl::dump_maps(), \
27  nvsl::print_trace(), \
28  std::system_error(errcode, std::generic_category()))
29 
31 #define ASSERT_NON_NULL(val, msg) \
32  do { \
33  DBGE << msg << std::endl; \
34  dump_maps(); \
35  print_trace(); \
36  if ((val) == NULL) { \
37  throw std::runtime_error((msg)); \
38  } \
39  } while (0);
40 
41 #ifdef RELEASE
42 
43 #define NVSL_ERROR(msg) \
44  do { \
45  DBGE << msg << std::endl; \
46  exit(1); \
47  } while (0);
48 #elif defined(BUILDING_PUDDLED) || defined(BUILDING_LIBCOMMON)
49 
50 #define NVSL_ERROR(msg) NVSL_ERROR_CLEAN(msg)
51 #else
52 
53 #define NVSL_ERROR(msg) \
54  do { \
55  DBGE << msg << std::endl; \
56  if (not get_env_val(NVSL_NO_STACKTRACE_ENV)) { \
57  nvsl::dump_maps(); \
58  nvsl::print_trace(); \
59  } \
60  exit(1); \
61  } while (0);
62 #endif // RELEASE
63 
65 #define NVSL_ERROR_CLEAN(msg) \
66  do { \
67  DBGE << msg << std::endl; \
68  exit(1); \
69  } while (0);
70 
72 #ifndef NDEBUG
73 #define NVSL_ASSERT(cond, msg) \
74  if (!(cond)) [[unlikely]] { \
75  DBGE << __FILE__ << ":" << __LINE__ << " Assertion `" << #cond \
76  << "' failed: " << msg << std::endl; \
77  if (not get_env_val(NVSL_NO_STACKTRACE_ENV)) { \
78  nvsl::print_trace(); \
79  } \
80  exit(1); \
81  }
82 #else
83 #define NVSL_ASSERT(cond, msg) \
84  if (true) { \
85  (void)(cond); \
86  }
87 #endif
88 
90 static inline std::string PSTR() {
91  return std::string(__FILE__) + ":" + std::to_string(__LINE__) + " " +
92  std::string(strerror(errno));
93 }
94 
95 using std::make_optional;
96 using std::optional;
common.hh
Common macros, constexpr and function definitions.
trace.hh
Brief description here.
envvars.hh
Declare environment variables and access their values.