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