diff any/include/boost/math/distributions/complement.hpp @ 160:cff480c41f97

Add some cross-platform Boost headers
author Chris Cannam <cannam@all-day-breakfast.com>
date Sat, 16 Feb 2019 16:31:25 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/any/include/boost/math/distributions/complement.hpp	Sat Feb 16 16:31:25 2019 +0000
@@ -0,0 +1,195 @@
+//  (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 boost::math::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 <class Dist, class RealType>
+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 <class Dist, class RealType1, class RealType2>
+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 <class Dist, class RealType1, class RealType2, class RealType3>
+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 <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
+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 <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
+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 <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
+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 <class Dist, class RealType>
+inline complemented2_type<Dist, RealType> complement(const Dist& d, const RealType& r)
+{
+   return complemented2_type<Dist, RealType>(d, r);
+}
+
+template <class Dist, class RealType1, class RealType2>
+inline complemented3_type<Dist, RealType1, RealType2> complement(const Dist& d, const RealType1& r1, const RealType2& r2)
+{
+   return complemented3_type<Dist, RealType1, RealType2>(d, r1, r2);
+}
+
+template <class Dist, class RealType1, class RealType2, class RealType3>
+inline complemented4_type<Dist, RealType1, RealType2, RealType3> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3)
+{
+   return complemented4_type<Dist, RealType1, RealType2, RealType3>(d, r1, r2, r3);
+}
+
+template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
+inline complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4)
+{
+   return complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4>(d, r1, r2, r3, r4);
+}
+
+template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
+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)
+{
+   return complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5>(d, r1, r2, r3, r4, r5);
+}
+
+template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
+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)
+{
+   return complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6>(d, r1, r2, r3, r4, r5, r6);
+}
+
+} // namespace math
+} // namespace boost
+
+#endif // BOOST_STATS_COMPLEMENT_HPP
+