BWAPI
SPAR/AIModule/BWTA/vendors/CGAL/CGAL/Arr_extended_dcel.h
Go to the documentation of this file.
00001 // Copyright (c) 2005  Tel-Aviv University (Israel).
00002 // All rights reserved.
00003 //
00004 // This file is part of CGAL (www.cgal.org); you may redistribute it under
00005 // the terms of the Q Public License version 1.0.
00006 // See the file LICENSE.QPL distributed with CGAL.
00007 //
00008 // Licensees holding a valid commercial license may use this file in
00009 // accordance with the commercial license agreement provided with the software.
00010 //
00011 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00012 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00013 //
00014 // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/Arrangement_on_surface_2/include/CGAL/Arr_extended_dcel.h $
00015 // $Id: Arr_extended_dcel.h 33059 2006-08-06 10:15:34Z wein $
00016 // 
00017 //
00018 // Author(s)     : Ron Wein    <wein@post.tau.ac.il>
00019 //                 Efi Fogel   <efif@post.tau.ac.il>
00020 
00021 #ifndef CGAL_ARR_EXTENDED_DCEL_H
00022 #define CGAL_ARR_EXTENDED_DCEL_H
00023 
00028 #include <CGAL/Arr_dcel_base.h>
00029 
00030 CGAL_BEGIN_NAMESPACE
00031 
00036 template <class VertexBase_, typename VertexData_>
00037 class Arr_extended_vertex : public VertexBase_
00038 {
00039   typedef Arr_extended_vertex<VertexBase_, VertexData_>  Self;
00040   typedef VertexBase_                                    Base;
00041 
00042 public:
00043   typedef VertexData_                                     Data;
00044 
00045 private:
00046 
00047   Data       m_data;       // The auxiliary data field.
00048 
00049 public:
00050 
00052   const Data& data () const
00053   {
00054     return (m_data);
00055   }
00056 
00058   Data& data ()
00059   {
00060     return (m_data);
00061   }
00062 
00064   void set_data (const Data& data)
00065   {
00066     m_data = data;
00067   }
00068 
00070   virtual void assign (const Base& v)
00071   {
00072     Base::assign (v);
00073 
00074     const Self&  ex_v = static_cast<const Self&>(v);
00075     m_data = ex_v.m_data;
00076   }
00077 };
00078 
00083 template <class HalfedgeBase_, typename HalfedgeData_>
00084 class Arr_extended_halfedge : public HalfedgeBase_
00085 {
00086   typedef Arr_extended_halfedge<HalfedgeBase_, HalfedgeData_>  Self;
00087   typedef HalfedgeBase_                                        Base;
00088 
00089 public:
00090   typedef HalfedgeData_                                        Data;
00091 
00092 private:
00093 
00094   Data       m_data;       // The auxiliary data field.
00095 
00096 public:
00097 
00099   const Data& data () const
00100   {
00101     return (m_data);
00102   }
00103 
00105   Data& data ()
00106   {
00107     return (m_data);
00108   }
00109 
00111   void set_data (const Data& data)
00112   {
00113     m_data = data;
00114   }
00115 
00117   virtual void assign (const Base& he)
00118   {
00119     Base::assign (he);
00120 
00121     const Self&  ex_he = static_cast<const Self&>(he);
00122     m_data = ex_he.m_data;
00123   }
00124 };
00125 
00130 template <class FaceBase_, typename FaceData_>
00131 class Arr_extended_face : public FaceBase_
00132 {
00133   typedef Arr_extended_face<FaceBase_, FaceData_>  Self;
00134   typedef FaceBase_                                Base;
00135 
00136 public:
00137   typedef FaceData_                                Data;
00138 
00139 private:
00140 
00141   Data       m_data;       // The auxiliary data field.
00142 
00143 public:
00144 
00146   const Data& data () const
00147   {
00148     return (m_data);
00149   }
00150 
00152   Data& data ()
00153   {
00154     return (m_data);
00155   }
00156 
00158   void set_data (const Data& data)
00159   {
00160     m_data = data;
00161   }
00162 
00164   virtual void assign (const Base& f)
00165   {
00166     Base::assign (f);
00167 
00168     const Self&  ex_f = static_cast<const Self&>(f);
00169     m_data = ex_f.m_data;
00170   }
00171 };
00172 
00179 template <class Traits_, typename FaceData_,
00180           class VertexBase_ = Arr_vertex_base<typename Traits_::Point_2>,
00181           class HalfedgeBase_ =
00182                      Arr_halfedge_base<typename Traits_::X_monotone_curve_2>,
00183           class FaceBase_ = Arr_face_base>
00184 class Arr_face_extended_dcel :
00185   public Arr_dcel_base<VertexBase_,
00186                        HalfedgeBase_,
00187                        Arr_extended_face<FaceBase_, FaceData_> >
00188 {
00189 public:
00190 
00191   typedef FaceData_                    Face_data;
00192 
00196   template<typename T>
00197   class rebind
00198   {
00199     typedef typename VertexBase_::template rebind
00200                         <typename T::Point_2>              Rebind_vertex;
00201     typedef typename Rebind_vertex::other                  Vertex_base;
00202     typedef typename HalfedgeBase_::template rebind
00203                         <typename T::X_monotone_curve_2>   Rebind_halfedge;
00204     typedef typename Rebind_halfedge::other                Halfedge_base;
00205    
00206   public:
00207 
00208     typedef Arr_face_extended_dcel<T,
00209                                    Face_data,
00210                                    Vertex_base,
00211                                    Halfedge_base,
00212                                    FaceBase_>              other;
00213   };
00214 
00216   Arr_face_extended_dcel ()
00217   {}
00218 
00220   virtual ~Arr_face_extended_dcel ()
00221   {}
00222 };
00223 
00231 template <class Traits_,
00232           typename VertexData_, typename HalfedgeData_, typename FaceData_,
00233           class VertexBase_ = Arr_vertex_base<typename Traits_::Point_2>,
00234           class HalfedgeBase_ =
00235                      Arr_halfedge_base<typename Traits_::X_monotone_curve_2>,
00236           class FaceBase_ = Arr_face_base>
00237 class Arr_extended_dcel :
00238   public Arr_dcel_base<Arr_extended_vertex<VertexBase_, VertexData_>,
00239                        Arr_extended_halfedge<HalfedgeBase_, HalfedgeData_>,
00240                        Arr_extended_face<FaceBase_, FaceData_> >
00241 {
00242 public:
00243 
00244   typedef VertexData_                  Vertex_data;
00245   typedef HalfedgeData_                Halfedge_data;
00246   typedef FaceData_                    Face_data;
00247 
00251   template<typename T>
00252   class rebind
00253   {
00254     typedef typename VertexBase_::template rebind
00255                         <typename T::Point_2>              Rebind_vertex;
00256     typedef typename Rebind_vertex::other                  Vertex_base;
00257     typedef typename HalfedgeBase_::template rebind
00258                         <typename T::X_monotone_curve_2>   Rebind_halfedge;
00259     typedef typename Rebind_halfedge::other                Halfedge_base;
00260    
00261   public:
00262 
00263     typedef Arr_extended_dcel<T,
00264                               Vertex_data,
00265                               Halfedge_data,
00266                               Face_data,
00267                               Vertex_base,
00268                               Halfedge_base,
00269                               FaceBase_>                   other;
00270   };
00271 
00273   Arr_extended_dcel ()
00274   {}
00275 
00277   virtual ~Arr_extended_dcel ()
00278   {}
00279 };
00280 
00281 CGAL_END_NAMESPACE
00282 
00283 #endif 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines