diff --git a/.github/test.sh b/.github/test.sh index cf69ebee955..59d4820ecdd 100755 --- a/.github/test.sh +++ b/.github/test.sh @@ -9,4 +9,5 @@ PLUGINS_ARRAY=(${LIST_OF_PLUGINS}); NB_OF_PLUGINS=${#PLUGINS_ARRAY[@]} DEL=$(($NB_OF_PLUGINS / 4)) cd build -make -j2 ${PLUGINS_ARRAY[@]:$(($FACTOR * $DEL)):$((($FACTOR + 1) * $DEL))} +NUM_PROCS=$(nproc) +make -j${NUM_PROCS} ${PLUGINS_ARRAY[@]:$(($FACTOR * $DEL)):$((($FACTOR + 1) * $DEL))} diff --git a/.github/workflows/build_doc.yml b/.github/workflows/build_doc.yml index d523cc2079d..9735cd3d3c8 100644 --- a/.github/workflows/build_doc.yml +++ b/.github/workflows/build_doc.yml @@ -104,8 +104,8 @@ jobs: echo "DoxygenError=No package affected." >> $GITHUB_OUTPUT exit 1 fi - cd build_doc && make -j2 doc - make -j2 doc_with_postprocessing 2>tmp.log + cd build_doc && make -j$(nproc) doc + make -j$(nproc) doc_with_postprocessing 2>tmp.log if [ -s tmp.log ]; then content=`cat ./tmp.log` delimiter="$(openssl rand -hex 8)" diff --git a/.github/workflows/reuse.yml b/.github/workflows/reuse.yml index c55ba6df40d..f76a99b18dd 100644 --- a/.github/workflows/reuse.yml +++ b/.github/workflows/reuse.yml @@ -12,24 +12,24 @@ jobs: steps: - uses: actions/checkout@v4 - name: REUSE version - uses: fsfe/reuse-action@v2 + uses: fsfe/reuse-action@v3 with: args: --version - name: REUSE lint - uses: fsfe/reuse-action@v2 + uses: fsfe/reuse-action@v3 with: args: --include-submodules lint - name: REUSE SPDX SBOM - uses: fsfe/reuse-action@v2 + uses: fsfe/reuse-action@v3 with: args: spdx - name: install dependencies - run: sudo apt-get install -y cmake + run: sudo apt-get update && sudo apt-get install -y cmake - name: Create CGAL internal release run: | mkdir -p ./release cmake -DDESTINATION=./release -DCGAL_VERSION=9.9 -P ./Scripts/developer_scripts/cgal_create_release_with_cmake.cmake - name: REUSE lint release tarball - uses: fsfe/reuse-action@v2 + uses: fsfe/reuse-action@v3 with: args: --root ./release/CGAL-9.9 --include-submodules lint diff --git a/AABB_tree/include/CGAL/AABB_tree/internal/AABB_traversal_traits.h b/AABB_tree/include/CGAL/AABB_tree/internal/AABB_traversal_traits.h index 645ce1347cb..ce9a56e15b9 100644 --- a/AABB_tree/include/CGAL/AABB_tree/internal/AABB_traversal_traits.h +++ b/AABB_tree/include/CGAL/AABB_tree/internal/AABB_traversal_traits.h @@ -73,7 +73,7 @@ public: Result; public: First_intersection_traits(const AABBTraits& traits) - : m_result(), m_traits(traits) + : m_result(std::nullopt), m_traits(traits) {} bool go_further() const { @@ -202,7 +202,7 @@ class First_primitive_traits public: First_primitive_traits(const AABBTraits& traits) : m_is_found(false) - , m_result() + , m_result(std::nullopt) , m_traits(traits) {} bool go_further() const { return !m_is_found; } diff --git a/Advancing_front_surface_reconstruction/package_info/Advancing_front_surface_reconstruction/dependencies b/Advancing_front_surface_reconstruction/package_info/Advancing_front_surface_reconstruction/dependencies index fffe4db3c74..d885997679a 100644 --- a/Advancing_front_surface_reconstruction/package_info/Advancing_front_surface_reconstruction/dependencies +++ b/Advancing_front_surface_reconstruction/package_info/Advancing_front_surface_reconstruction/dependencies @@ -2,6 +2,7 @@ Advancing_front_surface_reconstruction Algebraic_foundations Arithmetic_kernel BGL +CGAL_Core Cartesian_kernel Circulator Distance_2 diff --git a/Algebraic_foundations/include/CGAL/Rational_traits.h b/Algebraic_foundations/include/CGAL/Rational_traits.h index a2ac5f1016c..7fcf808e43b 100644 --- a/Algebraic_foundations/include/CGAL/Rational_traits.h +++ b/Algebraic_foundations/include/CGAL/Rational_traits.h @@ -53,7 +53,7 @@ struct Rational_traits_base { private: typedef Fraction_traits FT; - typedef typename FT::Decompose Decomose; + typedef typename FT::Decompose Decompose; typedef typename FT::Compose Compose; public: @@ -61,13 +61,13 @@ public: RT numerator (const Rational& r) const { RT num,den; - Decomose()(r,num,den); + Decompose()(r,num,den); return num; } RT denominator (const Rational& r) const { RT num,den; - Decomose()(r,num,den); + Decompose()(r,num,den); return den; } diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_E08_tree.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_E08_tree.h index bf607e75f15..4cba93085a4 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_E08_tree.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_E08_tree.h @@ -303,7 +303,7 @@ public: Integer alpha_num = Integer(1), int log_denom = 1 ) : alpha_num_(alpha_num), beta_num_((Integer(1) << log_denom) - alpha_num), - half_((log_denom > 0) ? (Integer(1) << log_denom-1) : 0), + half_((log_denom > 0) ? Integer(Integer(1) << log_denom-1) : 0), log_denom_(log_denom) { CGAL_precondition(log_denom_ >= 0); diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree.h index cba01cdc911..a76e1c6ceca 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree.h @@ -206,7 +206,7 @@ polynomial_power_to_bernstein_approx( std::vector f(n+1); polynomial_affine_transform_approx_log_denom( first, beyond, f.begin(), - upper_num - lower_num, lower_num, log_denom, + Integer(upper_num - lower_num), lower_num, log_denom, p+q, approx, log, logl ); diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree_traits.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree_traits.h index 155cfbffc68..8ed8fa5ae0c 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree_traits.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Bitstream_descartes_rndl_tree_traits.h @@ -27,31 +27,10 @@ #include -#if CGAL_USE_CORE -namespace CORE { class BigInt; } -#endif - namespace CGAL { namespace internal { -#if CGAL_USE_CORE -// bugfix for CORE by Michael Kerber -// why is there a specialized function for CORE? -inline CORE::BigInt shift_integer_by(CORE::BigInt x, long shift){ - if( shift > 0 ){ - while(shift>63) { - x = (x >> 63); - shift-=63; - } - x = (x >> shift); - }else{ - // add 0 bits - x = (x << -shift); - } - return x; -} -#endif template Shiftable shift_integer_by(Shiftable x, long shift){ diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Real_embeddable_extension.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Real_embeddable_extension.h index 31e43a0f2dd..9f06bc83383 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Real_embeddable_extension.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Real_embeddable_extension.h @@ -327,7 +327,7 @@ public: long operator()( CORE::BigFloat x ) const { CGAL_precondition(!CGAL::zero_in(x)); x = CGAL::abs(x); - return CORE::floorLg(x.m()-x.err())+x.exp()*CORE::CHUNK_BIT; + return CORE::floorLg(CORE::BigInt(x.m()-x.err()))+x.exp()*CORE::CHUNK_BIT; } }; @@ -337,7 +337,7 @@ public: // (already commented out in EXACUS)... // NiX_precond(!(NiX::in_zero(x) && NiX::singleton(x))); x = CGAL::abs(x); - return CORE::ceilLg(x.m()+x.err())+x.exp()*CORE::CHUNK_BIT; + return CORE::ceilLg(CORE::BigInt(x.m()+x.err()))+x.exp()*CORE::CHUNK_BIT; } }; diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/bound_between_1.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/bound_between_1.h index ade0be4a1a5..aaf9185350f 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/bound_between_1.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/bound_between_1.h @@ -220,7 +220,7 @@ simple_bound_between(const Algebraic_real& a, final_mantissa = final_mantissa << 1; final_mantissa++; y_log--; - x_m = x_m==0 ? 0 : x_m & ((Integer(1) << x_log) - 1); //x_m - CGAL::ipower(Integer(2),x_log); + x_m = x_m==0 ? 0 : Integer(x_m & ((Integer(1) << x_log) - 1)); //x_m - CGAL::ipower(Integer(2),x_log); x_log = x_m==0 ? -1 : CGAL::internal::floor_log2_abs(x_m); } final_mantissa = final_mantissa << 1; diff --git a/Algebraic_kernel_for_circles/package_info/Algebraic_kernel_for_circles/dependencies b/Algebraic_kernel_for_circles/package_info/Algebraic_kernel_for_circles/dependencies index 8d3b893eeb2..2345a7f06d4 100644 --- a/Algebraic_kernel_for_circles/package_info/Algebraic_kernel_for_circles/dependencies +++ b/Algebraic_kernel_for_circles/package_info/Algebraic_kernel_for_circles/dependencies @@ -1,6 +1,7 @@ Algebraic_foundations Algebraic_kernel_for_circles Arithmetic_kernel +CGAL_Core Filtered_kernel Installation Interval_support diff --git a/Algebraic_kernel_for_spheres/package_info/Algebraic_kernel_for_spheres/dependencies b/Algebraic_kernel_for_spheres/package_info/Algebraic_kernel_for_spheres/dependencies index bfe13a407f4..e9b3846ab79 100644 --- a/Algebraic_kernel_for_spheres/package_info/Algebraic_kernel_for_spheres/dependencies +++ b/Algebraic_kernel_for_spheres/package_info/Algebraic_kernel_for_spheres/dependencies @@ -1,6 +1,7 @@ Algebraic_foundations Algebraic_kernel_for_spheres Arithmetic_kernel +CGAL_Core Filtered_kernel Installation Interval_support diff --git a/Alpha_shapes_2/package_info/Alpha_shapes_2/dependencies b/Alpha_shapes_2/package_info/Alpha_shapes_2/dependencies index 6c159737638..d9c0f7d94a8 100644 --- a/Alpha_shapes_2/package_info/Alpha_shapes_2/dependencies +++ b/Alpha_shapes_2/package_info/Alpha_shapes_2/dependencies @@ -1,6 +1,7 @@ Algebraic_foundations Alpha_shapes_2 Arithmetic_kernel +CGAL_Core Cartesian_kernel Hash_map Homogeneous_kernel diff --git a/Alpha_shapes_3/package_info/Alpha_shapes_3/dependencies b/Alpha_shapes_3/package_info/Alpha_shapes_3/dependencies index f0dc76c90d9..516a70a2bde 100644 --- a/Alpha_shapes_3/package_info/Alpha_shapes_3/dependencies +++ b/Alpha_shapes_3/package_info/Alpha_shapes_3/dependencies @@ -1,6 +1,7 @@ Algebraic_foundations Alpha_shapes_3 Arithmetic_kernel +CGAL_Core Cartesian_kernel Circulator Filtered_kernel diff --git a/Alpha_wrap_3/package_info/Alpha_wrap_3/dependencies b/Alpha_wrap_3/package_info/Alpha_wrap_3/dependencies index 7645e1ba53c..a3f60578532 100644 --- a/Alpha_wrap_3/package_info/Alpha_wrap_3/dependencies +++ b/Alpha_wrap_3/package_info/Alpha_wrap_3/dependencies @@ -4,6 +4,7 @@ Alpha_wrap_3 Arithmetic_kernel BGL Box_intersection_d +CGAL_Core Cartesian_kernel Circulator Distance_2 diff --git a/Arithmetic_kernel/include/CGAL/BOOST_MP_arithmetic_kernel.h b/Arithmetic_kernel/include/CGAL/BOOST_MP_arithmetic_kernel.h index b1c1b1532e8..1ac38a24234 100644 --- a/Arithmetic_kernel/include/CGAL/BOOST_MP_arithmetic_kernel.h +++ b/Arithmetic_kernel/include/CGAL/BOOST_MP_arithmetic_kernel.h @@ -19,6 +19,10 @@ #ifdef CGAL_USE_BOOST_MP +#ifdef CGAL_USE_CORE +#include +#endif + //Currently already included in boost_mp.h //#include //#ifdef CGAL_USE_GMP @@ -26,20 +30,29 @@ //#endif // FIXME: the could be several kernels based on Boost.Multiprecision. - namespace CGAL { /** \ingroup CGAL_Arithmetic_kernel * \brief The Boost.Multiprecision set of exact number types */ + +#if !defined(CGAL_USE_CORE) || defined(CGAL_CORE_USE_GMP_BACKEND) struct BOOST_cpp_arithmetic_kernel : internal::Arithmetic_kernel_base { typedef boost::multiprecision::cpp_int Integer; typedef boost::multiprecision::cpp_rational Rational; }; +#else +typedef CORE_arithmetic_kernel BOOST_cpp_arithmetic_kernel; +#endif + #ifdef CGAL_USE_GMP +#if !defined(CGAL_USE_CORE) || !defined(CGAL_CORE_USE_GMP_BACKEND) struct BOOST_gmp_arithmetic_kernel : internal::Arithmetic_kernel_base { typedef boost::multiprecision::mpz_int Integer; typedef boost::multiprecision::mpq_rational Rational; }; +#else +typedef CORE_arithmetic_kernel BOOST_gmp_arithmetic_kernel; +#endif #endif template diff --git a/Arithmetic_kernel/include/CGAL/CORE_arithmetic_kernel.h b/Arithmetic_kernel/include/CGAL/CORE_arithmetic_kernel.h index c619f418de0..67586065fa5 100644 --- a/Arithmetic_kernel/include/CGAL/CORE_arithmetic_kernel.h +++ b/Arithmetic_kernel/include/CGAL/CORE_arithmetic_kernel.h @@ -55,14 +55,6 @@ public: }; -template <> -struct Get_arithmetic_kernel{ - typedef CORE_arithmetic_kernel Arithmetic_kernel; -}; -template <> -struct Get_arithmetic_kernel{ - typedef CORE_arithmetic_kernel Arithmetic_kernel; -}; template <> struct Get_arithmetic_kernel{ typedef CORE_arithmetic_kernel Arithmetic_kernel; @@ -74,6 +66,8 @@ struct Get_arithmetic_kernel{ } //namespace CGAL +#include + #endif // CGAL_USE_CORE #endif // CGAL_CORE_ARITHMETIC_KERNEL_H diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementTypes.h b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementTypes.h index 417ffbd3fd0..ec9e20b6c98 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementTypes.h +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementTypes.h @@ -15,7 +15,6 @@ #include #include -#include #include #include #include diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/IntersectCurves.cpp b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/IntersectCurves.cpp index 5e98113dabc..2a97cf19193 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/IntersectCurves.cpp +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/IntersectCurves.cpp @@ -11,7 +11,7 @@ #include "IntersectCurves.h" #include "ArrangementTypes.h" -#include +#include template diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/Utils.cpp b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/Utils.cpp index df21f6699ab..b6bd521f622 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/Utils.cpp +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/Utils/Utils.cpp @@ -202,7 +202,7 @@ operator()(const Point_2& p, const X_monotone_curve_2& curve) const { auto points = painterOstream.getPointsList(curve); QPoint p_viewport = - view->mapFromScene(QPointF{p.x().doubleValue(), p.y().doubleValue()}); + view->mapFromScene(QPointF{CGAL::to_double(p.x()), CGAL::to_double(p.y())}); double min_dist = (std::numeric_limits::max)(); for (auto& vec : points) { diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt index 505576d9024..5b4b9ed9051 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt @@ -69,10 +69,10 @@ class Arrangement_2 { ... }; An instance of this template represents an arrangement embedded in the plane. When the template is instantiated, the `GeometryTraits` -parameter must be substituted with a type that defines a set of +parameter must be substituted by a type that defines a set of geometric-object types, such as point and curve, and a set of operations on objects of these types (see Section \ref -aos_sec-geom_traits); the `Dcel` parameter must be substituted with a +aos_sec-geom_traits); the `Dcel` parameter must be substituted by a type that represents a doubly-connected edge list (\dcel) data structure. It defines types of topological objects, such as vertices, edges, and faces, and the operations required to maintain the @@ -91,7 +91,7 @@ An instance of this template represents a two-dimensional arrangement embedded in a surface in three dimensional space. When the template is instantiated, the `GeometryTraits` parameter must be substituted as described above; the `TopologyTraits` parameter must be substituted -with a type that deals with the topology of the surface (see Section +by a type that deals with the topology of the surface (see Section \ref aos_sec-topol_traits). In particular, it maintains a representation of the arrangement graph embedded in the surface using a doubly-connected edge list (\dcel) data-structure suitable for @@ -390,7 +390,7 @@ the `Arrangement_2` class template; their description follows.
    -
  • The `Traits` template-parameter should be instantiated with a +
  • The `Traits` template-parameter should be substituted by a model of the `ArrangementBasicTraits_2` concept and optionally additional geometry traits concepts. A model of the `ArrangementBasicTraits_2` concept defines the types of @@ -415,14 +415,15 @@ the `Arrangement_2` class template; their description follows. rational functions. We exemplify the usage of these traits classes in Section \ref aos_sec-geom_traits. -
  • The `Dcel` template-parameter should be instantiated with a class +
  • The `Dcel` template-parameter should be substituted by a class that models the `ArrangementDcel` concept, which is used to represent the topological layout of the arrangement. This parameter is - substituted with `Arr_default_dcel` by default, and + substituted by `Arr_default_dcel` by default, and we use this default value in this and in the following three - sections. However, in many applications it is necessary to - extend the \dcel features. This is done by substituting the - `Dcel` parameter with a different type; see Section \ref arr_ssecex_dcel + sections. However, in many applications it is necessary to extend the + \dcel features. This is done by substituting the `Dcel` parameter with + a different type (typically, a different instance of the + `Arr_dcel<>` class template); see Section \ref arr_ssecex_dcel for further explanations and examples.
@@ -1001,7 +1002,7 @@ segments common to all examples that do not construct new geometric objects. They are kept in the header file `arr_inexact_construction_segments.h`. In these examples the `Traits` parameter of the `Arrangement_2` class template is -substituted with an instance of the +substituted by an instance of the `Arr_non_caching_segment_traits_2` class template. The `Arr_non_caching_segment_traits_2` class template is instantiated with the predefined kernel that evaluates predicates in an exact manner, @@ -1438,7 +1439,7 @@ vary according to the user choice.} for answering queries: The landmark strategy requires that the type of the attached arrangement be an instance of the `Arrangement_2` class - template, where the `Traits` parameter is substituted with a + template, where the `Traits` parameter is substituted by a geometry-traits class that models the `ArrangementLandmarkTraits_2` concept, which refines the basic `ArrangementBasicTraits_2` concept; see Section \ref aos_sssec-tr_landmarks_concept for details. Most @@ -1742,7 +1743,7 @@ query results, and insert \f$c\f$ at its proper location.\cgalFootnote{The \cgalFootnoteCode{CGAL::insert_non_intersecting_curve<>()} function template, as all other functions reviewed in this section, is parameterized by an arrangement type and a point-location type (The -latter must be substituted with a model of the +latter must be substituted by a model of the `ArrangementPointLocation_2` concept).} The insertion operation thus hardly requires any geometric operations on top of the ones needed to answer the point-location queries. Moreover, it is sufficient that the @@ -1846,7 +1847,7 @@ condition. Consider the call \link CGAL::insert<>() `insert(arr, c, pl)`\endlink, where \f$c\f$ is not necessarily \f$x\f$-monotone. In this case the type of `arr` must be an instance of the `Arrangement_2` class template, where the `Traits` -template parameter is substituted with a traits class that models the +template parameter is substituted by a traits class that models the concept `ArrangementTraits_2`, which refines the `ArrangementXMonotoneTraits_2` concept. It has to define an additional \link ArrangementTraits_2::Curve_2 `Curve_2`\endlink type, which may @@ -2267,7 +2268,7 @@ accepts the name of an input file that contains the plain-text description of the geometric objects and an output iterator for storing the newly constructed objects. When the function is instantiated, the first template parameter, namely `Type`, must be -substituted with the type of objects to read. It is assumed that an +substituted by the type of objects to read. It is assumed that an extractor operator (`>>`) that extracts objects of the given type from the input stream is available. The listing of the function template, which is defined in the file `read_objects.h`, is omitted here @@ -2704,7 +2705,7 @@ All the free functions that operate on arrangements of bounded curves of unbounded curves. For example, consider a container of linear curves that has to be inserted into an arrangement object, the type of which is an instance of the `Arrangement_2` class -template, where the `Traits` parameter is substituted with the traits +template, where the `Traits` parameter is substituted by the traits class that handles linear curves; see Section \ref arr_sssectr_linear. You can do it incrementally; namely, insert the curves one by one as follows: @@ -3485,7 +3486,7 @@ point-location strategy. The type of an arrangement associated with the landmark point-location strategy (see Section \ref arr_ssecpl) must be an instance of the `Arrangement_on_surface_2` class template, -where the `GeomTraits` parameter is substituted with a model of the +where the `GeomTraits` parameter is substituted by a model of the concept `ArrangementLandmarkTraits_2`. (Naturally, it can also model either the `ArrangementXMonotoneTraits_2` concept or the `ArrangementTraits_2` concept.) The `ArrangementLandmarkTraits_2` @@ -4541,7 +4542,7 @@ PkgBooleanSetOperations2Ref. Note that it is not a model of the computations with square root numbers, which makes it attractive for arrangements induced by line segments, circular arcs, and whole circles. When the traits class-template is instantiated, the `Kernel` -template parameter must be substituted with a geometric kernel that +template parameter must be substituted by a geometric kernel that models the `Kernel` concept. Always plug in a kernel that uses a rational number type, such as `Exact_predicates_exact_constructions_kernel`. Observe that the nested @@ -4722,20 +4723,20 @@ follows: