You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.8 KiB
195 lines
5.8 KiB
// (C) Copyright John Maddock 2006. |
|
// (C) Copyright Paul A. Bristow 2006. |
|
// 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_STATS_COMPLEMENT_HPP |
|
#define BOOST_STATS_COMPLEMENT_HPP |
|
|
|
// |
|
// This code really defines our own tuple type. |
|
// It would be nice to reuse boost::math::tuple |
|
// while retaining our own type safety, but it's |
|
// not clear if that's possible. In any case this |
|
// code is *very* lightweight. |
|
// |
|
namespace boost{ namespace math{ |
|
|
|
template <class Dist, class RealType> |
|
struct complemented2_type |
|
{ |
|
complemented2_type( |
|
const Dist& d, |
|
const RealType& p1) |
|
: dist(d), |
|
param(p1) {} |
|
|
|
const Dist& dist; |
|
const RealType& param; |
|
|
|
private: |
|
complemented2_type& operator=(const complemented2_type&); |
|
}; |
|
|
|
template <class Dist, class RealType1, class RealType2> |
|
struct complemented3_type |
|
{ |
|
complemented3_type( |
|
const Dist& d, |
|
const RealType1& p1, |
|
const RealType2& p2) |
|
: dist(d), |
|
param1(p1), |
|
param2(p2) {} |
|
|
|
const Dist& dist; |
|
const RealType1& param1; |
|
const RealType2& param2; |
|
private: |
|
complemented3_type& operator=(const complemented3_type&); |
|
}; |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3> |
|
struct complemented4_type |
|
{ |
|
complemented4_type( |
|
const Dist& d, |
|
const RealType1& p1, |
|
const RealType2& p2, |
|
const RealType3& p3) |
|
: dist(d), |
|
param1(p1), |
|
param2(p2), |
|
param3(p3) {} |
|
|
|
const Dist& dist; |
|
const RealType1& param1; |
|
const RealType2& param2; |
|
const RealType3& param3; |
|
private: |
|
complemented4_type& operator=(const complemented4_type&); |
|
}; |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4> |
|
struct complemented5_type |
|
{ |
|
complemented5_type( |
|
const Dist& d, |
|
const RealType1& p1, |
|
const RealType2& p2, |
|
const RealType3& p3, |
|
const RealType4& p4) |
|
: dist(d), |
|
param1(p1), |
|
param2(p2), |
|
param3(p3), |
|
param4(p4) {} |
|
|
|
const Dist& dist; |
|
const RealType1& param1; |
|
const RealType2& param2; |
|
const RealType3& param3; |
|
const RealType4& param4; |
|
private: |
|
complemented5_type& operator=(const complemented5_type&); |
|
}; |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5> |
|
struct complemented6_type |
|
{ |
|
complemented6_type( |
|
const Dist& d, |
|
const RealType1& p1, |
|
const RealType2& p2, |
|
const RealType3& p3, |
|
const RealType4& p4, |
|
const RealType5& p5) |
|
: dist(d), |
|
param1(p1), |
|
param2(p2), |
|
param3(p3), |
|
param4(p4), |
|
param5(p5) {} |
|
|
|
const Dist& dist; |
|
const RealType1& param1; |
|
const RealType2& param2; |
|
const RealType3& param3; |
|
const RealType4& param4; |
|
const RealType5& param5; |
|
private: |
|
complemented6_type& operator=(const complemented6_type&); |
|
}; |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6> |
|
struct complemented7_type |
|
{ |
|
complemented7_type( |
|
const Dist& d, |
|
const RealType1& p1, |
|
const RealType2& p2, |
|
const RealType3& p3, |
|
const RealType4& p4, |
|
const RealType5& p5, |
|
const RealType6& p6) |
|
: dist(d), |
|
param1(p1), |
|
param2(p2), |
|
param3(p3), |
|
param4(p4), |
|
param5(p5), |
|
param6(p6) {} |
|
|
|
const Dist& dist; |
|
const RealType1& param1; |
|
const RealType2& param2; |
|
const RealType3& param3; |
|
const RealType4& param4; |
|
const RealType5& param5; |
|
const RealType6& param6; |
|
private: |
|
complemented7_type& operator=(const complemented7_type&); |
|
}; |
|
|
|
template <class Dist, class RealType> |
|
inline complemented2_type<Dist, RealType> complement(const Dist& d, const RealType& r) |
|
{ |
|
return complemented2_type<Dist, RealType>(d, r); |
|
} |
|
|
|
template <class Dist, class RealType1, class RealType2> |
|
inline complemented3_type<Dist, RealType1, RealType2> complement(const Dist& d, const RealType1& r1, const RealType2& r2) |
|
{ |
|
return complemented3_type<Dist, RealType1, RealType2>(d, r1, r2); |
|
} |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3> |
|
inline complemented4_type<Dist, RealType1, RealType2, RealType3> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3) |
|
{ |
|
return complemented4_type<Dist, RealType1, RealType2, RealType3>(d, r1, r2, r3); |
|
} |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4> |
|
inline complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4) |
|
{ |
|
return complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4>(d, r1, r2, r3, r4); |
|
} |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5> |
|
inline complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4, const RealType5& r5) |
|
{ |
|
return complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5>(d, r1, r2, r3, r4, r5); |
|
} |
|
|
|
template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6> |
|
inline complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4, const RealType5& r5, const RealType6& r6) |
|
{ |
|
return complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6>(d, r1, r2, r3, r4, r5, r6); |
|
} |
|
|
|
} // namespace math |
|
} // namespace boost |
|
|
|
#endif // BOOST_STATS_COMPLEMENT_HPP |
|
|
|
|