gtsam
Loading...
Searching...
No Matches
ThreadsafeException.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4 * Atlanta, Georgia 30332-0415
5 * All Rights Reserved
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8 * See LICENSE for the license information
9
10 * -------------------------------------------------------------------------- */
11
19
20#pragma once
21
22#include <gtsam/config.h> // for GTSAM_USE_TBB
23
24#include <gtsam/dllexport.h>
25#include <string>
26#include <typeinfo>
27#include <exception>
28#include <optional>
29
30#ifdef GTSAM_USE_TBB
31#include <tbb/tbb_allocator.h>
32#include <tbb/scalable_allocator.h>
33#include <iostream>
34#endif
35
36namespace gtsam {
37
39template<class DERIVED>
41public std::exception
42{
43private:
44 typedef std::exception Base;
45#ifdef GTSAM_USE_TBB
46protected:
47 typedef std::basic_string<char, std::char_traits<char>,
48 tbb::tbb_allocator<char> > String;
49 typedef tbb::tbb_allocator<char> Allocator;
50#else
51protected:
52 typedef std::string String;
53 typedef std::allocator<char> Allocator;
54#endif
55
56protected:
57 bool dynamic_;
58 mutable std::optional<String> description_;
59
62 dynamic_(false) {
63 }
64
67 Base(other), dynamic_(false) {
68 }
69
71 ThreadsafeException(const std::string& description) :
72 dynamic_(false), description_(
73 String(description.begin(), description.end())) {
74 }
75
77 ~ThreadsafeException() noexcept override {
78 }
79
80public:
81 const char* what() const noexcept override {
82 return description_ ? description_->c_str() : "";
83 }
84};
85
87class GTSAM_EXPORT RuntimeErrorThreadsafe: public ThreadsafeException<RuntimeErrorThreadsafe> {
88public:
90 RuntimeErrorThreadsafe(const std::string& description) :
92 }
93};
94
96class OutOfRangeThreadsafe: public ThreadsafeException<OutOfRangeThreadsafe> {
97public:
99 OutOfRangeThreadsafe(const std::string& description) :
101 }
102};
103
106 InvalidArgumentThreadsafe> {
107public:
109 InvalidArgumentThreadsafe(const std::string& description) :
111 }
112};
113
115class CholeskyFailed : public gtsam::ThreadsafeException<CholeskyFailed>
116{
117public:
118 CholeskyFailed() noexcept {}
119 ~CholeskyFailed() noexcept override {}
120};
121
122} // namespace gtsam
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
std::optional< String > description_
Optional description.
Definition ThreadsafeException.h:58
~ThreadsafeException() noexcept override
Default destructor doesn't have the noexcept.
Definition ThreadsafeException.h:77
bool dynamic_
Whether this object was moved.
Definition ThreadsafeException.h:57
ThreadsafeException()
Default constructor is protected - may only be created from derived classes.
Definition ThreadsafeException.h:61
ThreadsafeException(const ThreadsafeException &other)
Copy constructor is protected - may only be created from derived classes.
Definition ThreadsafeException.h:66
ThreadsafeException(const std::string &description)
Construct with description string.
Definition ThreadsafeException.h:71
RuntimeErrorThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:90
OutOfRangeThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:99
InvalidArgumentThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:109