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