TextException.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef SQUID__TEXTEXCEPTION_H
10 #define SQUID__TEXTEXCEPTION_H
11 
12 #include "base/Assure.h"
13 #include "base/Here.h"
14 
15 #include <stdexcept>
16 
17 class SBuf;
18 
20 class TextException: public std::runtime_error
21 {
22 
23 public:
24  TextException(const char *message, const SourceLocation &location):
25  std::runtime_error(message),
26  where(location)
27  {}
28 
29  TextException(SBuf message, const SourceLocation &location);
30 
31  TextException(const TextException &) = default;
33  TextException& operator=(const TextException &) = default;
34 
35  /* std::runtime_error API */
36  virtual ~TextException() throw() override;
37  virtual const char *what() const throw() override;
38 
40  SourceLocationId id() const { return where.id(); }
41 
43  std::ostream &print(std::ostream &) const;
44 
47 
48  // TODO: Add support for arbitrary (re)thrower-supplied details:
49  // std::tuple<Details...> details;
50 };
51 
53 std::ostream &CurrentException(std::ostream &);
54 
56 std::ostream &operator <<(std::ostream &, const TextException &);
57 
59 #define TexcHere(msg) TextException((msg), Here())
60 
65 #define Must3(condition, description, location) \
66  Assure_(3, (condition), ("check failed: " description), (location))
67 
71 #define Must(condition) Must3((condition), #condition, Here())
72 
75 #define SWALLOW_EXCEPTIONS(code) \
76  try { \
77  code \
78  } catch (...) { \
79  debugs(0, DBG_IMPORTANT, "ERROR: Squid BUG: ignoring exception;" << \
80  Debug::Extra << "bug location: " << Here() << \
81  Debug::Extra << "ignored exception: " << CurrentException); \
82  }
83 
84 #endif /* SQUID__TEXTEXCEPTION_H */
85 
virtual ~TextException() override
TextException(TextException &&)=default
Definition: SBuf.h:87
TextException(const char *message, const SourceLocation &location)
Definition: TextException.h:24
TextException & operator=(const TextException &)=default
SourceLocationId id() const
Definition: Here.cc:67
SourceLocation where
code location related to the exception; usually the thrower location
Definition: TextException.h:46
std::ostream & CurrentException(std::ostream &)
prints active (i.e., thrown but not yet handled) exception
uint32_t SourceLocationId
semi-uniquely identifies a source code location; stable across Squid runs
Definition: Here.h:18
std::ostream & operator<<(std::ostream &, const TextException &)
efficiently prints TextException
a source code location that is cheap to create, copy, and store
Definition: Here.h:30
virtual const char * what() const override
an std::runtime_error with thrower location info
Definition: TextException.h:21
std::ostream & print(std::ostream &) const
dumps the exception text into the stream
TextException(const TextException &)=default

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors