00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef __GECODE_FLOAT_TRIGONOMETRIC_HH__
00039 #define __GECODE_FLOAT_TRIGONOMETRIC_HH__
00040
00041 #include <gecode/float.hh>
00042
00047 namespace Gecode { namespace Float { namespace Trigonometric {
00048
00057 template<class A, class B>
00058 class Sin : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00059 protected:
00060 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00061 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00062
00064 Sin(Space& home, bool share, Sin& p);
00066 Sin(Home home, A x0, B x1);
00067 public:
00069 virtual Actor* copy(Space& home, bool share);
00071 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00073 static ExecStatus post(Home home, A x0, B x1);
00074 };
00075
00076
00085 template<class A, class B>
00086 class Cos : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00087 protected:
00088 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00089 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00090
00092 Cos(Space& home, bool share, Cos& p);
00094 Cos(Home home, A x0, B x1);
00095 public:
00097 virtual Actor* copy(Space& home, bool share);
00099 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00101 static ExecStatus post(Home home, A x0, B x1);
00102 };
00103
00112 template<class A, class B>
00113 class ASin : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00114 protected:
00115 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00116 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00117
00119 ASin(Space& home, bool share, ASin& p);
00121 ASin(Home home, A x0, B x1);
00122 public:
00124 virtual Actor* copy(Space& home, bool share);
00126 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00128 static ExecStatus post(Home home, A x0, B x1);
00129 };
00130
00131
00140 template<class A, class B>
00141 class ACos : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00142 protected:
00143 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00144 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00145
00147 ACos(Space& home, bool share, ACos& p);
00149 ACos(Home home, A x0, B x1);
00150 public:
00152 virtual Actor* copy(Space& home, bool share);
00154 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00156 static ExecStatus post(Home home, A x0, B x1);
00157 };
00158
00167 template<class A, class B>
00168 class Tan : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00169 protected:
00170 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00171 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00172
00174 Tan(Space& home, bool share, Tan& p);
00176 Tan(Home home, A x0, B x1);
00177 public:
00179 virtual Actor* copy(Space& home, bool share);
00181 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00183 static ExecStatus post(Home home, A x0, B x1);
00184 };
00185
00194 template<class A, class B>
00195 class ATan : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00196 protected:
00197 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00198 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00199
00201 ATan(Space& home, bool share, ATan& p);
00203 ATan(Home home, A x0, B x1);
00204 public:
00206 virtual Actor* copy(Space& home, bool share);
00208 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00210 static ExecStatus post(Home home, A x0, B x1);
00211 };
00212 }}}
00213
00214 #include <gecode/float/trigonometric/sincos.hpp>
00215 #include <gecode/float/trigonometric/asinacos.hpp>
00216 #include <gecode/float/trigonometric/tanatan.hpp>
00217
00218 #endif
00219
00220