
//  Copyright (c) 2011 John Maddock
//  Use, modification and distribution are subject to the
//  Boost Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#ifndef BOOST_MP_BIG_LANCZOS
#define BOOST_MP_BIG_LANCZOS

#include <boost/math/bindings/detail/big_lanczos.hpp>

namespace boost{ namespace math{

namespace lanczos{

template <class T, class Policy>
struct lanczos;

template<class Backend, boost::multiprecision::expression_template_option ExpressionTemplates, class Policy>
struct lanczos<multiprecision::number<Backend, ExpressionTemplates>, Policy>
{
   typedef typename boost::math::policies::precision<multiprecision::number<Backend, ExpressionTemplates>, Policy>::type precision_type;
   typedef typename mpl::if_c<
      precision_type::value <= 73,
      lanczos13UDT,
      typename mpl::if_c<
         precision_type::value <= 122,
         lanczos22UDT,
         typename mpl::if_c<
            precision_type::value <= 172,
            lanczos31UDT,
            typename mpl::if_c<
               precision_type::value <= 372,
               lanczos61UDT,
               undefined_lanczos
            >::type
         >::type
      >::type
   >::type type;
};

} // namespace lanczos

}} // namespaces

#endif
