1 // (C) Copyright Nick Thompson 2019. 2 // Use, modification and distribution are subject to the 3 // Boost Software License, Version 1.0. (See accompanying file 4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 #ifndef BOOST_MATH_INTERPOLATORS_CARDINAL_TRIGONOMETRIC_HPP 7 #define BOOST_MATH_INTERPOLATORS_CARDINAL_TRIGONOMETRIC_HPP 8 #include <memory> 9 #include <boost/math/interpolators/detail/cardinal_trigonometric_detail.hpp> 10 11 namespace boost { namespace math { namespace interpolators { 12 13 template<class RandomAccessContainer> 14 class cardinal_trigonometric 15 { 16 public: 17 using Real = typename RandomAccessContainer::value_type; cardinal_trigonometric(RandomAccessContainer const & v,Real t0,Real h)18 cardinal_trigonometric(RandomAccessContainer const & v, Real t0, Real h) 19 { 20 m_impl = std::make_shared<interpolators::detail::cardinal_trigonometric_detail<Real>>(v.data(), v.size(), t0, h); 21 } 22 operator ()(Real t) const23 Real operator()(Real t) const 24 { 25 return m_impl->operator()(t); 26 } 27 prime(Real t) const28 Real prime(Real t) const 29 { 30 return m_impl->prime(t); 31 } 32 double_prime(Real t) const33 Real double_prime(Real t) const 34 { 35 return m_impl->double_prime(t); 36 } 37 period() const38 Real period() const 39 { 40 return m_impl->period(); 41 } 42 integrate() const43 Real integrate() const 44 { 45 return m_impl->integrate(); 46 } 47 squared_l2() const48 Real squared_l2() const 49 { 50 return m_impl->squared_l2(); 51 } 52 53 private: 54 std::shared_ptr<interpolators::detail::cardinal_trigonometric_detail<Real>> m_impl; 55 }; 56 57 }}} 58 #endif 59