BWAPI
SPAR/AIModule/BWTA/vendors/CGAL/CGAL/Interval_traits.h
Go to the documentation of this file.
00001 // Copyright (c) 2008 Max-Planck-Institute Saarbruecken (Germany).
00002 // All rights reserved.
00003 //
00004 // This file is part of CGAL (www.cgal.org); you can redistribute it and/or
00005 // modify it under the terms of the GNU Lesser General Public License as
00006 // published by the Free Software Foundation; version 2.1 of the License.
00007 // See the file LICENSE.LGPL distributed with CGAL.
00008 //
00009 // Licensees holding a valid commercial license may use this file in
00010 // accordance with the commercial license agreement provided with the software.
00011 //
00012 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00013 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00014 //
00015 // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/Number_types/include/CGAL/Interval_traits.h $
00016 // $Id: Interval_traits.h 47256 2008-12-06 21:43:14Z afabri $
00017 // 
00018 //
00019 // Author(s)     : Michael Hemmer <hemmer@mpi-inf.mpg.de>
00020 //
00021 // ============================================================================
00022 
00023 
00029 /* bounds-related Interval functions */
00030 // template<class Interval>  T lower(const Interval& x);
00031 // template<class Interval>  T upper(const Interval& x);
00032 // template<class Interval>  T width(const Interval& x);
00033 // template<class Interval>  T median(const Interval& x);
00034 // template<class Interval>  T norm(const Interval& x);
00035 
00036 /* bounds-related Interval functions */
00038 // template<class Interval>  bool singleton(const Interval& x);
00039 // template<class Interval>  bool zero_in(const Interval& b);
00040 // template<class Interval>  bool in(const T& r, const Interval& b);
00041 // template<class Interval>  bool equal(const Interval& x, const Interval& y);
00042 // template<class Interval>  bool overlap(const Interval& x, const Interval& y);
00043 // template<class Interval>  bool subset(const Interval& a, const Interval& b);
00044 // template<class Interval>  bool proper_subset(const Interval& a, const Interval& b);
00045 
00046 /* set manipulation interval functions */
00047 // template<class Interval>  Interval intersection(const Interval& x, const Interval& y);
00048 // template<class Interval>  Interval hull(const Interval& x, const Interval& y);
00049 
00050 
00051 #ifndef CGAL_INTERVAL_TRAITS_H
00052 #define CGAL_INTERVAL_TRAITS_H
00053 
00054 #include <CGAL/basic.h>
00055 
00056 CGAL_BEGIN_NAMESPACE
00057 
00058 namespace CGALi{
00059 
00060 template<typename T> struct Interval_traits_base{
00061     
00062     typedef Interval_traits_base<T> Self; 
00063     typedef T                  Interval; 
00064     typedef CGAL::Null_functor    Boundary; 
00065     typedef CGAL::Tag_false    Is_interval; 
00066     typedef CGAL::Tag_false    With_empty_interval; 
00067 
00068     typedef CGAL::Null_functor Lower;
00069     typedef CGAL::Null_functor Upper; 
00070     typedef CGAL::Null_functor Width; 
00071     typedef CGAL::Null_functor Median;  
00072     typedef CGAL::Null_functor Norm; 
00073     typedef CGAL::Null_functor Empty;
00074     typedef CGAL::Null_functor Singleton;
00075     typedef CGAL::Null_functor In;
00076     typedef CGAL::Null_functor Zero_in;
00077     typedef CGAL::Null_functor Equal;
00078     typedef CGAL::Null_functor Overlap;
00079     typedef CGAL::Null_functor Subset;
00080     typedef CGAL::Null_functor Proper_Subset;
00081     typedef CGAL::Null_functor Intersection;
00082     typedef CGAL::Null_functor Hull;
00083 };
00084 }
00085 
00086 template <typename T> struct Interval_traits: public CGALi::Interval_traits_base<T>{};
00087 class Exception_intersection_is_empty{}; 
00088 
00089 // function returning type Boundary 
00090 template<typename Interval> inline 
00091 typename Interval_traits<Interval>::Boundary 
00092 lower(const Interval& interval) {
00093     typename Interval_traits<Interval>::Lower lower;
00094     return lower(interval);
00095 }
00096 
00097 template<typename Interval> inline 
00098 typename Interval_traits<Interval>::Boundary 
00099 upper(const Interval& interval) {
00100     typename Interval_traits<Interval>::Upper upper;
00101     return upper(interval);
00102 }
00103 
00104 template<typename Interval> inline 
00105 typename Interval_traits<Interval>::Boundary
00106 width(Interval interval) {
00107     typename Interval_traits<Interval>::Width width;
00108     return width(interval);
00109 }
00110 
00111 template<typename Interval> inline 
00112 typename Interval_traits<Interval>::Boundary
00113 median(Interval interval) {
00114     typename Interval_traits<Interval>::Median median;
00115     return median(interval);
00116 }
00117 
00118 template<typename Interval> inline 
00119 typename Interval_traits<Interval>::Boundary
00120 norm(Interval interval) {
00121     typename Interval_traits<Interval>::Norm norm;
00122     return norm(interval);
00123 }
00124 
00125 
00126 // functions returning bool 
00127 
00128 template<typename Interval> inline 
00129 typename Interval_traits<Interval>::Empty::result_type 
00130 empty(Interval interval) {
00131     typename Interval_traits<Interval>::Empty empty;
00132     return empty(interval);
00133 }
00134 
00135 template<typename Interval> inline 
00136 typename Interval_traits<Interval>::Singleton::result_type  
00137 singleton(Interval interval) {
00138     typename Interval_traits<Interval>::Singleton singleton;
00139     return singleton(interval);
00140 }
00141 
00142 template<typename Interval> inline 
00143 typename Interval_traits<Interval>::In::result_type  
00144 in(typename Interval_traits<Interval>::Boundary x, Interval interval) {
00145     typename Interval_traits<Interval>::In in;
00146     return in(x,interval);
00147 }
00148 
00149 template<typename Interval> inline 
00150 typename Interval_traits<Interval>::Zero_in::result_type
00151 zero_in(Interval interval) {
00152     typename Interval_traits<Interval>::Zero_in zero_in;
00153     return zero_in(interval);
00154 }
00155 
00156 // This ones should be removed, since even boost_1_35_0 has changed to zero_in
00157 template<typename Interval> inline 
00158 typename Interval_traits<Interval>::Zero_in::result_type
00159 in_zero(Interval interval) {
00160     typename Interval_traits<Interval>::Zero_in zero_in;
00161     return zero_in(interval);
00162 }
00163 
00164 template<typename Interval> inline 
00165 typename Interval_traits<Interval>::Equal::result_type
00166 equal(Interval interval1,Interval interval2) {
00167     typename Interval_traits<Interval>::Equal equal;
00168     return equal(interval1,interval2);
00169 }
00170 
00171 template<typename Interval> inline 
00172 typename Interval_traits<Interval>::Overlap::result_type
00173 overlap(Interval interval1, Interval interval2) {
00174     typename Interval_traits<Interval>::Overlap overlap;
00175     return overlap(interval1, interval2);
00176 }
00177 
00178 template<typename Interval> inline
00179 typename Interval_traits<Interval>::Subset::result_type 
00180 subset(Interval interval1, Interval interval2) {
00181     typename Interval_traits<Interval>::Subset subset;
00182     return subset(interval1, interval2);
00183 }
00184 
00185 template<typename Interval> inline
00186 typename Interval_traits<Interval>::Proper_subset::result_type 
00187 proper_subset(Interval interval1, Interval interval2) {
00188     typename Interval_traits<Interval>::Proper_subset proper_subset;
00189     return proper_subset(interval1, interval2);
00190 }
00191 
00192 
00193 // Set operations, functions returing Interval
00194 template<typename Interval> inline 
00195 typename Interval_traits<Interval>::Intersection::result_type
00196 intersection(Interval interval1, Interval interval2) {
00197     typename Interval_traits<Interval>::Intersection intersection;
00198     return intersection(interval1, interval2);
00199 }
00200 
00201 template<typename Interval> inline 
00202 typename Interval_traits<Interval>::Hull::result_type
00203 hull(Interval interval1, Interval interval2) {
00204     typename Interval_traits<Interval>::Hull hull;
00205     return hull(interval1, interval2);
00206 }
00207 
00208 
00209 
00210 CGAL_END_NAMESPACE
00211 
00212 #endif // CGAL_INTERVAL_TRAITS_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines