199 lines · plain
1// (C) Copyright John Maddock 2006.2// (C) Copyright Paul A. Bristow 2006.3// (C) Copyright Matt Borland 20244// Use, modification and distribution are subject to the5// Boost Software License, Version 1.0. (See accompanying file6// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)7 8#ifndef BOOST_STATS_COMPLEMENT_HPP9#define BOOST_STATS_COMPLEMENT_HPP10 11#include <boost/math/tools/config.hpp>12 13//14// This code really defines our own tuple type.15// It would be nice to reuse boost::math::tuple16// while retaining our own type safety, but it's17// not clear if that's possible. In any case this18// code is *very* lightweight.19//20namespace boost{ namespace math{21 22template <class Dist, class RealType>23struct complemented2_type24{25 BOOST_MATH_GPU_ENABLED complemented2_type(26 const Dist& d, 27 const RealType& p1)28 : dist(d), 29 param(p1) {}30 31 const Dist& dist;32 const RealType& param;33 34private:35 complemented2_type& operator=(const complemented2_type&) = delete;36};37 38template <class Dist, class RealType1, class RealType2>39struct complemented3_type40{41 BOOST_MATH_GPU_ENABLED complemented3_type(42 const Dist& d, 43 const RealType1& p1,44 const RealType2& p2)45 : dist(d), 46 param1(p1), 47 param2(p2) {}48 49 const Dist& dist;50 const RealType1& param1;51 const RealType2& param2;52private:53 complemented3_type& operator=(const complemented3_type&) = delete;54};55 56template <class Dist, class RealType1, class RealType2, class RealType3>57struct complemented4_type58{59 BOOST_MATH_GPU_ENABLED complemented4_type(60 const Dist& d, 61 const RealType1& p1,62 const RealType2& p2,63 const RealType3& p3)64 : dist(d), 65 param1(p1), 66 param2(p2), 67 param3(p3) {}68 69 const Dist& dist;70 const RealType1& param1;71 const RealType2& param2;72 const RealType3& param3;73private:74 complemented4_type& operator=(const complemented4_type&) = delete;75};76 77template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>78struct complemented5_type79{80 BOOST_MATH_GPU_ENABLED complemented5_type(81 const Dist& d, 82 const RealType1& p1,83 const RealType2& p2,84 const RealType3& p3,85 const RealType4& p4)86 : dist(d), 87 param1(p1), 88 param2(p2), 89 param3(p3), 90 param4(p4) {}91 92 const Dist& dist;93 const RealType1& param1;94 const RealType2& param2;95 const RealType3& param3;96 const RealType4& param4;97private:98 complemented5_type& operator=(const complemented5_type&) = delete;99};100 101template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>102struct complemented6_type103{104 BOOST_MATH_GPU_ENABLED complemented6_type(105 const Dist& d, 106 const RealType1& p1,107 const RealType2& p2,108 const RealType3& p3,109 const RealType4& p4,110 const RealType5& p5)111 : dist(d), 112 param1(p1), 113 param2(p2), 114 param3(p3), 115 param4(p4), 116 param5(p5) {}117 118 const Dist& dist;119 const RealType1& param1;120 const RealType2& param2;121 const RealType3& param3;122 const RealType4& param4;123 const RealType5& param5;124private:125 complemented6_type& operator=(const complemented6_type&) = delete;126};127 128template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>129struct complemented7_type130{131 BOOST_MATH_GPU_ENABLED complemented7_type(132 const Dist& d, 133 const RealType1& p1,134 const RealType2& p2,135 const RealType3& p3,136 const RealType4& p4,137 const RealType5& p5,138 const RealType6& p6)139 : dist(d), 140 param1(p1), 141 param2(p2), 142 param3(p3), 143 param4(p4), 144 param5(p5), 145 param6(p6) {}146 147 const Dist& dist;148 const RealType1& param1;149 const RealType2& param2;150 const RealType3& param3;151 const RealType4& param4;152 const RealType5& param5;153 const RealType6& param6;154private:155 complemented7_type& operator=(const complemented7_type&) = delete;156};157 158template <class Dist, class RealType>159BOOST_MATH_GPU_ENABLED inline complemented2_type<Dist, RealType> complement(const Dist& d, const RealType& r)160{161 return complemented2_type<Dist, RealType>(d, r);162}163 164template <class Dist, class RealType1, class RealType2>165BOOST_MATH_GPU_ENABLED inline complemented3_type<Dist, RealType1, RealType2> complement(const Dist& d, const RealType1& r1, const RealType2& r2)166{167 return complemented3_type<Dist, RealType1, RealType2>(d, r1, r2);168}169 170template <class Dist, class RealType1, class RealType2, class RealType3>171BOOST_MATH_GPU_ENABLED inline complemented4_type<Dist, RealType1, RealType2, RealType3> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3)172{173 return complemented4_type<Dist, RealType1, RealType2, RealType3>(d, r1, r2, r3);174}175 176template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>177BOOST_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)178{179 return complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4>(d, r1, r2, r3, r4);180}181 182template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>183BOOST_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)184{185 return complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5>(d, r1, r2, r3, r4, r5);186}187 188template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>189BOOST_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)190{191 return complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6>(d, r1, r2, r3, r4, r5, r6);192}193 194} // namespace math195} // namespace boost196 197#endif // BOOST_STATS_COMPLEMENT_HPP198 199