Added Allocator template parameter

This commit is contained in:
Efi Fogel 2017-06-28 01:02:08 +03:00
parent cf9c7f8524
commit c5f40dc28a
14 changed files with 92 additions and 55 deletions

View File

@ -24,7 +24,7 @@
#include <CGAL/Arrangement_on_surface_2.h> #include <CGAL/Arrangement_on_surface_2.h>
#include <CGAL/No_intersection_surface_sweep_2.h> #include <CGAL/No_intersection_surface_sweep_2.h>
#include <CGAL/Arr_point_location/Arr_batched_point_location_traits_2.h> #include <CGAL/Arr_point_location/Arr_batched_point_location_traits_2.h>
#include <CGAL/Surface_sweep_2/No_overlap_event_base.h> #include <CGAL/Surface_sweep_2/No_overlap_event.h>
#include <CGAL/Surface_sweep_2/No_overlap_subcurve.h> #include <CGAL/Surface_sweep_2/No_overlap_subcurve.h>
#include <CGAL/Surface_sweep_2/Arr_batched_pl_sl_visitor.h> #include <CGAL/Surface_sweep_2/Arr_batched_pl_sl_visitor.h>
@ -74,7 +74,8 @@ locate(const Arrangement_on_surface_2<GeometryTraits_2, TopologyTraits>& arr,
// Surface sweep types // Surface sweep types
typedef Arr_batched_point_location_traits_2<Arr> Bgt2; typedef Arr_batched_point_location_traits_2<Arr> Bgt2;
typedef Ss2::No_overlap_event<Bgt2, Allocator> Bpl_event; typedef Ss2::No_overlap_event<Bgt2, Allocator> Bpl_event;
typedef Ss2::No_overlap_subcurve<Bgt2, Bpl_event> Bpl_curve; typedef Ss2::No_overlap_subcurve<Bgt2, Bpl_event, Allocator>
Bpl_curve;
typedef typename Tt::template Batched_point_location_helper<Bpl_event, typedef typename Tt::template Batched_point_location_helper<Bpl_event,
Bpl_curve> Bpl_curve>
Bpl_helper; Bpl_helper;

View File

@ -43,10 +43,13 @@
namespace CGAL { namespace CGAL {
/*! Compute the overlay of two input arrangements. /*! Compute the overlay of two input arrangements.
* \param arr1 The first arrangement. * \tparam GeometryTraitsA_2 the geometry traits of the first arrangement.
* \param arr2 The second arrangement. * \tparam GeometryTraitsB_2 the geometry traits of the second arrangement.
* \param arr Output: The resulting arrangement. * \tparam GeometryTraitsRes_2 the geometry traits of the resulting arrangement.
* \param ovl_tr An overlay-traits class. As arr1, arr2 and res can be * \tparam TopologyTraitsA the topology traits of the first arrangement.
* \tparam TopologyTraitsB the topology traits of the second arrangement.
* \tparam TopologyTraitsRes the topology traits of the resulting arrangement.
* \tparam OverlayTraits An overlay-traits class. As arr1, arr2 and res can be
* templated with different geometry-traits class and * templated with different geometry-traits class and
* different DCELs (encapsulated in the various topology-traits * different DCELs (encapsulated in the various topology-traits
* classes). The geometry-traits of the result arrangement is * classes). The geometry-traits of the result arrangement is

View File

@ -22,7 +22,7 @@
#include <CGAL/Arrangement_on_surface_2.h> #include <CGAL/Arrangement_on_surface_2.h>
#include <CGAL/No_intersection_surface_sweep_2.h> #include <CGAL/No_intersection_surface_sweep_2.h>
#include <CGAL/Arr_point_location/Arr_batched_point_location_traits_2.h> #include <CGAL/Arr_point_location/Arr_batched_point_location_traits_2.h>
#include <CGAL/Surface_sweep_2/No_overlap_event_base.h> #include <CGAL/Surface_sweep_2/No_overlap_event.h>
#include <CGAL/Surface_sweep_2/No_overlap_subcurve.h> #include <CGAL/Surface_sweep_2/No_overlap_subcurve.h>
#include <CGAL/Surface_sweep_2/Arr_vert_decomp_sl_visitor.h> #include <CGAL/Surface_sweep_2/Arr_vert_decomp_sl_visitor.h>
@ -69,7 +69,8 @@ decompose(const Arrangement_on_surface_2<GeometryTraits_2, TopologyTraits>& arr,
// Surface sweep types: // Surface sweep types:
typedef Arr_batched_point_location_traits_2<Arr> Vgt2; typedef Arr_batched_point_location_traits_2<Arr> Vgt2;
typedef Ss2::No_overlap_event<Vgt2, Allocator> Vd_event; typedef Ss2::No_overlap_event<Vgt2, Allocator> Vd_event;
typedef Ss2::No_overlap_subcurve<Vgt2, Vd_event> Vd_curve; typedef Ss2::No_overlap_subcurve<Vgt2, Vd_event, Allocator>
Vd_curve;
typedef typename Tt::template typedef typename Tt::template
Vertical_decomposition_helper<Vd_event, Vd_curve> Vd_helper; Vertical_decomposition_helper<Vd_event, Vd_curve> Vd_helper;
typedef Arr_vert_decomp_sl_visitor<Vd_helper, Output_iterator> typedef Arr_vert_decomp_sl_visitor<Vd_helper, Output_iterator>

View File

@ -42,10 +42,13 @@ namespace Ss2 = Surface_sweep_2;
* 2D arrangement. * 2D arrangement.
* *
* \tparam GeometryTraits_2 the geometry traits. * \tparam GeometryTraits_2 the geometry traits.
* \tparam Arrangement_ the type of the costructed arrangement.
* \tparam Allocator_ a type of an element that is used to acquire/release * \tparam Allocator_ a type of an element that is used to acquire/release
* memory for elements of the event queue and the status * memory for elements of the event queue and the status
* structure, and to construct/destroy the elements in that * structure, and to construct/destroy the elements in that
* memory. The type must meet the requirements of Allocator. * memory. The type must meet the requirements of Allocator.
* \tparam SurfaceSweepBaseEvent the base class of the event.
* \tparam SurfaceSweepBaseCurve the base class of the subcurve.
* *
* We exploit the curiously recurring template pattern (CRTP) idiom to establish * We exploit the curiously recurring template pattern (CRTP) idiom to establish
* an interdependency between the curve and the event types, which are template * an interdependency between the curve and the event types, which are template
@ -64,7 +67,7 @@ template <typename GeometryTraits_2, typename Arrangement_,
typename Allocator_ = CGAL_ALLOCATOR(int), typename Allocator_ = CGAL_ALLOCATOR(int),
template <typename, typename> template <typename, typename>
class SurfaceSweepBaseEvent = Ss2::Default_event_base, class SurfaceSweepBaseEvent = Ss2::Default_event_base,
template <typename, typename, typename> template <typename, typename, typename, typename>
class SurfaceSweepBaseCurve = Ss2::Default_subcurve> class SurfaceSweepBaseCurve = Ss2::Default_subcurve>
class Arr_construction_event : class Arr_construction_event :
public Arr_construction_event_base< public Arr_construction_event_base<

View File

@ -31,12 +31,12 @@
* instance types of Subcurve and Event must be available when the * instance types of Subcurve and Event must be available when the
* surface-sweep template is instantiated. * surface-sweep template is instantiated.
* *
* Arr_construction_subcurve derives from an instance of the * Arr_construction_subcurve derives from an instance of the Default_subcurve
* Surface_sweep_subcurve class template. The user is allowed to introduce new * class template. The user is allowed to introduce new types that derive from
* types that derive from an instance of the Arr_construction_subcurve class * an instance of the Arr_construction_subcurve class template. However, some of
* template. However, some of the fields of this template depends on the * the fields of this template depends on the Subcurve type. We use the
* Subcurve type. We use the curiously recurring template pattern (CRTP) idiom * curiously recurring template pattern (CRTP) idiom to force the correct
* to force the correct matching of these types. * matching of these types.
*/ */
#include <CGAL/Surface_sweep_2/Default_subcurve.h> #include <CGAL/Surface_sweep_2/Default_subcurve.h>
@ -51,28 +51,35 @@ namespace Ss2 = Surface_sweep_2;
* This is the base class of the Arr_construction_subcurve class template used * This is the base class of the Arr_construction_subcurve class template used
* by the (CRTP) idiom. * by the (CRTP) idiom.
* \tparam GeometryTraits_2 the geometry traits. * \tparam GeometryTraits_2 the geometry traits.
* \tparam * \tparam Event_ the event type.
* Subcurve_ the subcurve actual type. * \tparam Allocator_ a type of an element that is used to acquire/release
* memory for elements of the event queue and the status
* structure, and to construct/destroy the elements in that
* memory. The type must meet the requirements of Allocator.
* \tparam Subcurve_ the subcurve actual type.
* *
* The information contained in this class last: * The information contained in this class last:
* - ishe event that was handled on the curve. * - ishe event that was handled on the curve.
* - The index for a subcurve that may represent a hole * - The index for a subcurve that may represent a hole
* - Indices of all halfedge below the curve that may represent a hole. * - Indices of all halfedge below the curve that may represent a hole.
*/ */
template <typename GeometryTraits_2, typename Event_, template <typename GeometryTraits_2, typename Event_, typename Allocator_,
template <typename, typename, typename> class SurfaceSweepBaseCurve, template <typename, typename, typename, typename>
class SurfaceSweepBaseCurve,
typename Subcurve_> typename Subcurve_>
class Arr_construction_subcurve_base : class Arr_construction_subcurve_base :
public SurfaceSweepBaseCurve<GeometryTraits_2, Event_, Subcurve_> public SurfaceSweepBaseCurve<GeometryTraits_2, Event_, Allocator_, Subcurve_>
{ {
public: public:
typedef GeometryTraits_2 Geometry_traits_2; typedef GeometryTraits_2 Geometry_traits_2;
typedef Subcurve_ Subcurve; typedef Subcurve_ Subcurve;
typedef Event_ Event; typedef Event_ Event;
typedef Allocator_ Allocator;
private: private:
typedef Geometry_traits_2 Gt2; typedef Geometry_traits_2 Gt2;
typedef SurfaceSweepBaseCurve<Gt2, Event, Subcurve> Base; typedef SurfaceSweepBaseCurve<Gt2, Event, Allocator, Subcurve>
Base;
public: public:
typedef typename Gt2::X_monotone_curve_2 X_monotone_curve_2; typedef typename Gt2::X_monotone_curve_2 X_monotone_curve_2;
@ -164,12 +171,12 @@ public:
*/ */
template <typename GeometryTraits_2, typename Event_, template <typename GeometryTraits_2, typename Event_,
typename Allocator_ = CGAL_ALLOCATOR(int), typename Allocator_ = CGAL_ALLOCATOR(int),
template <typename, typename, typename> template <typename, typename, typename, typename>
class SurfaceSweepBaseCurve = Ss2::Default_subcurve, class SurfaceSweepBaseCurve = Ss2::Default_subcurve,
typename Subcurve_ = Default> typename Subcurve_ = Default>
class Arr_construction_subcurve : class Arr_construction_subcurve :
public Arr_construction_subcurve_base< public Arr_construction_subcurve_base<
GeometryTraits_2, Event_, GeometryTraits_2, Event_, Allocator_,
SurfaceSweepBaseCurve, SurfaceSweepBaseCurve,
typename Default::Get<Subcurve_, typename Default::Get<Subcurve_,
Arr_construction_subcurve<GeometryTraits_2, Event_, Arr_construction_subcurve<GeometryTraits_2, Event_,
@ -188,8 +195,9 @@ private:
SurfaceSweepBaseCurve, Subcurve_> SurfaceSweepBaseCurve, Subcurve_>
Self; Self;
typedef typename Default::Get<Subcurve_, Self>::type Subcurve; typedef typename Default::Get<Subcurve_, Self>::type Subcurve;
typedef Arr_construction_subcurve_base<Gt2, Event, SurfaceSweepBaseCurve, typedef Arr_construction_subcurve_base<Gt2, Event, Allocator,
Subcurve> Base; SurfaceSweepBaseCurve, Subcurve>
Base;
public: public:
typedef typename Gt2::X_monotone_curve_2 X_monotone_curve_2; typedef typename Gt2::X_monotone_curve_2 X_monotone_curve_2;

View File

@ -41,8 +41,7 @@ namespace Ss2 = Surface_sweep_2;
* in the proper place in the resulting arrangement. * in the proper place in the resulting arrangement.
* *
* \tparam GeometryTraits_2 the geometry traits. * \tparam GeometryTraits_2 the geometry traits.
* \tparam Arrangement_ the type of the arrangement that is the resulting * \tparam Event_ the event type.
* arrangement the overlay process.
* \tparam Allocator_ a type of an element that is used to acquire/release * \tparam Allocator_ a type of an element that is used to acquire/release
* memory for elements of the event queue and the status * memory for elements of the event queue and the status
* structure, and to construct/destroy the elements in that * structure, and to construct/destroy the elements in that

View File

@ -31,8 +31,6 @@
#include <CGAL/memory.h> #include <CGAL/memory.h>
#include <CGAL/Surface_sweep_2/Event_comparer.h> #include <CGAL/Surface_sweep_2/Event_comparer.h>
#include <CGAL/Surface_sweep_2/Curve_comparer.h> #include <CGAL/Surface_sweep_2/Curve_comparer.h>
#include <CGAL/Surface_sweep_2/No_overlap_event.h>
#include <CGAL/Surface_sweep_2/No_overlap_subcurve.h>
#include <CGAL/Multiset.h> #include <CGAL/Multiset.h>
#include <CGAL/Arrangement_2/Arr_traits_adaptor_2.h> #include <CGAL/Arrangement_2/Arr_traits_adaptor_2.h>
#include <CGAL/Arr_tags.h> #include <CGAL/Arr_tags.h>

View File

@ -31,8 +31,6 @@
#include <CGAL/Object.h> #include <CGAL/Object.h>
#include <CGAL/No_intersection_surface_sweep_2.h> #include <CGAL/No_intersection_surface_sweep_2.h>
#include <CGAL/Surface_sweep_2/Curve_pair.h> #include <CGAL/Surface_sweep_2/Curve_pair.h>
#include <CGAL/Surface_sweep_2/Default_subcurve.h>
#include <CGAL/Surface_sweep_2/Default_event.h>
#include <CGAL/Arrangement_2/Open_hash.h> #include <CGAL/Arrangement_2/Open_hash.h>
namespace CGAL { namespace CGAL {

View File

@ -62,7 +62,8 @@ class Default_event :
public Default_event_base<GeometryTraits_2, public Default_event_base<GeometryTraits_2,
Default_subcurve<GeometryTraits_2, Default_subcurve<GeometryTraits_2,
Default_event<GeometryTraits_2, Default_event<GeometryTraits_2,
Allocator_> > > Allocator_>,
Allocator_> >
{ {
public: public:
/*! Construct default. */ /*! Construct default. */

View File

@ -50,7 +50,7 @@ namespace Surface_sweep_2 {
*/ */
template <typename GeometryTraits_2, typename Subcurve_> template <typename GeometryTraits_2, typename Subcurve_>
class Default_event_base : class Default_event_base :
public No_overlap_event_base<GeometryTraits_2, Subcurve_> public No_overlap_event_base<GeometryTraits_2, Subcurve_>
{ {
public: public:
typedef GeometryTraits_2 Geometry_traits_2; typedef GeometryTraits_2 Geometry_traits_2;

View File

@ -53,15 +53,21 @@ namespace Surface_sweep_2 {
* This is the base class of the Default_subcurve class template used by * This is the base class of the Default_subcurve class template used by
* the (CRTP) idiom. * the (CRTP) idiom.
* \tparam GeometryTraits_2 the geometry traits. * \tparam GeometryTraits_2 the geometry traits.
* \tparam Event_ the event type.
* \tparam Allocator_ a type of an element that is used to acquire/release
* memory for elements of the event queue and the status
* structure, and to construct/destroy the elements in that
* memory. The type must meet the requirements of Allocator.
* \tparam Subcurve_ the subcurve actual type. * \tparam Subcurve_ the subcurve actual type.
* *
* The information contained in this class is: * The information contained in this class is:
* - two pointers to subcurves that are the originating subcurves in case of * - two pointers to subcurves that are the originating subcurves in case of
* an overlap, otherwise thay are both NULL. * an overlap, otherwise thay are both NULL.
*/ */
template <typename GeometryTraits_2, typename Event_, typename Subcurve_> template <typename GeometryTraits_2, typename Event_, typename Allocator_,
typename Subcurve_>
class Default_subcurve_base : class Default_subcurve_base :
public No_overlap_subcurve<GeometryTraits_2, Event_, Subcurve_> public No_overlap_subcurve<GeometryTraits_2, Event_, Allocator_, Subcurve_>
{ {
public: public:
typedef GeometryTraits_2 Geometry_traits_2; typedef GeometryTraits_2 Geometry_traits_2;
@ -220,29 +226,40 @@ public:
* X_monotone_curve_2. It contains data that is used when applying the sweep * X_monotone_curve_2. It contains data that is used when applying the sweep
* algorithm on a set of x-monotone curves. This class derives from the * algorithm on a set of x-monotone curves. This class derives from the
* No_overlap_subcurve class template. * No_overlap_subcurve class template.
*
* \tparam GeometryTraits_2 the geometry traits. * \tparam GeometryTraits_2 the geometry traits.
* \tparam Event_ the event type.
* \tparam Allocator_ a type of an element that is used to acquire/release
* memory for elements of the event queue and the status
* structure, and to construct/destroy the elements in that
* memory. The type must meet the requirements of Allocator.
* \tparam Subcurve_ the type of the subcurve or Default. If the default is not * \tparam Subcurve_ the type of the subcurve or Default. If the default is not
* overriden it implies that the type is * overriden it implies that the type is
* No_overlap_subcurve * No_overlap_subcurve
*/ */
template <typename GeometryTraits_2, typename Event_, template <typename GeometryTraits_2, typename Event_,
typename Allocator_ = CGAL_ALLOCATOR(int),
typename Subcurve_ = Default> typename Subcurve_ = Default>
class Default_subcurve : class Default_subcurve :
public Default_subcurve_base<GeometryTraits_2, Event_, public Default_subcurve_base<GeometryTraits_2, Event_, Allocator_,
typename Default::Get<Subcurve_, typename Default::Get<Subcurve_,
Default_subcurve< Default_subcurve<
GeometryTraits_2, Event_, GeometryTraits_2, Event_,
Allocator_,
Subcurve_> >::type> Subcurve_> >::type>
{ {
public: public:
typedef GeometryTraits_2 Geometry_traits_2; typedef GeometryTraits_2 Geometry_traits_2;
typedef Event_ Event; typedef Event_ Event;
typedef Allocator_ Allocator;
private: private:
typedef Geometry_traits_2 Gt2; typedef Geometry_traits_2 Gt2;
typedef Default_subcurve<Gt2, Event, Subcurve_> Self; typedef Default_subcurve<Gt2, Event, Allocator, Subcurve_>
Self;
typedef typename Default::Get<Subcurve_, Self>::type Subcurve; typedef typename Default::Get<Subcurve_, Self>::type Subcurve;
typedef Default_subcurve_base<Gt2, Event, Subcurve> Base; typedef Default_subcurve_base<Gt2, Event, Allocator, Subcurve>
Base;
public: public:
typedef typename Gt2::X_monotone_curve_2 X_monotone_curve_2; typedef typename Gt2::X_monotone_curve_2 X_monotone_curve_2;
@ -266,8 +283,8 @@ public:
}; };
#ifdef CGAL_SL_VERBOSE #ifdef CGAL_SL_VERBOSE
template <typename GeometryTraits_2> template <typename Gt2, typename Evt, typename Allocator, typename Scv>
void Default_subcurve<GeometryTraits_2>::Print() const void Default_subcurve<Gt2, Evt, Allocator, Scv>::Print() const
{ {
std::cout << "Curve " << this std::cout << "Curve " << this
<< " (" << this->last_curve() << ") " << " (" << this->last_curve() << ") "

View File

@ -41,8 +41,9 @@ namespace Surface_sweep_2 {
template <typename Visitor_, template <typename Visitor_,
typename GeometryTraits_2, typename GeometryTraits_2,
typename Allocator_ = CGAL_ALLOCATOR(int), typename Allocator_ = CGAL_ALLOCATOR(int),
typename Event_ = Default_event<GeometryTraits_2>, typename Event_ = Default_event<GeometryTraits_2, Allocator_>,
typename Subcurve_ = Default_subcurve<GeometryTraits_2, Event_> > typename Subcurve_ = Default_subcurve<GeometryTraits_2, Event_,
Allocator_> >
class Default_visitor : public Default_visitor_base<GeometryTraits_2, Event_, class Default_visitor : public Default_visitor_base<GeometryTraits_2, Event_,
Subcurve_, Allocator_, Subcurve_, Allocator_,
Visitor_> Visitor_>

View File

@ -64,7 +64,8 @@ class No_overlap_event :
No_overlap_subcurve<GeometryTraits_2, No_overlap_subcurve<GeometryTraits_2,
No_overlap_event< No_overlap_event<
GeometryTraits_2, GeometryTraits_2,
Allocator_> > > Allocator_>,
Allocator_> >
{ {
public: public:
/*! Construct default. */ /*! Construct default. */

View File

@ -60,13 +60,14 @@ namespace Surface_sweep_2 {
* curve. * curve.
* - an iterator that points to the location of the subcurve in the status line. * - an iterator that points to the location of the subcurve in the status line.
*/ */
template <typename GeometryTraits_2, typename Event_, typename Subcurve_> template <typename GeometryTraits_2, typename Event_, typename Allocator_,
typename Subcurve_>
class No_overlap_subcurve_base { class No_overlap_subcurve_base {
public: public:
typedef GeometryTraits_2 Geometry_traits_2; typedef GeometryTraits_2 Geometry_traits_2;
typedef Subcurve_ Subcurve; typedef Subcurve_ Subcurve;
typedef Event_ Event; typedef Event_ Event;
typedef CGAL_ALLOCATOR(int) Allocator; typedef Allocator_ Allocator;
private: private:
typedef Geometry_traits_2 Gt2; typedef Geometry_traits_2 Gt2;
@ -123,28 +124,35 @@ public:
* - the remaining x-monotone curve that is to the right of the current sweep * - the remaining x-monotone curve that is to the right of the current sweep
* line. * line.
* \tparam GeometryTraits_2 the geometry traits. * \tparam GeometryTraits_2 the geometry traits.
* \tparam Event_ the event type.
* \tparam Allocator_ a type of an element that is used to acquire/release
* memory for elements of the event queue and the status
* structure, and to construct/destroy the elements in that
* memory. The type must meet the requirements of Allocator.
* \tparam Subcurve_ the type of the subcurve or Default. If the default is not * \tparam Subcurve_ the type of the subcurve or Default. If the default is not
* overriden it implies that the type is * overriden it implies that the type is No_overlap_subcurve.
* No_overlap_subcurve.
*/ */
template <typename GeometryTraits_2, typename Event_, template <typename GeometryTraits_2, typename Event_,
typename Allocator_ = CGAL_ALLOCATOR(int),
typename Subcurve_ = Default> typename Subcurve_ = Default>
class No_overlap_subcurve : class No_overlap_subcurve :
public No_overlap_subcurve_base< public No_overlap_subcurve_base<
GeometryTraits_2, Event_, GeometryTraits_2, Event_, Allocator_,
typename Default::Get<Subcurve_, typename Default::Get<Subcurve_,
No_overlap_subcurve<GeometryTraits_2, Event_, No_overlap_subcurve<GeometryTraits_2, Event_,
Subcurve_> >::type> Allocator_, Subcurve_> >::type>
{ {
public: public:
typedef GeometryTraits_2 Geometry_traits_2; typedef GeometryTraits_2 Geometry_traits_2;
typedef Event_ Event; typedef Event_ Event;
typedef Allocator_ Allocator;
private: private:
typedef Geometry_traits_2 Gt2; typedef Geometry_traits_2 Gt2;
typedef No_overlap_subcurve<Gt2, Event, Subcurve_> Self; typedef No_overlap_subcurve<Gt2, Event, Allocator, Subcurve_>
Self;
typedef typename Default::Get<Subcurve_, Self>::type Subcurve; typedef typename Default::Get<Subcurve_, Self>::type Subcurve;
typedef No_overlap_subcurve_base<Gt2, Event, Subcurve> typedef No_overlap_subcurve_base<Gt2, Event, Allocator, Subcurve>
Base; Base;
public: public:
@ -191,11 +199,9 @@ public:
}; };
#ifdef CGAL_SL_VERBOSE #ifdef CGAL_SL_VERBOSE
template <typename Traits> template <typename Gt2, typename Evt, typename Allocator, typename Scv>
void No_overlap_subcurve<Traits>::Print() const void No_overlap_subcurve<Traits>::Print() const
{ { std::cout << "Curve " << this << " (" << last_curve() << ") "; }
std::cout << "Curve " << this << " (" << last_curve() << ") ";
}
#endif #endif
} // namespace Surface_sweep_2 } // namespace Surface_sweep_2