8
8
#define BOOST_MATH_INTERPOLATORS_CUBIC_HERMITE_HPP
9
9
#include < memory>
10
10
#include < boost/math/interpolators/detail/cubic_hermite_detail.hpp>
11
+ #include < boost/math/policies/error_handling.hpp>
11
12
12
13
namespace boost {
13
14
namespace math {
14
15
namespace interpolators {
15
16
16
- template <class RandomAccessContainer >
17
+ template <class RandomAccessContainer , class Policy = policies::policy<> >
17
18
class cubic_hermite {
18
19
public:
19
20
using Real = typename RandomAccessContainer::value_type;
20
21
21
22
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)))
23
24
{}
24
-
25
+
25
26
inline Real operator ()(Real x) const {
26
27
return impl_->operator ()(x);
27
28
}
@@ -43,6 +44,7 @@ class cubic_hermite {
43
44
44
45
int64_t bytes () const
45
46
{
47
+ if ( ! valid ()) return 0 ;
46
48
return impl_->bytes () + sizeof (impl_);
47
49
}
48
50
@@ -51,17 +53,25 @@ class cubic_hermite {
51
53
return impl_->domain ();
52
54
}
53
55
56
+ bool valid () const {
57
+ return impl_->valid ();
58
+ }
59
+
60
+ std::string const & error_msg () const {
61
+ return impl_->error_msg ();
62
+ }
63
+
54
64
private:
55
65
std::shared_ptr<detail::cubic_hermite_detail<RandomAccessContainer>> impl_;
56
66
};
57
67
58
- template <class RandomAccessContainer >
68
+ template <class RandomAccessContainer , class Policy = policies::policy<> >
59
69
class cardinal_cubic_hermite {
60
70
public:
61
71
using Real = typename RandomAccessContainer::value_type;
62
72
63
73
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))
65
75
{}
66
76
67
77
inline Real operator ()(Real x) const
@@ -82,6 +92,7 @@ class cardinal_cubic_hermite {
82
92
83
93
int64_t bytes () const
84
94
{
95
+ if ( ! valid ()) return 0 ;
85
96
return impl_->bytes () + sizeof (impl_);
86
97
}
87
98
@@ -90,19 +101,26 @@ class cardinal_cubic_hermite {
90
101
return impl_->domain ();
91
102
}
92
103
104
+ bool valid () const {
105
+ return impl_->valid ();
106
+ }
107
+
108
+ std::string const & error_msg () const {
109
+ return impl_->error_msg ();
110
+ }
111
+
93
112
private:
94
113
std::shared_ptr<detail::cardinal_cubic_hermite_detail<RandomAccessContainer>> impl_;
95
114
};
96
115
97
-
98
- template <class RandomAccessContainer >
116
+ template <class RandomAccessContainer , class Policy = policies::policy<>>
99
117
class cardinal_cubic_hermite_aos {
100
118
public:
101
119
using Point = typename RandomAccessContainer::value_type;
102
120
using Real = typename Point ::value_type;
103
121
104
122
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))
106
124
{}
107
125
108
126
inline Real operator ()(Real x) const
@@ -123,6 +141,7 @@ class cardinal_cubic_hermite_aos {
123
141
124
142
int64_t bytes () const
125
143
{
144
+ if ( ! valid ()) return 0 ;
126
145
return impl_->bytes () + sizeof (impl_);
127
146
}
128
147
@@ -131,6 +150,14 @@ class cardinal_cubic_hermite_aos {
131
150
return impl_->domain ();
132
151
}
133
152
153
+ bool valid () const {
154
+ return impl_->valid ();
155
+ }
156
+
157
+ std::string const & error_msg () const {
158
+ return impl_->error_msg ();
159
+ }
160
+
134
161
private:
135
162
std::shared_ptr<detail::cardinal_cubic_hermite_detail_aos<RandomAccessContainer>> impl_;
136
163
};
0 commit comments