00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 00002 /* 00003 * Main authors: 00004 * Christian Schulte <schulte@gecode.org> 00005 * Vincent Barichard <Vincent.Barichard@univ-angers.fr> 00006 * 00007 * Copyright: 00008 * Christian Schulte, 2003 00009 * Vincent Barichard, 2012 00010 * 00011 * Last modified: 00012 * $Date: 2013-01-24 19:28:06 +0100 (Thu, 24 Jan 2013) $ by $Author: schulte $ 00013 * $Revision: 13235 $ 00014 * 00015 * This file is part of Gecode, the generic constraint 00016 * development environment: 00017 * http://www.gecode.org 00018 * 00019 * Permission is hereby granted, free of charge, to any person obtaining 00020 * a copy of this software and associated documentation files (the 00021 * "Software"), to deal in the Software without restriction, including 00022 * without limitation the rights to use, copy, modify, merge, publish, 00023 * distribute, sublicense, and/or sell copies of the Software, and to 00024 * permit persons to whom the Software is furnished to do so, subject to 00025 * the following conditions: 00026 * 00027 * The above copyright notice and this permission notice shall be 00028 * included in all copies or substantial portions of the Software. 00029 * 00030 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00031 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00032 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00033 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 00034 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 00035 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 00036 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00037 * 00038 */ 00039 00040 namespace Gecode { namespace Float { 00041 00042 template<class View> 00043 forceinline RelTest 00044 rtest_eq(View x, View y) { 00045 if ((x.min() > y.max()) || (x.max() < y.min())) return RT_FALSE; 00046 return (x.assigned() && y.assigned()) ? RT_TRUE : RT_MAYBE; 00047 } 00048 00049 template<class View> 00050 forceinline RelTest 00051 rtest_eq(View x, FloatVal n) { 00052 if ((x.min() > n.max()) || (x.max() < n.min())) return RT_FALSE; 00053 return x.assigned() ? RT_TRUE : RT_MAYBE; 00054 } 00055 00056 template<class View> 00057 forceinline RelTest 00058 rtest_lq(View x, View y) { 00059 if (x.max() <= y.min()) return RT_TRUE; 00060 if (x.min() > y.max()) return RT_FALSE; 00061 return RT_MAYBE; 00062 } 00063 00064 template<class View> 00065 forceinline RelTest 00066 rtest_lq(View x, FloatVal n) { 00067 if (x.max() <= n.min()) return RT_TRUE; 00068 if (x.min() > n.max()) return RT_FALSE; 00069 return RT_MAYBE; 00070 } 00071 00072 template<class View> 00073 forceinline RelTest 00074 rtest_le(View x, View y) { 00075 if (x.max() < y.min()) return RT_TRUE; 00076 if (x.min() >= y.max()) return RT_FALSE; 00077 return RT_MAYBE; 00078 } 00079 00080 template<class View> 00081 forceinline RelTest 00082 rtest_le(View x, FloatVal n) { 00083 if (x.max() < n.min()) return RT_TRUE; 00084 if (x.min() >= n.max()) return RT_FALSE; 00085 return RT_MAYBE; 00086 } 00087 00088 }} 00089 00090 // STATISTICS: float-var 00091