Point Cloud Library (PCL) 1.15.0
Loading...
Searching...
No Matches
poisson_exceptions.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2019-, Open Perception, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of the copyright holder(s) nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 */
37
38#pragma once
39
40#include <stdexcept>
41#include <sstream>
42#include <boost/current_function.hpp>
43
44/** POISSON_THROW_EXCEPTION is a helper macro to be used for throwing exceptions. e.g.
45 * POISSON_THROW_EXCEPTION (PoissonBadArgumentException, "[ERROR] B-spline up-sampling not supported for degree " << Degree);
46 *
47 * \note
48 * Adapted from PCL_THROW_EXCEPTION. We intentionally do not reuse PCL_THROW_EXCEPTION here
49 * to avoid introducing any dependencies on PCL in this 3rd party module.
50 */
51// NOLINTBEGIN(bugprone-macro-parentheses)
52#define POISSON_THROW_EXCEPTION(ExceptionName, message) \
53{ \
54 std::ostringstream s; \
55 s << message; \
56 throw ExceptionName(s.str(), __FILE__, BOOST_CURRENT_FUNCTION, __LINE__); \
57}
58// NOLINTEND(bugprone-macro-parentheses)
59
60namespace pcl
61{
62 namespace poisson
63 {
64 /** \class PoissonException
65 * \brief A base class for all poisson exceptions which inherits from std::runtime_error
66 *
67 * \note
68 * Adapted from PCLException. We intentionally do not reuse PCLException here
69 * to avoid introducing any dependencies on PCL in this 3rd party module.
70 */
71 class PoissonException : public std::runtime_error
72 {
73 public:
74 PoissonException (const std::string& error_description,
75 const char* file_name = nullptr,
76 const char* function_name = nullptr,
77 unsigned line_number = 0)
78 : std::runtime_error (createDetailedMessage (error_description,
79 file_name,
80 function_name,
81 line_number))
82 , file_name_ (file_name)
83 , function_name_ (function_name)
84 , line_number_ (line_number)
85 {}
86
87 protected:
88 static std::string
89 createDetailedMessage (const std::string& error_description,
90 const char* file_name,
91 const char* function_name,
92 unsigned line_number)
93 {
94 std::ostringstream sstream;
95 if (function_name)
96 sstream << function_name << ' ';
97
98 if (file_name)
99 {
100 sstream << "in " << file_name << ' ';
101 if (line_number)
102 sstream << "@ " << line_number << ' ';
103 }
104 sstream << ": " << error_description;
105
106 return (sstream.str ());
107 }
108
109 const char* file_name_;
110 const char* function_name_;
111 unsigned line_number_;
112 };
113
114 /** \class PoissonBadArgumentException
115 * \brief An exception that is thrown when the arguments number or type is wrong/unhandled.
116 */
118 {
119 public:
120 PoissonBadArgumentException (const std::string& error_description,
121 const char* file_name = nullptr,
122 const char* function_name = nullptr,
123 unsigned line_number = 0)
124 : pcl::poisson::PoissonException (error_description, file_name, function_name, line_number) {}
125 };
126
127 /** \class PoissonOpenMPException
128 * \brief An exception that is thrown when something goes wrong inside an openMP for loop.
129 */
131 {
132 public:
133 PoissonOpenMPException (const std::string& error_description,
134 const char* file_name = nullptr,
135 const char* function_name = nullptr,
136 unsigned line_number = 0)
137 : pcl::poisson::PoissonException (error_description, file_name, function_name, line_number) {}
138 };
139
140 /** \class PoissonBadInitException
141 * \brief An exception that is thrown when initialization fails.
142 */
144 {
145 public:
146 PoissonBadInitException (const std::string& error_description,
147 const char* file_name = nullptr,
148 const char* function_name = nullptr,
149 unsigned line_number = 0)
150 : pcl::poisson::PoissonException (error_description, file_name, function_name, line_number) {}
151 };
152 }
153}
An exception that is thrown when the arguments number or type is wrong/unhandled.
PoissonBadArgumentException(const std::string &error_description, const char *file_name=nullptr, const char *function_name=nullptr, unsigned line_number=0)
An exception that is thrown when initialization fails.
PoissonBadInitException(const std::string &error_description, const char *file_name=nullptr, const char *function_name=nullptr, unsigned line_number=0)
A base class for all poisson exceptions which inherits from std::runtime_error.
PoissonException(const std::string &error_description, const char *file_name=nullptr, const char *function_name=nullptr, unsigned line_number=0)
static std::string createDetailedMessage(const std::string &error_description, const char *file_name, const char *function_name, unsigned line_number)
An exception that is thrown when something goes wrong inside an openMP for loop.
PoissonOpenMPException(const std::string &error_description, const char *file_name=nullptr, const char *function_name=nullptr, unsigned line_number=0)