196 lines
6.0 KiB
C++
196 lines
6.0 KiB
C++
|
// (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
|
||
|
|