// (C) Copyright John Maddock 2006. // (C) Copyright Paul A. Bristow 2006. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_STATS_COMPLEMENT_HPP #define BOOST_STATS_COMPLEMENT_HPP // // This code really defines our own tuple type. // It would be nice to reuse std::tr1::tuple // while retaining our own type safety, but it's // not clear if that's possible. In any case this // code is *very* lightweight. // namespace boost{ namespace math{ template struct complemented2_type { complemented2_type( const Dist& d, const RealType& p1) : dist(d), param(p1) {} const Dist& dist; const RealType& param; private: complemented2_type& operator=(const complemented2_type&); }; template struct complemented3_type { complemented3_type( const Dist& d, const RealType1& p1, const RealType2& p2) : dist(d), param1(p1), param2(p2) {} const Dist& dist; const RealType1& param1; const RealType2& param2; private: complemented3_type& operator=(const complemented3_type&); }; template struct complemented4_type { complemented4_type( const Dist& d, const RealType1& p1, const RealType2& p2, const RealType3& p3) : dist(d), param1(p1), param2(p2), param3(p3) {} const Dist& dist; const RealType1& param1; const RealType2& param2; const RealType3& param3; private: complemented4_type& operator=(const complemented4_type&); }; template struct complemented5_type { complemented5_type( const Dist& d, const RealType1& p1, const RealType2& p2, const RealType3& p3, const RealType4& p4) : dist(d), param1(p1), param2(p2), param3(p3), param4(p4) {} const Dist& dist; const RealType1& param1; const RealType2& param2; const RealType3& param3; const RealType4& param4; private: complemented5_type& operator=(const complemented5_type&); }; template struct complemented6_type { complemented6_type( const Dist& d, const RealType1& p1, const RealType2& p2, const RealType3& p3, const RealType4& p4, const RealType5& p5) : dist(d), param1(p1), param2(p2), param3(p3), param4(p4), param5(p5) {} const Dist& dist; const RealType1& param1; const RealType2& param2; const RealType3& param3; const RealType4& param4; const RealType5& param5; private: complemented6_type& operator=(const complemented6_type&); }; template struct complemented7_type { complemented7_type( const Dist& d, const RealType1& p1, const RealType2& p2, const RealType3& p3, const RealType4& p4, const RealType5& p5, const RealType6& p6) : dist(d), param1(p1), param2(p2), param3(p3), param4(p4), param5(p5), param6(p6) {} const Dist& dist; const RealType1& param1; const RealType2& param2; const RealType3& param3; const RealType4& param4; const RealType5& param5; const RealType6& param6; private: complemented7_type& operator=(const complemented7_type&); }; template inline complemented2_type complement(const Dist& d, const RealType& r) { return complemented2_type(d, r); } template inline complemented3_type complement(const Dist& d, const RealType1& r1, const RealType2& r2) { return complemented3_type(d, r1, r2); } template inline complemented4_type complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3) { return complemented4_type(d, r1, r2, r3); } template inline complemented5_type complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4) { return complemented5_type(d, r1, r2, r3, r4); } template inline complemented6_type complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4, const RealType5& r5) { return complemented6_type(d, r1, r2, r3, r4, r5); } template inline complemented7_type complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4, const RealType5& r5, const RealType6& r6) { return complemented7_type(d, r1, r2, r3, r4, r5, r6); } } // namespace math } // namespace boost #endif // BOOST_STATS_COMPLEMENT_HPP