Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:39:39

0001 //  (C) Copyright John Maddock 2006.
0002 //  (C) Copyright Paul A. Bristow 2006.
0003 //  Use, modification and distribution are subject to the
0004 //  Boost Software License, Version 1.0. (See accompanying file
0005 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 
0007 #ifndef BOOST_STATS_COMPLEMENT_HPP
0008 #define BOOST_STATS_COMPLEMENT_HPP
0009 
0010 //
0011 // This code really defines our own tuple type.
0012 // It would be nice to reuse boost::math::tuple
0013 // while retaining our own type safety, but it's
0014 // not clear if that's possible.  In any case this
0015 // code is *very* lightweight.
0016 //
0017 namespace boost{ namespace math{
0018 
0019 template <class Dist, class RealType>
0020 struct complemented2_type
0021 {
0022    complemented2_type(
0023       const Dist& d, 
0024       const RealType& p1)
0025       : dist(d), 
0026         param(p1) {}
0027 
0028    const Dist& dist;
0029    const RealType& param;
0030 
0031 private:
0032    complemented2_type& operator=(const complemented2_type&) = delete;
0033 };
0034 
0035 template <class Dist, class RealType1, class RealType2>
0036 struct complemented3_type
0037 {
0038    complemented3_type(
0039       const Dist& d, 
0040       const RealType1& p1,
0041       const RealType2& p2)
0042       : dist(d), 
0043         param1(p1), 
0044         param2(p2) {}
0045 
0046    const Dist& dist;
0047    const RealType1& param1;
0048    const RealType2& param2;
0049 private:
0050    complemented3_type& operator=(const complemented3_type&) = delete;
0051 };
0052 
0053 template <class Dist, class RealType1, class RealType2, class RealType3>
0054 struct complemented4_type
0055 {
0056    complemented4_type(
0057       const Dist& d, 
0058       const RealType1& p1,
0059       const RealType2& p2,
0060       const RealType3& p3)
0061       : dist(d), 
0062         param1(p1), 
0063         param2(p2), 
0064         param3(p3) {}
0065 
0066    const Dist& dist;
0067    const RealType1& param1;
0068    const RealType2& param2;
0069    const RealType3& param3;
0070 private:
0071    complemented4_type& operator=(const complemented4_type&) = delete;
0072 };
0073 
0074 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
0075 struct complemented5_type
0076 {
0077    complemented5_type(
0078       const Dist& d, 
0079       const RealType1& p1,
0080       const RealType2& p2,
0081       const RealType3& p3,
0082       const RealType4& p4)
0083       : dist(d), 
0084         param1(p1), 
0085         param2(p2), 
0086         param3(p3), 
0087         param4(p4) {}
0088 
0089    const Dist& dist;
0090    const RealType1& param1;
0091    const RealType2& param2;
0092    const RealType3& param3;
0093    const RealType4& param4;
0094 private:
0095    complemented5_type& operator=(const complemented5_type&) = delete;
0096 };
0097 
0098 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
0099 struct complemented6_type
0100 {
0101    complemented6_type(
0102       const Dist& d, 
0103       const RealType1& p1,
0104       const RealType2& p2,
0105       const RealType3& p3,
0106       const RealType4& p4,
0107       const RealType5& p5)
0108       : dist(d), 
0109         param1(p1), 
0110         param2(p2), 
0111         param3(p3), 
0112         param4(p4), 
0113         param5(p5) {}
0114 
0115    const Dist& dist;
0116    const RealType1& param1;
0117    const RealType2& param2;
0118    const RealType3& param3;
0119    const RealType4& param4;
0120    const RealType5& param5;
0121 private:
0122    complemented6_type& operator=(const complemented6_type&) = delete;
0123 };
0124 
0125 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
0126 struct complemented7_type
0127 {
0128    complemented7_type(
0129       const Dist& d, 
0130       const RealType1& p1,
0131       const RealType2& p2,
0132       const RealType3& p3,
0133       const RealType4& p4,
0134       const RealType5& p5,
0135       const RealType6& p6)
0136       : dist(d), 
0137         param1(p1), 
0138         param2(p2), 
0139         param3(p3), 
0140         param4(p4), 
0141         param5(p5), 
0142         param6(p6) {}
0143 
0144    const Dist& dist;
0145    const RealType1& param1;
0146    const RealType2& param2;
0147    const RealType3& param3;
0148    const RealType4& param4;
0149    const RealType5& param5;
0150    const RealType6& param6;
0151 private:
0152    complemented7_type& operator=(const complemented7_type&) = delete;
0153 };
0154 
0155 template <class Dist, class RealType>
0156 inline complemented2_type<Dist, RealType> complement(const Dist& d, const RealType& r)
0157 {
0158    return complemented2_type<Dist, RealType>(d, r);
0159 }
0160 
0161 template <class Dist, class RealType1, class RealType2>
0162 inline complemented3_type<Dist, RealType1, RealType2> complement(const Dist& d, const RealType1& r1, const RealType2& r2)
0163 {
0164    return complemented3_type<Dist, RealType1, RealType2>(d, r1, r2);
0165 }
0166 
0167 template <class Dist, class RealType1, class RealType2, class RealType3>
0168 inline complemented4_type<Dist, RealType1, RealType2, RealType3> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3)
0169 {
0170    return complemented4_type<Dist, RealType1, RealType2, RealType3>(d, r1, r2, r3);
0171 }
0172 
0173 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
0174 inline complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4)
0175 {
0176    return complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4>(d, r1, r2, r3, r4);
0177 }
0178 
0179 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
0180 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)
0181 {
0182    return complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5>(d, r1, r2, r3, r4, r5);
0183 }
0184 
0185 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
0186 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)
0187 {
0188    return complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6>(d, r1, r2, r3, r4, r5, r6);
0189 }
0190 
0191 } // namespace math
0192 } // namespace boost
0193 
0194 #endif // BOOST_STATS_COMPLEMENT_HPP
0195