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)
7 #ifndef BOOST_STATS_COMPLEMENT_HPP
8 #define BOOST_STATS_COMPLEMENT_HPP
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.
17 namespace boost{ namespace math{
19 template <class Dist, class RealType>
20 struct complemented2_type
29 const RealType& param;
32 complemented2_type& operator=(const complemented2_type&);
35 template <class Dist, class RealType1, class RealType2>
36 struct complemented3_type
47 const RealType1& param1;
48 const RealType2& param2;
50 complemented3_type& operator=(const complemented3_type&);
53 template <class Dist, class RealType1, class RealType2, class RealType3>
54 struct complemented4_type
67 const RealType1& param1;
68 const RealType2& param2;
69 const RealType3& param3;
71 complemented4_type& operator=(const complemented4_type&);
74 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
75 struct complemented5_type
90 const RealType1& param1;
91 const RealType2& param2;
92 const RealType3& param3;
93 const RealType4& param4;
95 complemented5_type& operator=(const complemented5_type&);
98 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
99 struct complemented6_type
116 const RealType1& param1;
117 const RealType2& param2;
118 const RealType3& param3;
119 const RealType4& param4;
120 const RealType5& param5;
122 complemented6_type& operator=(const complemented6_type&);
125 template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
126 struct complemented7_type
145 const RealType1& param1;
146 const RealType2& param2;
147 const RealType3& param3;
148 const RealType4& param4;
149 const RealType5& param5;
150 const RealType6& param6;
152 complemented7_type& operator=(const complemented7_type&);
155 template <class Dist, class RealType>
156 inline complemented2_type<Dist, RealType> complement(const Dist& d, const RealType& r)
158 return complemented2_type<Dist, RealType>(d, r);
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)
164 return complemented3_type<Dist, RealType1, RealType2>(d, r1, r2);
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)
170 return complemented4_type<Dist, RealType1, RealType2, RealType3>(d, r1, r2, r3);
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)
176 return complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4>(d, r1, r2, r3, r4);
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)
182 return complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5>(d, r1, r2, r3, r4, r5);
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)
188 return complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6>(d, r1, r2, r3, r4, r5, r6);
194 #endif // BOOST_STATS_COMPLEMENT_HPP