Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-13 08:38:54

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