BWAPI
|
00001 // Copyright (c) 1997 Utrecht University (The Netherlands), 00002 // ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany), 00003 // INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg 00004 // (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria), 00005 // and Tel-Aviv University (Israel). All rights reserved. 00006 // 00007 // This file is part of CGAL (www.cgal.org); you can redistribute it and/or 00008 // modify it under the terms of the GNU Lesser General Public License as 00009 // published by the Free Software Foundation; version 2.1 of the License. 00010 // See the file LICENSE.LGPL distributed with CGAL. 00011 // 00012 // Licensees holding a valid commercial license may use this file in 00013 // accordance with the commercial license agreement provided with the software. 00014 // 00015 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00016 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00017 // 00018 // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/HalfedgeDS/include/CGAL/HalfedgeDS_vertex_base.h $ 00019 // $Id: HalfedgeDS_vertex_base.h 35794 2007-01-24 18:00:30Z spion $ 00020 // 00021 // 00022 // Author(s) : Lutz Kettner <kettner@mpi-sb.mpg.de> 00023 00024 #ifndef CGAL_HALFEDGEDS_VERTEX_BASE_H 00025 #define CGAL_HALFEDGEDS_VERTEX_BASE_H 1 00026 00027 #include <CGAL/basic.h> 00028 00029 CGAL_BEGIN_NAMESPACE 00030 00031 // We use Tag_false to indicate that no point type is provided. 00032 00033 template < class Refs, class T = Tag_true, class P = Tag_false> 00034 class HalfedgeDS_vertex_base; 00035 00036 template < class Refs > 00037 class HalfedgeDS_vertex_base< Refs, Tag_false, Tag_false> { 00038 public: 00039 typedef Refs HalfedgeDS; 00040 typedef HalfedgeDS_vertex_base< Refs, Tag_false, Tag_false> Base; 00041 typedef Tag_false Supports_vertex_halfedge; 00042 typedef Tag_false Supports_vertex_point; 00043 typedef typename Refs::Vertex_handle Vertex_handle; 00044 typedef typename Refs::Vertex_const_handle Vertex_const_handle; 00045 typedef typename Refs::Halfedge_handle Halfedge_handle; 00046 typedef typename Refs::Halfedge_const_handle Halfedge_const_handle; 00047 typedef typename Refs::Face_handle Face_handle; 00048 typedef typename Refs::Face_const_handle Face_const_handle; 00049 typedef typename Refs::Halfedge Halfedge; 00050 typedef typename Refs::Face Face; 00051 }; 00052 00053 template < class Refs> 00054 class HalfedgeDS_vertex_base< Refs, Tag_true, Tag_false> { 00055 public: 00056 typedef Refs HalfedgeDS; 00057 typedef HalfedgeDS_vertex_base< Refs, Tag_true, Tag_false> Base; 00058 typedef Tag_true Supports_vertex_halfedge; 00059 typedef Tag_false Supports_vertex_point; 00060 typedef typename Refs::Vertex_handle Vertex_handle; 00061 typedef typename Refs::Vertex_const_handle Vertex_const_handle; 00062 typedef typename Refs::Halfedge_handle Halfedge_handle; 00063 typedef typename Refs::Halfedge_const_handle Halfedge_const_handle; 00064 typedef typename Refs::Face_handle Face_handle; 00065 typedef typename Refs::Face_const_handle Face_const_handle; 00066 typedef typename Refs::Halfedge Halfedge; 00067 typedef typename Refs::Face Face; 00068 private: 00069 Halfedge_handle hdg; 00070 public: 00071 Halfedge_handle halfedge() { return hdg; } 00072 Halfedge_const_handle halfedge() const { return hdg; } 00073 void set_halfedge( Halfedge_handle h) { hdg = h; } 00074 }; 00075 00076 template < class Refs, class P> 00077 class HalfedgeDS_vertex_base< Refs, Tag_false, P> { 00078 public: 00079 typedef Refs HalfedgeDS; 00080 typedef HalfedgeDS_vertex_base< Refs, Tag_false, P> Base; 00081 typedef Tag_false Supports_vertex_halfedge; 00082 typedef Tag_true Supports_vertex_point; 00083 typedef P Point; 00084 typedef typename Refs::Vertex_handle Vertex_handle; 00085 typedef typename Refs::Vertex_const_handle Vertex_const_handle; 00086 typedef typename Refs::Halfedge_handle Halfedge_handle; 00087 typedef typename Refs::Halfedge_const_handle Halfedge_const_handle; 00088 typedef typename Refs::Face_handle Face_handle; 00089 typedef typename Refs::Face_const_handle Face_const_handle; 00090 typedef typename Refs::Halfedge Halfedge; 00091 typedef typename Refs::Face Face; 00092 private: 00093 Point p; 00094 public: 00095 HalfedgeDS_vertex_base() {} 00096 HalfedgeDS_vertex_base( const Point& pp) : p(pp) {} 00097 Point& point() { return p; } 00098 const Point& point() const { return p; } 00099 }; 00100 00101 template < class Refs, class P> 00102 class HalfedgeDS_vertex_base< Refs, Tag_true, P> { 00103 public: 00104 typedef Refs HalfedgeDS; 00105 typedef HalfedgeDS_vertex_base< Refs, Tag_true, P> Base; 00106 typedef Tag_true Supports_vertex_halfedge; 00107 typedef Tag_true Supports_vertex_point; 00108 typedef P Point; 00109 typedef typename Refs::Vertex_handle Vertex_handle; 00110 typedef typename Refs::Vertex_const_handle Vertex_const_handle; 00111 typedef typename Refs::Halfedge_handle Halfedge_handle; 00112 typedef typename Refs::Halfedge_const_handle Halfedge_const_handle; 00113 typedef typename Refs::Face_handle Face_handle; 00114 typedef typename Refs::Face_const_handle Face_const_handle; 00115 typedef typename Refs::Halfedge Halfedge; 00116 typedef typename Refs::Face Face; 00117 private: 00118 Halfedge_handle hdg; 00119 Point p; 00120 public: 00121 HalfedgeDS_vertex_base() {} 00122 HalfedgeDS_vertex_base( const Point& pp) : p(pp) {} 00123 Halfedge_handle halfedge() { return hdg; } 00124 Halfedge_const_handle halfedge() const { return hdg; } 00125 void set_halfedge( Halfedge_handle h) { hdg = h; } 00126 Point& point() { return p; } 00127 const Point& point() const { return p; } 00128 }; 00129 00130 CGAL_END_NAMESPACE 00131 00132 #endif // CGAL_HALFEDGEDS_VERTEX_BASE_H // 00133 // EOF //