Skip to content

Commit 97c78c8

Browse files
committed
feat: use policy-based error handling in interpolators
1 parent a5c0625 commit 97c78c8

File tree

5 files changed

+183
-49
lines changed

5 files changed

+183
-49
lines changed

include/boost/math/interpolators/cubic_hermite.hpp

+35-8
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@
88
#define BOOST_MATH_INTERPOLATORS_CUBIC_HERMITE_HPP
99
#include <memory>
1010
#include <boost/math/interpolators/detail/cubic_hermite_detail.hpp>
11+
#include <boost/math/policies/error_handling.hpp>
1112

1213
namespace boost {
1314
namespace math {
1415
namespace interpolators {
1516

16-
template<class RandomAccessContainer>
17+
template<class RandomAccessContainer, class Policy = policies::policy<>>
1718
class cubic_hermite {
1819
public:
1920
using Real = typename RandomAccessContainer::value_type;
2021

2122
cubic_hermite(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx)
22-
: impl_(std::make_shared<detail::cubic_hermite_detail<RandomAccessContainer>>(std::move(x), std::move(y), std::move(dydx)))
23+
: impl_(std::make_shared<detail::cubic_hermite_detail<RandomAccessContainer, Policy>>(std::move(x), std::move(y), std::move(dydx)))
2324
{}
24-
25+
2526
inline Real operator()(Real x) const {
2627
return impl_->operator()(x);
2728
}
@@ -43,6 +44,7 @@ class cubic_hermite {
4344

4445
int64_t bytes() const
4546
{
47+
if ( ! valid()) return 0;
4648
return impl_->bytes() + sizeof(impl_);
4749
}
4850

@@ -51,17 +53,25 @@ class cubic_hermite {
5153
return impl_->domain();
5254
}
5355

56+
bool valid() const {
57+
return impl_->valid();
58+
}
59+
60+
std::string const& error_msg() const {
61+
return impl_->error_msg();
62+
}
63+
5464
private:
5565
std::shared_ptr<detail::cubic_hermite_detail<RandomAccessContainer>> impl_;
5666
};
5767

58-
template<class RandomAccessContainer>
68+
template<class RandomAccessContainer, class Policy = policies::policy<>>
5969
class cardinal_cubic_hermite {
6070
public:
6171
using Real = typename RandomAccessContainer::value_type;
6272

6373
cardinal_cubic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, Real x0, Real dx)
64-
: impl_(std::make_shared<detail::cardinal_cubic_hermite_detail<RandomAccessContainer>>(std::move(y), std::move(dydx), x0, dx))
74+
: impl_(std::make_shared<detail::cardinal_cubic_hermite_detail<RandomAccessContainer, Policy>>(std::move(y), std::move(dydx), x0, dx))
6575
{}
6676

6777
inline Real operator()(Real x) const
@@ -82,6 +92,7 @@ class cardinal_cubic_hermite {
8292

8393
int64_t bytes() const
8494
{
95+
if ( ! valid()) return 0;
8596
return impl_->bytes() + sizeof(impl_);
8697
}
8798

@@ -90,19 +101,26 @@ class cardinal_cubic_hermite {
90101
return impl_->domain();
91102
}
92103

104+
bool valid() const {
105+
return impl_->valid();
106+
}
107+
108+
std::string const& error_msg() const {
109+
return impl_->error_msg();
110+
}
111+
93112
private:
94113
std::shared_ptr<detail::cardinal_cubic_hermite_detail<RandomAccessContainer>> impl_;
95114
};
96115

97-
98-
template<class RandomAccessContainer>
116+
template<class RandomAccessContainer, class Policy = policies::policy<>>
99117
class cardinal_cubic_hermite_aos {
100118
public:
101119
using Point = typename RandomAccessContainer::value_type;
102120
using Real = typename Point::value_type;
103121

104122
cardinal_cubic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx)
105-
: impl_(std::make_shared<detail::cardinal_cubic_hermite_detail_aos<RandomAccessContainer>>(std::move(data), x0, dx))
123+
: impl_(std::make_shared<detail::cardinal_cubic_hermite_detail_aos<RandomAccessContainer, Policy>>(std::move(data), x0, dx))
106124
{}
107125

108126
inline Real operator()(Real x) const
@@ -123,6 +141,7 @@ class cardinal_cubic_hermite_aos {
123141

124142
int64_t bytes() const
125143
{
144+
if ( ! valid()) return 0;
126145
return impl_->bytes() + sizeof(impl_);
127146
}
128147

@@ -131,6 +150,14 @@ class cardinal_cubic_hermite_aos {
131150
return impl_->domain();
132151
}
133152

153+
bool valid() const {
154+
return impl_->valid();
155+
}
156+
157+
std::string const& error_msg() const {
158+
return impl_->error_msg();
159+
}
160+
134161
private:
135162
std::shared_ptr<detail::cardinal_cubic_hermite_detail_aos<RandomAccessContainer>> impl_;
136163
};

0 commit comments

Comments
 (0)