📄 functor.hpp
字号:
// (C) Copyright John Maddock 2007.// 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)#include <boost/math/special_functions/trunc.hpp>#ifndef BOOST_MATH_TEST_FUNCTOR_HPP#define BOOST_MATH_TEST_FUNCTOR_HPPstruct extract_result_type{ extract_result_type(unsigned i) : m_location(i){} template <class S> typename S::value_type operator()(const S& row) { return row[m_location]; }private: unsigned m_location;};inline extract_result_type extract_result(unsigned i){ return extract_result_type(i);}template <class F>struct row_binder1{ row_binder1(F _f, unsigned i) : f(_f), m_i(i) {} template <class S> typename S::value_type operator()(const S& row) { return f(row[m_i]); }private: F f; unsigned m_i;};template<class F>inline row_binder1<F> bind_func(F f, unsigned i){ return row_binder1<F>(f, i);}template <class F>struct row_binder2{ row_binder2(F _f, unsigned i, unsigned j) : f(_f), m_i(i), m_j(j) {} template <class S> typename S::value_type operator()(const S& row) { return f(row[m_i], row[m_j]); }private: F f; unsigned m_i, m_j;};template<class F>inline row_binder2<F> bind_func(F f, unsigned i, unsigned j){ return row_binder2<F>(f, i, j);}template <class F>struct row_binder3{ row_binder3(F _f, unsigned i, unsigned j, unsigned k) : f(_f), m_i(i), m_j(j), m_k(k) {} template <class S> typename S::value_type operator()(const S& row) { return f(row[m_i], row[m_j], row[m_k]); }private: F f; unsigned m_i, m_j, m_k;};template<class F>inline row_binder3<F> bind_func(F f, unsigned i, unsigned j, unsigned k){ return row_binder3<F>(f, i, j, k);}template <class F>struct row_binder4{ row_binder4(F _f, unsigned i, unsigned j, unsigned k, unsigned l) : f(_f), m_i(i), m_j(j), m_k(k), m_l(l) {} template <class S> typename S::value_type operator()(const S& row) { return f(row[m_i], row[m_j], row[m_k], row[m_l]); }private: F f; unsigned m_i, m_j, m_k, m_l;};template<class F>inline row_binder4<F> bind_func(F f, unsigned i, unsigned j, unsigned k, unsigned l){ return row_binder4<F>(f, i, j, k, l);}template <class F>struct row_binder2_i1{ row_binder2_i1(F _f, unsigned i, unsigned j) : f(_f), m_i(i), m_j(j) {} template <class S> typename S::value_type operator()(const S& row) { return f(boost::math::itrunc(row[m_i]), row[m_j]); }private: F f; unsigned m_i, m_j;};template<class F>inline row_binder2_i1<F> bind_func_int1(F f, unsigned i, unsigned j){ return row_binder2_i1<F>(f, i, j);}template <class F>struct row_binder3_i2{ row_binder3_i2(F _f, unsigned i, unsigned j, unsigned k) : f(_f), m_i(i), m_j(j), m_k(k) {} template <class S> typename S::value_type operator()(const S& row) { return f( boost::math::itrunc(row[m_i]), boost::math::itrunc(row[m_j]), row[m_k]); }private: F f; unsigned m_i, m_j, m_k;};template<class F>inline row_binder3_i2<F> bind_func_int2(F f, unsigned i, unsigned j, unsigned k){ return row_binder3_i2<F>(f, i, j, k);}template <class F>struct row_binder4_i2{ row_binder4_i2(F _f, unsigned i, unsigned j, unsigned k, unsigned l) : f(_f), m_i(i), m_j(j), m_k(k), m_l(l) {} template <class S> typename S::value_type operator()(const S& row) { return f( boost::math::itrunc(row[m_i]), boost::math::itrunc(row[m_j]), row[m_k], row[m_l]); }private: F f; unsigned m_i, m_j, m_k, m_l;};template<class F>inline row_binder4_i2<F> bind_func_int2(F f, unsigned i, unsigned j, unsigned k, unsigned l){ return row_binder4_i2<F>(f, i, j, k, l);}template <class F>struct negate_type{ negate_type(F f) : m_f(f){} template <class S> typename S::value_type operator()(const S& row) { return -m_f(row); }private: F m_f;};template <class F>inline negate_type<F> negate(F f){ return negate_type<F>(f);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -