// (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 | |