brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · c63b8a5 Raw
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