From ba02f457b5efc1c3c7b2e6f08f0439ea6b79b30e Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Thu, 21 Aug 2008 11:38:35 +0000 Subject: [PATCH] added dcel template parameter --- Envelope_3/include/CGAL/envelope_3.h | 144 ++++++++++++++++++++++----- 1 file changed, 120 insertions(+), 24 deletions(-) diff --git a/Envelope_3/include/CGAL/envelope_3.h b/Envelope_3/include/CGAL/envelope_3.h index 7ee0393efa7..f7cff94cb3c 100644 --- a/Envelope_3/include/CGAL/envelope_3.h +++ b/Envelope_3/include/CGAL/envelope_3.h @@ -32,19 +32,29 @@ CGAL_BEGIN_NAMESPACE * Representation of an envelope diagram (a minimization diagram or a * maximization diagram). */ -template class Envelope_diagram_2 : - public Arrangement_2 > +template +#endif + class T_Dcel = Envelope_pm_dcel> +class Envelope_diagram_2 : + public Arrangement_2 +#else + typename T_Dcel::template Dcel +#endif + > { public: - typedef Traits_ Traits_3; + typedef T_Traits Traits_3; typedef typename Traits_3::Xy_monotone_surface_3 Xy_monotone_surface_3; protected: - typedef Envelope_pm_dcel Env_dcel; - typedef Envelope_diagram_2 Self; + typedef T_Dcel Env_dcel; + typedef Envelope_diagram_2 Self; friend class Arr_accessor; public: @@ -70,18 +80,60 @@ public: * \param min_diag Output: The minimization diagram. * \pre The value-type of InputIterator is Traits::Surface_3. */ -template +template +#endif + class T_Dcel> void lower_envelope_3 (InputIterator begin, InputIterator end, - Envelope_diagram_2& min_diagram) + Envelope_diagram_2 & min_diagram) { - typedef Traits Traits_3; - typedef typename Envelope_diagram_2::Base Base_arr_2; - typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + typedef T_Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 Envelope_algorithm; Envelope_algorithm env_alg (min_diagram.traits(), ENVELOPE_LOWER); env_alg.construct_lu_envelope (begin, end, min_diagram); +} - return; +/*! + * Construct the lower envelope of a given set of surfaces. + * \param begin An iterator for the first surface. + * \param end A past-the-end iterator for the surfaces in the range. + * \param min_diag Output: The minimization diagram. + * \pre The value-type of InputIterator is Traits::Surface_3. + */ +template +void lower_envelope_3 (InputIterator begin, InputIterator end, + Envelope_diagram_2 & min_diagram) +{ + typedef T_Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + Envelope_algorithm env_alg (min_diagram.traits(), ENVELOPE_LOWER); + env_alg.construct_lu_envelope (begin, end, min_diagram); +} + +/*! + * Construct the upper envelope of a given set of surfaces. + * \param begin An iterator for the first surface. + * \param end A past-the-end iterator for the surfaces in the range. + * \param max_diag Output: The maximization diagram. + * \pre The value-type of InputIterator is Traits::Surface_3. + */ +template +#endif + class T_Dcel> +void upper_envelope_3 (InputIterator begin, InputIterator end, + Envelope_diagram_2& max_diagram) +{ + typedef Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + + Envelope_algorithm env_alg (max_diagram.traits(), ENVELOPE_UPPER); + env_alg.construct_lu_envelope (begin, end, max_diagram); } /*! @@ -95,15 +147,36 @@ template void upper_envelope_3 (InputIterator begin, InputIterator end, Envelope_diagram_2& max_diagram) { - typedef Traits Traits_3; - typedef typename Envelope_diagram_2::Base Base_arr_2; - typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + typedef Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 + Envelope_algorithm; Envelope_algorithm env_alg (max_diagram.traits(), ENVELOPE_UPPER); env_alg.construct_lu_envelope (begin, end, max_diagram); +} - return; +/*! + * Construct the lower envelope of a given set of xy_monotone surfaces. + * \param begin An iterator for the first xy-monotone surface. + * \param end A past-the-end iterator for the xy_monotone surfaces in the range. + * \param min_diag Output: The minimization diagram. + * \pre The value-type of InputIterator is Traits::Surface_3. + */ +template +#endif + class T_Dcel> +void +lower_envelope_xy_monotone_3 (InputIterator begin, InputIterator end, + Envelope_diagram_2& min_diagram) +{ + typedef Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + Envelope_algorithm env_alg (min_diagram.traits(), ENVELOPE_LOWER); + env_alg.construct_envelope_xy_monotone (begin, end, min_diagram); } /*! @@ -117,12 +190,35 @@ template void lower_envelope_xy_monotone_3 (InputIterator begin, InputIterator end, Envelope_diagram_2& min_diagram) { - typedef Traits Traits_3; - typedef typename Envelope_diagram_2::Base Base_arr_2; - typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + typedef Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 Envelope_algorithm; Envelope_algorithm env_alg (min_diagram.traits(), ENVELOPE_LOWER); env_alg.construct_envelope_xy_monotone (begin, end, min_diagram); +} + +/*! + * Construct the upper envelope of a given set of xy_monotone surfaces. + * \param begin An iterator for the first xy_monotone surface. + * \param end A past-the-end iterator for the xy_monotone surfaces in the range. + * \param max_diag Output: The maximization diagram. + * \pre The value-type of InputIterator is Traits::Surface_3. + */ +template +#endif + class T_Dcel> +void +upper_envelope_xy_monotone_3 (InputIterator begin, InputIterator end, + Envelope_diagram_2& max_diagram) +{ + typedef Traits Traits_3; + typedef typename Envelope_diagram_2::Base Base_arr_2; + typedef Envelope_divide_and_conquer_3 Envelope_algorithm; + + Envelope_algorithm env_alg (max_diagram.traits(), ENVELOPE_UPPER); + env_alg.construct_envelope_xy_monotone (begin, end, max_diagram); return; }