From c871aa06b4f2d4928609e3df1f801b85bafd2d89 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Thu, 6 Sep 2012 11:42:50 +0000 Subject: [PATCH] * Add generic beta in CMap (small feature); * Add generic create_dart and create_attribute in CMap (small feature); * Add generic create_vertex_attribute in LCC (small feature); * BugFix in LCC doc (wrong concept for item class). --- .../Combinatorial_map/Combinatorial_map.tex | 2 +- .../Combinatorial_map_ref/Cell_attribute.tex | 2 +- .../CombinatorialMap.tex | 2 +- .../Combinatorial_map.tex | 12 ++-- .../Combinatorial_map_min_items.tex | 2 +- .../doc_tex/Combinatorial_map_ref/intro.tex | 2 +- .../include/CGAL/Combinatorial_map.h | 18 +++++ .../Linear_cell_complex.tex | 2 +- .../Cell_attribute_with_point.tex | 2 +- .../LinearCellComplexItems.tex | 2 +- .../LinearCellComplexTraits.tex | 2 +- .../Linear_cell_complex.tex | 41 +++++++----- .../Linear_cell_complex_min_items.tex | 2 +- .../Linear_cell_complex_traits.tex | 2 +- .../doc_tex/Linear_cell_complex_ref/intro.tex | 2 +- .../include/CGAL/Linear_cell_complex.h | 66 +++++++++++++++++-- 16 files changed, 121 insertions(+), 40 deletions(-) diff --git a/Combinatorial_map/doc_tex/Combinatorial_map/Combinatorial_map.tex b/Combinatorial_map/doc_tex/Combinatorial_map/Combinatorial_map.tex index b13b79e1af8..96a07e9947e 100644 --- a/Combinatorial_map/doc_tex/Combinatorial_map/Combinatorial_map.tex +++ b/Combinatorial_map/doc_tex/Combinatorial_map/Combinatorial_map.tex @@ -742,7 +742,7 @@ accessed through \emph{handles}. A handle is a model of the \subsection{Combinatorial Maps}\label{ssec-combinatorial-map} -The class \ccc{Combinatorial_map} is a model of the +The class \ccc{Combinatorial_map} is a model of the \ccc{CombinatorialMap} concept. It has three template parameters standing for the dimension of the combinatorial map (an \ccc{unsigned int}), an items class (a model of the diff --git a/Combinatorial_map/doc_tex/Combinatorial_map_ref/Cell_attribute.tex b/Combinatorial_map/doc_tex/Combinatorial_map_ref/Cell_attribute.tex index a19e5544db1..9ff565d5472 100644 --- a/Combinatorial_map/doc_tex/Combinatorial_map_ref/Cell_attribute.tex +++ b/Combinatorial_map/doc_tex/Combinatorial_map_ref/Cell_attribute.tex @@ -80,7 +80,7 @@ The class \ccRefName\ represents an attribute containing (or not) an information \ccSeeAlso %\ccRefIdfierPage{CGAL::Void_functor}\\ %\ccRefIdfierPage{CGAL::Cell_attribute_with_info}\\ -\ccRefIdfierPage{CGAL::Combinatorial_map} +\ccRefIdfierPage{CGAL::Combinatorial_map} \end{ccRefClass} % +------------------------------------------------------------------------+ diff --git a/Combinatorial_map/doc_tex/Combinatorial_map_ref/CombinatorialMap.tex b/Combinatorial_map/doc_tex/Combinatorial_map_ref/CombinatorialMap.tex index 794d561bfdb..bf15d3d09e8 100644 --- a/Combinatorial_map/doc_tex/Combinatorial_map_ref/CombinatorialMap.tex +++ b/Combinatorial_map/doc_tex/Combinatorial_map_ref/CombinatorialMap.tex @@ -478,7 +478,7 @@ combinatorial tetrahedra:\\ \end{ccAdvanced} \ccHasModels -\ccRefIdfierPage{CGAL::Combinatorial_map} +\ccRefIdfierPage{CGAL::Combinatorial_map} % \ccSeeAlso % \ccRefIdfierPage{CGAL::CombinatorialMapWithPoints} diff --git a/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map.tex b/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map.tex index b1fd39f62f2..6799f5313c7 100644 --- a/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map.tex +++ b/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map.tex @@ -8,7 +8,7 @@ %%RefPage: end of header, begin of main body % +------------------------------------------------------------------------+ -\begin{ccRefClass}{Combinatorial_map} +\begin{ccRefClass}{Combinatorial_map} \ccRefLabel{CGAL::Combinatorial_map} \ccInclude{CGAL/Combinatorial_map.h} @@ -25,19 +25,19 @@ Darts and non void attributes are stored in memory using \ccParameters \ccc{d} an integer for the dimension of the map.\\ -\ccc{CMItems} must be a model of the \ccc{CombinatorialMapItems} concept. \\ +\ccc{Items} must be a model of the \ccc{CombinatorialMapItems} concept. \\ \ccc{Alloc} has to match the standard allocator requirements. The \ccc{rebind} mechanism from \ccc{Alloc} will be used to create appropriate allocators internally with value type \ccc{Dart}. There are two default template arguments: -\ccc{Combinatorial_map_min_items} for \ccc{CMItems} and +\ccc{Combinatorial_map_min_items} for \ccc{Items} and \ccc{CGAL_ALLOCATOR(int)} from the \ccc{} header file for \ccc{Alloc}. \ccTypes -\ccThree{typedef Combinatorial_map}{}{} -\ccTypedef{typedef Combinatorial_map Self;}{} +\ccThree{typedef Combinatorial_map}{}{} +\ccTypedef{typedef Combinatorial_map Self;}{} \ccGlue -\ccTypedef{typedef CMItems::Dart_wrapper::Dart Dart;}{} +\ccTypedef{typedef Items::Dart_wrapper::Dart Dart;}{} \ccHeading{Complexity} diff --git a/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map_min_items.tex b/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map_min_items.tex index c7faac33827..7b4ce46e1b7 100644 --- a/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map_min_items.tex +++ b/Combinatorial_map/doc_tex/Combinatorial_map_ref/Combinatorial_map_min_items.tex @@ -43,7 +43,7 @@ struct Combinatorial_map_min_items \end{ccExampleCode} \ccSeeAlso -\ccRefIdfierPage{CGAL::Combinatorial_map}\\ +\ccRefIdfierPage{CGAL::Combinatorial_map}\\ \ccRefIdfierPage{CGAL::Dart} % \ccRefIdfierPage{CGAL::HalfedgeDS_items_2}\\ diff --git a/Combinatorial_map/doc_tex/Combinatorial_map_ref/intro.tex b/Combinatorial_map/doc_tex/Combinatorial_map_ref/intro.tex index 582b11c35e8..6c2b2d84485 100644 --- a/Combinatorial_map/doc_tex/Combinatorial_map_ref/intro.tex +++ b/Combinatorial_map/doc_tex/Combinatorial_map_ref/intro.tex @@ -16,7 +16,7 @@ %\ccRefConceptPage{CGAL::CombinatorialMapWithPointsTraits} \subsection{Classes} -\ccRefIdfierPage{CGAL::Combinatorial_map}\\ +\ccRefIdfierPage{CGAL::Combinatorial_map}\\ \ccRefIdfierPage{CGAL::Dart}\\ %\ccRefIdfierPage{CGAL::Combinatorial_map_with_points} \ccRefIdfierPage{CGAL::Cell_attribute}\\ diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map.h b/Combinatorial_map/include/CGAL/Combinatorial_map.h index 84d2be3af77..30cd7b7ab9e 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map.h @@ -257,6 +257,12 @@ namespace CGAL { Dart_handle create_dart(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4, const T5 &t5, const T6 &t6, const T7 &t7, const T8 &t8) { return mdarts.emplace(mmask_marks, t1, t2, t3, t4, t5, t6, t7, t8); } + template < typename T1, typename T2, typename T3, typename T4, typename T5, + typename T6, typename T7, typename T8, typename T9 > + Dart_handle create_dart(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5, const T6 &t6, const T7 &t7, const T8 &t8, + const T9 &t9) + { return mdarts.emplace(mmask_marks, t1, t2, t3, t4, t5, t6, t7, t8, t9); } #endif /** Erase a dart from the list of darts. @@ -944,6 +950,18 @@ namespace CGAL { return CGAL::cpp0x::get::value> (mattribute_containers).emplace(t1, t2, t3, t4, t5, t6, t7, t8); } + template + typename Attribute_handle::type + create_attribute(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5, const T6 &t6, const T7 &t7, const T8 &t8, + const T9 &t9) + { + CGAL_static_assertion_msg(Helper::template Dimension_index::value>=0, + "create_attribute but i-attributes are disabled"); + return CGAL::cpp0x::get::value> + (mattribute_containers).emplace(t1, t2, t3, t4, t5, t6, t7, t8, t9); + } #endif /// Erase an attribute. diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex/Linear_cell_complex.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex/Linear_cell_complex.tex index f660ed9b8bd..9b9a86db1e8 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex/Linear_cell_complex.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex/Linear_cell_complex.tex @@ -182,7 +182,7 @@ Section~\ref{ssec-attribute-wp}). \subsection{Linear Cell Complex}\label{ssec-linear-cell-complex} -The \ccc{CGAL::Linear_cell_complex} class +The \ccc{CGAL::Linear_cell_complex} class is a model of the \ccc{CombinatorialMap} concept. It guarantees that each vertex of the combinatorial map is associated with an attribute containing a point. This class can be used in geometric algorithms (it diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Cell_attribute_with_point.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Cell_attribute_with_point.tex index b608837c5d6..7b6ac6d4e83 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Cell_attribute_with_point.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Cell_attribute_with_point.tex @@ -45,7 +45,7 @@ of a combinatorial map. \ccTypedef{typedef LCC::Dart_const_handle Dart_const_handle;}{} \ccSeeAlso -\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ +\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ \ccRefIdfierPage{CGAL::Linear_cell_complex_min_items}\\ \ccRefIdfierPage{CGAL::Cell_attribute} diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexItems.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexItems.tex index 7b48212ac55..f7358ebc9c0 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexItems.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexItems.tex @@ -28,7 +28,7 @@ The first type in \ccc{Attributes} must be a model of the \ccRefIdfierPage{CGAL::Linear_cell_complex_min_items} \ccSeeAlso -\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ +\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ \ccRefConceptPage{CellAttributeWithPoint}\\ \ccRefIdfierPage{CGAL::Dart} diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexTraits.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexTraits.tex index 0190446cbde..51d90371f6d 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexTraits.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/LinearCellComplexTraits.tex @@ -76,7 +76,7 @@ class. \ccRefIdfierPage{CGAL::Linear_cell_complex_traits}. \ccSeeAlso -\ccRefIdfierPage{CGAL::Linear_cell_complex} +\ccRefIdfierPage{CGAL::Linear_cell_complex} \end{ccRefConcept} % +------------------------------------------------------------------------+ diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex.tex index 02fe6217141..81fb692ae6e 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex.tex @@ -7,7 +7,7 @@ \ccRefPageBegin %%RefPage: end of header, begin of main body % +------------------------------------------------------------------------+ -\begin{ccRefClass}{Linear_cell_complex} +\begin{ccRefClass}{Linear_cell_complex} \ccInclude{CGAL/Linear_cell_complex.h} @@ -23,25 +23,25 @@ model of \ccc{CellAttributeWithPoint}. \ccRefConceptPage{CombinatorialMap} \ccInheritsFrom -\ccRefIdfierPage{CGAL::Combinatorial_map} +\ccRefIdfierPage{CGAL::Combinatorial_map} \ccParameters \ccc{d} an integer for the dimension of the combinatorial map,\\ \ccc{d2} an integer for the dimension of the ambient space,\\ \ccc{LCCTraits} must be a model of the \ccc{LinearCellComplexTraits} concept, satisfying \ccc{LCCTraits::ambiant_dimension==d2},\\ -\ccc{CMItems} must be a model of the \ccc{CombinatorialMapItems} concept,\\ +\ccc{Items} must be a model of the \ccc{LinearCellComplexItems} concept,\\ \ccc{Alloc} has to match the standard allocator requirements. There are four default template arguments: \ccc{d2} is equal to \ccc{d}, \ccc{LCCTraits} is equal to \ccc{CGAL::Linear_cell_complex_traits}, -\ccc{CMItems} is equal to \ccc{CGAL::Linear_cell_complex_min_items} and +\ccc{Items} is equal to \ccc{CGAL::Linear_cell_complex_min_items} and \ccc{Alloc} is \ccc{CGAL_ALLOCATOR(int)}. \begin{ccAdvanced} Note that there is an additional, and undocumented, template parameter \ccc{CMap} for - \ccc{Linear_cell_complex} allowing + \ccc{Linear_cell_complex} allowing to inherit from any model of the \ccc{CombinatorialMap} concept. \end{ccAdvanced} @@ -56,14 +56,14 @@ There are four default template arguments: % +-----------------------------------+ \ccTypes -\ccThree{typedef Linear_cell_complex}{}{} -\ccTypedef{typedef Linear_cell_complex Self;}{} +\ccThree{typedef Linear_cell_complex}{}{} +\ccTypedef{typedef Linear_cell_complex Self;}{} \ccGlue -\ccTypedef{typedef CMItems::Dart_wrapper::Dart Dart;}{The type of dart, must satisfy \ccc{Dart::dimension==d}.} +\ccTypedef{typedef Items::Dart_wrapper::Dart Dart;}{The type of dart, must satisfy \ccc{Dart::dimension==d}.} \ccTypedef{typedef LCCTraits Traits;}{} \ccGlue -\ccTypedef{typedef CMItems Items;}{} +\ccTypedef{typedef Items Items;}{} \ccGlue \ccTypedef{typedef Alloc Alloc;}{} @@ -157,13 +157,22 @@ if it is a valid combinatorial map, and if for each dart handle \emph{dh} such t of the new dart to this new 0-attribute, and returns the corresponding handle.} -\ccMethod{Vertex_attribute_handle create_vertex_attribute();} -{Creates a new 0-attribute in \ccc{lcc}, and returns the corresponding handle - (a shortcut for \ccc{create_attribute<0>()}).} +\ccMethod{template Vertex_attribute_handle + create_vertex_attribute(T1 t1);} {Creates a new 0-attribute in + \ccc{lcc}, and returns the corresponding handle (a shortcut for + \ccc{create_attribute<0>(t1)}). Calls the constructor of + Vertex_attribute having \ccc{T1} as parameter. Overloads of this + member function are defined that take from zero to nine arguments. + With zero argument, \ccc{create_vertex_attribute()} creates a new + 0-attribute by using the default constructor.} -\ccMethod{Vertex_attribute_handle create_vertex_attribute(const Point& apoint);} -{Creates a new 0-attribute in \ccc{lcc} initialized with \ccc{apoint}, - and returns the corresponding handle.} +% \ccMethod{Vertex_attribute_handle create_vertex_attribute();} +% {Creates a new 0-attribute in \ccc{lcc}, and returns the corresponding handle +% (a shortcut for \ccc{create_attribute<0>()}).} + +% \ccMethod{Vertex_attribute_handle create_vertex_attribute(const Point& apoint);} +% {Creates a new 0-attribute in \ccc{lcc} initialized with \ccc{apoint}, +% and returns the corresponding handle.} \ccMethod{void erase_vertex_attribute(Vertex_attribute_handle vh);} {Removes the 0-attribute pointed to by \ccc{vh} from \ccc{lcc} @@ -328,7 +337,7 @@ if it is a valid combinatorial map, and if for each dart handle \emph{dh} such t % +-----------------------------------+ \ccSeeAlso \ccRefConceptPage{CombinatorialMap}\\ -\ccRefIdfierPage{CGAL::Combinatorial_map}\\ +\ccRefIdfierPage{CGAL::Combinatorial_map}\\ \ccRefConceptPage{Dart}\\ \ccRefConceptPage{LinearCellComplexItems}\\ \ccRefIdfierPage{CGAL::Linear_cell_complex_min_items}\\ diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_min_items.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_min_items.tex index 86be349d702..fa34f355527 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_min_items.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_min_items.tex @@ -46,7 +46,7 @@ The following example shows one implementation of the \end{ccExampleCode} \ccSeeAlso -\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ +\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ \ccRefIdfierPage{CGAL::Dart} \end{ccRefClass} diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_traits.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_traits.tex index e2c9e55cddb..c1791c5721b 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_traits.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/Linear_cell_complex_traits.tex @@ -43,7 +43,7 @@ use predicates are only defined in 2D and 3D. \ccVariable{static unsigned int ambient_dimension = d;}{} \ccSeeAlso -\ccRefIdfierPage{CGAL::Linear_cell_complex} +\ccRefIdfierPage{CGAL::Linear_cell_complex} \end{ccRefClass} % +------------------------------------------------------------------------+ diff --git a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/intro.tex b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/intro.tex index d0368e69ec2..4cabb7b43ab 100644 --- a/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/intro.tex +++ b/Linear_cell_complex/doc_tex/Linear_cell_complex_ref/intro.tex @@ -10,7 +10,7 @@ \ccRefConceptPage{CellAttributeWithPoint} \subsection{Classes} -\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ +\ccRefIdfierPage{CGAL::Linear_cell_complex}\\ \ccRefIdfierPage{CGAL::Linear_cell_complex_min_items}\\ \ccRefIdfierPage{CGAL::Linear_cell_complex_traits}\\ \ccRefIdfierPage{CGAL::Cell_attribute_with_point} diff --git a/Linear_cell_complex/include/CGAL/Linear_cell_complex.h b/Linear_cell_complex/include/CGAL/Linear_cell_complex.h index 167b72e2126..f7114a14766 100644 --- a/Linear_cell_complex/include/CGAL/Linear_cell_complex.h +++ b/Linear_cell_complex/include/CGAL/Linear_cell_complex.h @@ -88,15 +88,69 @@ namespace CGAL { /** Create a vertex attribute. * @return an handle on the new attribute. */ +#ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + template + Vertex_attribute_handle create_vertex_attribute(const Args&... args) + { return Base::template create_attribute<0>(args...); } +#else Vertex_attribute_handle create_vertex_attribute() { return Base::template create_attribute<0>(); } - /** Create a vertex attribute associated with a point. - * @param point the point to associated with the dart. - * @return an handle on the new attribute. - */ - Vertex_attribute_handle create_vertex_attribute(const Point& apoint) - { return Base::template create_attribute<0>(apoint); } + template + Vertex_attribute_handle create_vertex_attribute(const T1& t1) + { return Base::template create_attribute<0>(t1); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2) + { return Base::template create_attribute<0>(t1, t2); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3) + { return Base::template create_attribute<0>(t1, t2, t3); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3, const T4 &t4) + { return Base::template create_attribute<0>(t1, t2, t3, t4); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5) + { return Base::template create_attribute<0>(t1, t2, t3, t4, t5); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5, const T6 &t6) + { return Base::template create_attribute<0>(t1, t2, t3, t4, t5, t6); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5, const T6 &t6, const T7 &t7) + { return Base::template create_attribute<0>(t1, t2, t3, t4, t5, t6, t7); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5, const T6 &t6, const T7 &t7, const T8 &t8) + { return Base::template create_attribute<0>(t1, t2, t3, t4, t5, t6, t7, + t8); } + + template + Vertex_attribute_handle create_vertex_attribute + (const T1& t1, const T2 &t2, const T3 &t3, const T4 &t4, + const T5 &t5, const T6 &t6, const T7 &t7, const T8 &t8, const T9 &t9) + { return Base::template create_attribute<0>(t1, t2, t3, t4, t5, t6, t7, + t8, t9); } +#endif // CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES /** * Create a new dart associated with an handle through an attribute.