Generated on Tue Apr 18 10:21:42 2017 for Gecode by doxygen 1.6.3

trigonometric.hh

Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
00002 /*
00003  *  Main authors:
00004  *     Vincent Barichard <Vincent.Barichard@univ-angers.fr>
00005  *
00006  *  Copyright:
00007  *     Vincent Barichard, 2012
00008  *
00009  *  Last modified:
00010  *     $Date: 2017-04-10 13:21:37 +0200 (Mon, 10 Apr 2017) $ by $Author: schulte $
00011  *     $Revision: 15631 $
00012  *
00013  *  This file is part of Gecode, the generic constraint
00014  *  development environment:
00015  *     http://www.gecode.org
00016  *
00017  *  Permission is hereby granted, free of charge, to any person obtaining
00018  *  a copy of this software and associated documentation files (the
00019  *  "Software"), to deal in the Software without restriction, including
00020  *  without limitation the rights to use, copy, modify, merge, publish,
00021  *  distribute, sublicense, and/or sell copies of the Software, and to
00022  *  permit persons to whom the Software is furnished to do so, subject to
00023  *  the following conditions:
00024  *
00025  *  The above copyright notice and this permission notice shall be
00026  *  included in all copies or substantial portions of the Software.
00027  *
00028  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00029  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00030  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00031  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00032  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00033  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00034  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 // STATISTICS: float-prop