-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Aos 2 metadata traits decorators efif #8592
base: master
Are you sure you want to change the base?
Changes from 12 commits
9055efd
e36db6e
470909b
8b6fde4
b80737e
cbdadd4
8644a3d
2b5b7ce
c9f343e
5a672aa
67ab177
bb16c9b
661b718
982ca62
f9213fa
7819ffa
85667b5
462532e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,145 @@ | ||||||
// Copyright (c) 2005,2007,2009,2010,2011 Tel-Aviv University (Israel). | ||||||
// All rights reserved. | ||||||
// | ||||||
// This file is part of CGAL (www.cgal.org). | ||||||
// | ||||||
// $URL$ | ||||||
// $Id$ | ||||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial | ||||||
// | ||||||
// Author(s): Efi Fogel <[email protected]> | ||||||
// Eric Berberich <[email protected]> | ||||||
|
||||||
namespace CGAL { | ||||||
|
||||||
/*! \ingroup PkgArrangementOnSurface2TraitsClasses | ||||||
* | ||||||
* A metadata traits-class decorator for the arrangement package. It counts the | ||||||
* number of invocations of traits-class functors. It is parameterized with | ||||||
* another traits class and inherits from it. For each traits method it | ||||||
* maintains a counter that counts the number of invocations into the method. | ||||||
* | ||||||
* It models all the concepts that the original traits models. | ||||||
*/ | ||||||
|
||||||
template <typename BaseTraits> | ||||||
class Arr_counting_traits_2 : public BaseTraits { | ||||||
public: | ||||||
enum Operation_id { | ||||||
COMPARE_X_2_OP = 0, | ||||||
COMPARE_XY_2_OP, | ||||||
CONSTRUCT_MIN_VERTEX_2_OP, | ||||||
CONSTRUCT_MAX_VERTEX_2_OP, | ||||||
IS_VERTICAL_2_OP, | ||||||
COMPARE_Y_AT_X_2_OP, | ||||||
EQUAL_2_POINTS_OP, | ||||||
EQUAL_2_CURVES_OP, | ||||||
COMPARE_Y_AT_X_LEFT_2_OP, | ||||||
COMPARE_Y_AT_X_RIGHT_2_OP, | ||||||
MAKE_X_MONOTONE_2_OP, | ||||||
SPLIT_2_OP, | ||||||
INTERSECT_2_OP, | ||||||
ARE_MERGEABLE_2_OP, | ||||||
MERGE_2_OP, | ||||||
CONSTRUCT_2_OPPOSITE_2_OP, | ||||||
COMPARE_ENDPOINTS_XY_2_OP, | ||||||
APPROXIMATE_2_COORD_OP, | ||||||
APPROXIMATE_2_POINT_OP, | ||||||
APPROXIMATE_2_CURVE_OP, | ||||||
PARAMETER_SPACE_IN_X_2_CURVE_END_OP, | ||||||
PARAMETER_SPACE_IN_X_2_POINT_OP, | ||||||
IS_ON_X_IDENTIFICATION_POINT_2_OP, | ||||||
IS_ON_X_IDENTIFICATION_CURVE_2_OP, | ||||||
COMPARE_Y_ON_BOUNDARY_2_OP, | ||||||
COMPARE_Y_NEAR_BOUNDARY_2_OP, | ||||||
PARAMETER_SPACE_IN_Y_2_CURVE_END_OP, | ||||||
PARAMETER_SPACE_IN_Y_2_POINT_OP, | ||||||
IS_ON_Y_IDENTIFICATION_2_POINT_OP, | ||||||
IS_ON_Y_IDENTIFICATION_2_CURVE_OP, | ||||||
COMPARE_X_ON_BOUNDARY_2_POINTS_OP, | ||||||
COMPARE_X_ON_BOUNDARY_2_POINT_CURVE_END_OP, | ||||||
COMPARE_X_ON_BOUNDARY_2_CURVE_ENDS_OP, | ||||||
COMPARE_X_NEAR_BOUNDARY_2_OP, | ||||||
NUMBER_OF_OPERATIONS | ||||||
}; | ||||||
|
||||||
/// \name Creation | ||||||
/// @{ | ||||||
|
||||||
/*! Construct default */ | ||||||
template <typename ... Args> | ||||||
Arr_counting_traits_2(Args ... args) : Base(std::forward<Args>(args)...) {} | ||||||
|
||||||
/*! Disable copy constructor. */ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
Arr_counting_traits_2(const Arr_counting_traits_2&) = delete; | ||||||
|
||||||
/// @} | ||||||
|
||||||
/*! Obtain the counter of the given operation */ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
std::size_t count(Operation_id id) const; | ||||||
|
||||||
/*! Print the counter associated with an operation. */ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
template <typename OutStream> | ||||||
OutStream& print(OutStream& os, Operation_id id) const; | ||||||
|
||||||
/// \name Types and functors inherited from the base | ||||||
/// @{ | ||||||
|
||||||
using Has_left_category = typename Base::Has_left_category; | ||||||
using Has_merge_category = typename Base::Has_merge_category; | ||||||
using Has_do_intersect_category = typename Base::Has_do_intersect_category; | ||||||
|
||||||
using Left_side_category = | ||||||
typename internal::Arr_complete_left_side_category<Base>::Category; | ||||||
using Bottom_side_category = | ||||||
typename internal::Arr_complete_bottom_side_category<Base>::Category; | ||||||
using Top_side_category = | ||||||
typename internal::Arr_complete_top_side_category<Base>::Category; | ||||||
using Right_side_category = | ||||||
typename internal::Arr_complete_right_side_category<Base>::Category; | ||||||
|
||||||
using Point_2 = typename Base::Point_2; | ||||||
using X_monotone_curve_2 = typename Base::X_monotone_curve_2; | ||||||
using Curve_2 = typename Base::Curve_2; | ||||||
|
||||||
/// @} | ||||||
|
||||||
/// \name Obtain the appropriate functor | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
/// @{ | ||||||
|
||||||
Compare_x_2 compare_x_2_object() const; | ||||||
Compare_xy_2 compare_xy_2_object() const; | ||||||
Construct_min_vertex_2 construct_min_vertex_2_object() const; | ||||||
Construct_max_vertex_2 construct_max_vertex_2_object() const; | ||||||
Is_vertical_2 is_vertical_2_object() const; | ||||||
Compare_y_at_x_2 compare_y_at_x_2_object() const; | ||||||
Equal_2 equal_2_object() const; | ||||||
Compare_y_at_x_left_2 compare_y_at_x_left_2_object() const; | ||||||
Compare_y_at_x_right_2 compare_y_at_x_right_2_object() const; | ||||||
Make_x_monotone_2 make_x_monotone_2_object() const; | ||||||
Split_2 split_2_object() const; | ||||||
Intersect_2 intersect_2_object() const; | ||||||
Are_mergeable_2 are_mergeable_2_object() const; | ||||||
Merge_2 merge_2_object() const; | ||||||
Construct_opposite_2 construct_opposite_2_object() const; | ||||||
Compare_endpoints_xy_2 compare_endpoints_xy_2_object() const; | ||||||
Approximate_2 approximate_2_object() const; | ||||||
Parameter_space_in_x_2 parameter_space_in_x_2_object() const; | ||||||
Is_on_x_identification_2 is_on_x_identification_2_object() const; | ||||||
Compare_y_on_boundary_2 compare_y_on_boundary_2_object() const; | ||||||
Compare_y_near_boundary_2 compare_y_near_boundary_2_object() const; | ||||||
Parameter_space_in_y_2 parameter_space_in_y_2_object() const; | ||||||
Is_on_y_identification_2 is_on_y_identification_2_object() const; | ||||||
Compare_x_on_boundary_2 compare_x_on_boundary_2_object() const; | ||||||
Compare_x_near_boundary_2 compare_x_near_boundary_2_object() const; | ||||||
|
||||||
/// @} | ||||||
|
||||||
/*! Clean all operation counters */ | ||||||
void clear_counters(); | ||||||
}; | ||||||
|
||||||
template <typename OutStream, class BaseTraits> | ||||||
inline OutStream& operator<<(OutStream& os, | ||||||
const Arr_counting_traits_2<BaseTraits>& traits); | ||||||
} //namespace CGAL |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,145 @@ | ||||||
// Copyright (c) 2007,2009,2010,2011 Tel-Aviv University (Israel). | ||||||
// All rights reserved. | ||||||
// | ||||||
// This file is part of CGAL (www.cgal.org). | ||||||
// | ||||||
// $URL$ | ||||||
// $Id$ | ||||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial | ||||||
// | ||||||
// Author(s): Efi Fogel <[email protected]> | ||||||
|
||||||
namespace CGAL { | ||||||
|
||||||
/*! \ingroup PkgArrangementOnSurface2TraitsClasses | ||||||
* | ||||||
* A metadata traits-class decorator for the arrangement package. It traces the | ||||||
* invocations of traits-class functors. It is parameterized with another traits | ||||||
* class and inherits from it. For each traits method it prints out its input | ||||||
* parameters and its output result | ||||||
* | ||||||
* It models all the concepts that the original traits models. | ||||||
*/ | ||||||
template <typename BaseTraits> | ||||||
class Arr_tracing_traits_2 : public BaseTraits { | ||||||
public: | ||||||
enum Operation_id { | ||||||
COMPARE_X_2_OP = 0, | ||||||
COMPARE_XY_2_OP, | ||||||
CONSTRUCT_MIN_VERTEX_2_OP, | ||||||
CONSTRUCT_MAX_VERTEX_2_OP, | ||||||
IS_VERTICAL_2_OP, | ||||||
COMPARE_Y_AT_X_2_OP, | ||||||
EQUAL_POINTS_2_OP, | ||||||
EQUAL_CURVES_2_OP, | ||||||
COMPARE_Y_AT_X_LEFT_2_OP, | ||||||
COMPARE_Y_AT_X_RIGHT_2_OP, | ||||||
MAKE_X_MONOTONE_2_OP, | ||||||
SPLIT_2_OP, | ||||||
INTERSECT_2_OP, | ||||||
ARE_MERGEABLE_2_OP, | ||||||
MERGE_2_OP, | ||||||
CONSTRUCT_2_OPPOSITE_2_OP, | ||||||
COMPARE_ENDPOINTS_XY_2_OP, | ||||||
APPROXIMATE_2_OP, | ||||||
PARAMETER_SPACE_IN_X_2_OP, | ||||||
IS_ON_X_IDENTIFICATION_2_OP, | ||||||
COMPARE_Y_ON_BOUNDARY_2_OP, | ||||||
COMPARE_Y_NEAR_BOUNDARY_2_OP, | ||||||
PARAMETER_SPACE_IN_Y_2_OP, | ||||||
IS_ON_Y_IDENTIFICATION_2_OP, | ||||||
COMPARE_X_ON_BOUNDARY_2_OP, | ||||||
COMPARE_X_NEAR_BOUNDARY_2_OP, | ||||||
NUMBER_OF_OPERATIONS | ||||||
}; | ||||||
|
||||||
public: | ||||||
/// \name Creation | ||||||
/// @{ | ||||||
|
||||||
/*! Construct default */ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
template<typename ... Args> | ||||||
Arr_tracing_traits_2(Args ... args) : Base(std::forward<Args>(args)...) {} | ||||||
|
||||||
/*! Disable copy constructor. */ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
Arr_tracing_traits_2(const Arr_tracing_traits_2&) = delete; | ||||||
|
||||||
/// @} | ||||||
|
||||||
/*! Enable the trace of a traits operation | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
* \param id the operation identifier | ||||||
*/ | ||||||
void enable_trace(Operation_id id); | ||||||
|
||||||
/*! Enable the trace of all traits operations | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
*/ | ||||||
void enable_all_traces(); | ||||||
|
||||||
/*! Disable the trace of a traits operation | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
* \param id the operation identifier | ||||||
*/ | ||||||
void disable_trace(Operation_id id); | ||||||
|
||||||
/*! Disable the trace of all traits operations | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
*/ | ||||||
void disable_all_traces(); | ||||||
|
||||||
/// \name Types and functors inherited from the base | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
/// @{ | ||||||
|
||||||
using Has_left_category = typename Base::Has_left_category; | ||||||
using Has_merge_category = typename Base::Has_merge_category; | ||||||
using Has_do_intersect_category = typename Base::Has_do_intersect_category; | ||||||
|
||||||
using Left_side_category = | ||||||
typename internal::Arr_complete_left_side_category< Base >::Category; | ||||||
using Bottom_side_category = | ||||||
typename internal::Arr_complete_bottom_side_category< Base >::Category; | ||||||
using Top_side_category = | ||||||
typename internal::Arr_complete_top_side_category< Base >::Category; | ||||||
using Right_side_category = | ||||||
typename internal::Arr_complete_right_side_category< Base >::Category; | ||||||
|
||||||
using Point_2 = typename Base::Point_2; | ||||||
using X_monotone_curve_2 = typename Base::X_monotone_curve_2; | ||||||
using Curve_2 = typename Base::Curve_2; | ||||||
using Multiplicity = typename Base::Multiplicity; | ||||||
|
||||||
/// @} | ||||||
|
||||||
/// \name Obtain the appropriate functor | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
/// @{ | ||||||
|
||||||
Compare_x_2 compare_x_2_object() const; | ||||||
Compare_xy_2 compare_xy_2_object() const; | ||||||
Construct_min_vertex_2 construct_min_vertex_2_object() const; | ||||||
Construct_max_vertex_2 construct_max_vertex_2_object() const; | ||||||
Is_vertical_2 is_vertical_2_object() const; | ||||||
Compare_y_at_x_2 compare_y_at_x_2_object() const; | ||||||
Equal_2 equal_2_object() const; | ||||||
Compare_y_at_x_left_2 compare_y_at_x_left_2_object() const; | ||||||
Compare_y_at_x_right_2 compare_y_at_x_right_2_object() const; | ||||||
Make_x_monotone_2 make_x_monotone_2_object() const; | ||||||
Split_2 split_2_object() const; | ||||||
Intersect_2 intersect_2_object() const; | ||||||
Are_mergeable_2 are_mergeable_2_object() const; | ||||||
Merge_2 merge_2_object() const; | ||||||
Construct_opposite_2 construct_opposite_2_object() const; | ||||||
Compare_endpoints_xy_2 compare_endpoints_xy_2_object() const; | ||||||
Approximate_2 approximate_2_object() const; | ||||||
Parameter_space_in_x_2 parameter_space_in_x_2_object() const; | ||||||
Is_on_x_identification_2 is_on_x_identification_2_object() const; | ||||||
Compare_y_on_boundary_2 compare_y_on_boundary_2_object() const; | ||||||
Compare_y_near_boundary_2 compare_y_near_boundary_2_object() const; | ||||||
Parameter_space_in_y_2 parameter_space_in_y_2_object() const; | ||||||
Is_on_y_identification_2 is_on_y_identification_2_object() const; | ||||||
Compare_x_on_boundary_2 compare_x_on_boundary_2_object() const; | ||||||
Compare_x_near_boundary_2 compare_x_near_boundary_2_object() const; | ||||||
|
||||||
/// @} | ||||||
}; | ||||||
|
||||||
template <typename OutputStream> | ||||||
OutputStream& operator<<(OutputStream& os, Comparison_result cr); | ||||||
|
||||||
} //namespace CGAL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.