template < | class Traits, |
class HalfedgeDSItems = CGAL::HalfedgeDS_items_2, | |
class Alloc = CGAL_ALLOCATOR(int)> | |
class HalfedgeDS_default; |
The class HalfedgeDS_default<Traits,HalfedgeDSItems,Alloc> is a model for the HalfedgeDS concept. The second template parameter HalfedgeDSItems has a default argument CGAL::HalfedgeDS_items_2. The third template parameter Alloc uses the Cgal default allocator as default setting. HalfedgeDS_default<Traits,HalfedgeDSItems,Alloc> is a list-based representation with bidirectional iterators that supports removal.
#include <CGAL/HalfedgeDS_default.h>
HalfedgeDS<Traits,Items,Alloc>
typedef bidirectional_iterator_tag | ||
iterator_category; | ||
typedef CGAL::Tag_true | Supports_removal; |
CGAL::HalfedgeDS_list
CGAL::HalfedgeDS_vector
HalfedgeDSItems
CGAL::HalfedgeDS_items_2
CGAL::Polyhedron_3<Traits>
CGAL::HalfedgeDS_items_decorator<HDS>
CGAL::HalfedgeDS_decorator<HDS>
CGAL::HalfedgeDS_const_decorator<HDS>
Currently, HalfedgeDS_default<Traits,HalfedgeDSItems,Alloc> is derived from CGAL::HalfedgeDS_list<Traits>. The copy constructor and the assignment operator need O(n) time with n the total number of vertices, halfedges, and faces. The former suboptimal implementation with an O(n log n) runtime has been replaced with a faster implementation based on hashing for the pointer lookup.
Due to a workaround for the flag CGAL_CFG_NO_TMPL_IN_TMPL_PARAM, a halfedge data structure cannot be instantiated directly. For the HalfedgeDS_default<Traits,HalfedgeDSItems,Alloc> a macro simplifies its direct use. However, when using a halfedge data structure as an argument for another class template, the class template name HalfedgeDS_default must be used, not the macro.
// The macro definition. #ifndef CGAL_CFG_NO_TMPL_IN_TMPL_PARAM #define CGAL_HALFEDGEDS_DEFAULT ::CGAL::HalfedgeDS_default #else #define CGAL_HALFEDGEDS_DEFAULT ::CGAL::HalfedgeDS_default::HDS #endif // The direct instantiation of the default HalfedgeDS given a Traits class. typedef CGAL_HALFEDGEDS_DEFAULT<Traits> HDS;