mirror of https://github.com/CGAL/cgal
3.3 branch -> trunk
This commit is contained in:
parent
01e763217b
commit
21e20e4d42
|
|
@ -6,7 +6,7 @@
|
||||||
\ccUserChapter{2D Regularized Boolean Set-Operations}
|
\ccUserChapter{2D Regularized Boolean Set-Operations}
|
||||||
|
|
||||||
\input{Boolean_set_operations_2/PkgDescription.tex}
|
\input{Boolean_set_operations_2/PkgDescription.tex}
|
||||||
\minitoc
|
|
||||||
\begingroup
|
\begingroup
|
||||||
|
|
||||||
\label{chapter_Boolean_set_operations_2}
|
\label{chapter_Boolean_set_operations_2}
|
||||||
|
|
@ -23,6 +23,8 @@
|
||||||
\newlength{\BooleanSetOpsWidthRight}
|
\newlength{\BooleanSetOpsWidthRight}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\minitoc
|
||||||
|
|
||||||
\newcommand{\dcel}{{\sc Dcel}}
|
\newcommand{\dcel}{{\sc Dcel}}
|
||||||
|
|
||||||
\input{Boolean_set_operations_2/bso_intro.tex}
|
\input{Boolean_set_operations_2/bso_intro.tex}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
% +------------------------------------------------------------------------+
|
% +------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
\section{Introduction}
|
||||||
A variety of generators for geometric objects are provided in \cgal.
|
A variety of generators for geometric objects are provided in \cgal.
|
||||||
They are useful as synthetic test data sets, e.g.~for testing
|
They are useful as synthetic test data sets, e.g.~for testing
|
||||||
algorithms on degenerate object sets and for performance analysis.
|
algorithms on degenerate object sets and for performance analysis.
|
||||||
|
|
@ -54,7 +54,7 @@ point set of a given size where the points are drawn from a specific
|
||||||
domain and \ccc{random_polygon_2} generates a random simple polygon from
|
domain and \ccc{random_polygon_2} generates a random simple polygon from
|
||||||
points drawn from a specific domain.
|
points drawn from a specific domain.
|
||||||
|
|
||||||
\paragraph{Random Perturbations}
|
\subsection{Random Perturbations}
|
||||||
\ccIndexMainItem{random perturbations}
|
\ccIndexMainItem{random perturbations}
|
||||||
|
|
||||||
Degenerate input sets like grid points can be randomly perturbed by a
|
Degenerate input sets like grid points can be randomly perturbed by a
|
||||||
|
|
@ -63,7 +63,7 @@ challenges numerical stability of algorithms using inexact arithmetic and
|
||||||
exact predicates to compute the sign of expressions slightly off from zero.
|
exact predicates to compute the sign of expressions slightly off from zero.
|
||||||
For this the function \ccc{perturb_points_2} is provided.
|
For this the function \ccc{perturb_points_2} is provided.
|
||||||
|
|
||||||
\paragraph{Adding Degeneracies}
|
\subsection{Adding Degeneracies}
|
||||||
\ccModifierCrossRefOff
|
\ccModifierCrossRefOff
|
||||||
\ccIndexSubitem{degeneracies}{adding to input}
|
\ccIndexSubitem{degeneracies}{adding to input}
|
||||||
\ccModifierCrossRefOn
|
\ccModifierCrossRefOn
|
||||||
|
|
@ -74,7 +74,7 @@ useful for generating multiple copies of identical points.
|
||||||
The function \ccc{random_collinear_points_2()} adds collinearities to
|
The function \ccc{random_collinear_points_2()} adds collinearities to
|
||||||
a point set.
|
a point set.
|
||||||
|
|
||||||
\paragraph{Support Functions and Classes for Generators}
|
\subsection{Support Functions and Classes for Generators}
|
||||||
|
|
||||||
The function \ccc{random_selection} chooses $n$ items at random from a random
|
The function \ccc{random_selection} chooses $n$ items at random from a random
|
||||||
access iterator range which is useful to produce degenerate input data
|
access iterator range which is useful to produce degenerate input data
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,7 @@ point set).
|
||||||
\scalebox{0.5}{\includegraphics{Nef_2/complex}}
|
\scalebox{0.5}{\includegraphics{Nef_2/complex}}
|
||||||
\end{center}
|
\end{center}
|
||||||
\end{ccTexOnly}
|
\end{ccTexOnly}
|
||||||
\caption{Two Nef polyhedra in the plane. A closed halfspace on the
|
|
||||||
left and a complex polyhedron on the right. Note that the points
|
|
||||||
on the squared boundary are at infinity.}\label{nefexamples}
|
|
||||||
\begin{ccHtmlOnly}
|
\begin{ccHtmlOnly}
|
||||||
<CENTER>
|
<CENTER>
|
||||||
<IMG BORDER=0 SRC="./halfplane.gif" ALIGN=middle
|
<IMG BORDER=0 SRC="./halfplane.gif" ALIGN=middle
|
||||||
|
|
@ -50,6 +48,9 @@ ALT="a halfplane">
|
||||||
ALT="a complex polyhedron">
|
ALT="a complex polyhedron">
|
||||||
</CENTER>
|
</CENTER>
|
||||||
\end{ccHtmlOnly}
|
\end{ccHtmlOnly}
|
||||||
|
\caption{Two Nef polyhedra in the plane. A closed halfspace on the
|
||||||
|
left and a complex polyhedron on the right. Note that the points
|
||||||
|
on the squared boundary are at infinity.}\label{nefexamples}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Construction and Composition}
|
\section{Construction and Composition}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
|
|
||||||
|
\section{Introduction}
|
||||||
|
|
||||||
This chapter gives an overview of the number types supported by
|
This chapter gives an overview of the number types supported by
|
||||||
\cgal. Number types must fulfill certain syntactical and semantic
|
\cgal. Number types must fulfill certain syntactical and semantic
|
||||||
requirements, such that they can be successfully used in \cgal\ code.
|
requirements, such that they can be successfully used in \cgal\ code.
|
||||||
In general they are expected to be a model of an algebraic structure
|
In general they are expected to be a model of an algebraic structure
|
||||||
concepts and in case they model a subring of the real numbers they are
|
concepts and in case they model a subring of the real numbers they are
|
||||||
also a model of \ccc{RealEmbeddable}. For an overview of the algebraic
|
also a model of \ccc{RealEmbeddable}. For an overview of the algebraic
|
||||||
structure concepts see section~\ref{caf_ref::algebraic_structures}.
|
structure concepts see Section~\ref{caf_ref::algebraic_structures}.
|
||||||
|
|
||||||
\section{Built-in Number Types}
|
\section{Built-in Number Types}
|
||||||
|
|
||||||
|
|
@ -196,43 +198,4 @@ reflect their interoperability.
|
||||||
%also a random numbers generator \ccc{CGAL::Random}.
|
%also a random numbers generator \ccc{CGAL::Random}.
|
||||||
|
|
||||||
|
|
||||||
{\em \small
|
% \input{todo.txt}
|
||||||
TODO: move this part to chapter: kernel
|
|
||||||
|
|
||||||
\cgal\ kernel classes are parameterized by number types.
|
|
||||||
Depending on the problem and the input data that have to be handled,
|
|
||||||
one has to make a trade-off between efficiency and accuracy in
|
|
||||||
order to select an appropriate number type and kernel class.
|
|
||||||
|
|
||||||
In homogeneous representation, two number types are involved,
|
|
||||||
although only one of them appears as a template parameter in
|
|
||||||
the homogeneous kernel classes.
|
|
||||||
This type, for the sake of simplicity and readability called ring type, is
|
|
||||||
used for the representation of homogeneous coordinates and all
|
|
||||||
internal computations.
|
|
||||||
If it is assured that the second operand divides the first one, these
|
|
||||||
internal computations are basically division-free.
|
|
||||||
The ring type is a placeholder for an integer type (or an integral
|
|
||||||
domain type) rather than for elements of arbitrary rings.
|
|
||||||
The name should remind you that the division operation is not
|
|
||||||
needed for this number type.
|
|
||||||
Of course, also more general number types can be used as a ring type
|
|
||||||
in a homogeneous kernel class. In some computations, e.g.\ accessing
|
|
||||||
Cartesian coordinates, divisions cannot be avoided. In these computations a
|
|
||||||
second number type, the field type, is used. \cgal\ automatically generates
|
|
||||||
this number type as a \ccStyle{Quotient}\ccTexHtml{,
|
|
||||||
cf.\ Subsection~\ref{Quotient}}{}. For the Cartesian kernels
|
|
||||||
there is only one number type that is used for all calculations.
|
|
||||||
|
|
||||||
The kernel classes provide access to the number types
|
|
||||||
involved in the representation, although it is not expected that
|
|
||||||
such access is needed at this level, since low-level geometric
|
|
||||||
operations are wrapped in geometric primitives provided by \cgal.
|
|
||||||
This access can be useful if appropriate primitives are missing.
|
|
||||||
In a homogeneous kernel class \ccStyle{K}, ring type and field
|
|
||||||
type can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, respectively.
|
|
||||||
The number type used in Cartesian kernels is considered as
|
|
||||||
ring type or as field type depending on the context.
|
|
||||||
If can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, according
|
|
||||||
to the use of number types used in the homogeneous counterpart.
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
{\em \small
|
||||||
|
TODO: move this part to chapter: kernel
|
||||||
|
|
||||||
|
\cgal\ kernel classes are parameterized by number types.
|
||||||
|
Depending on the problem and the input data that have to be handled,
|
||||||
|
one has to make a trade-off between efficiency and accuracy in
|
||||||
|
order to select an appropriate number type and kernel class.
|
||||||
|
|
||||||
|
In homogeneous representation, two number types are involved,
|
||||||
|
although only one of them appears as a template parameter in
|
||||||
|
the homogeneous kernel classes.
|
||||||
|
This type, for the sake of simplicity and readability called ring type, is
|
||||||
|
used for the representation of homogeneous coordinates and all
|
||||||
|
internal computations.
|
||||||
|
If it is assured that the second operand divides the first one, these
|
||||||
|
internal computations are basically division-free.
|
||||||
|
The ring type is a placeholder for an integer type (or an integral
|
||||||
|
domain type) rather than for elements of arbitrary rings.
|
||||||
|
The name should remind you that the division operation is not
|
||||||
|
needed for this number type.
|
||||||
|
Of course, also more general number types can be used as a ring type
|
||||||
|
in a homogeneous kernel class. In some computations, e.g.\ accessing
|
||||||
|
Cartesian coordinates, divisions cannot be avoided. In these computations a
|
||||||
|
second number type, the field type, is used. \cgal\ automatically generates
|
||||||
|
this number type as a \ccStyle{Quotient}\ccTexHtml{,
|
||||||
|
cf.\ Subsection~\ref{Quotient}}{}. For the Cartesian kernels
|
||||||
|
there is only one number type that is used for all calculations.
|
||||||
|
|
||||||
|
The kernel classes provide access to the number types
|
||||||
|
involved in the representation, although it is not expected that
|
||||||
|
such access is needed at this level, since low-level geometric
|
||||||
|
operations are wrapped in geometric primitives provided by \cgal.
|
||||||
|
This access can be useful if appropriate primitives are missing.
|
||||||
|
In a homogeneous kernel class \ccStyle{K}, ring type and field
|
||||||
|
type can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, respectively.
|
||||||
|
The number type used in Cartesian kernels is considered as
|
||||||
|
ring type or as field type depending on the context.
|
||||||
|
If can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, according
|
||||||
|
to the use of number types used in the homogeneous counterpart.
|
||||||
|
}
|
||||||
|
|
@ -248,7 +248,7 @@ function at this optimal solution is $2^2 + 4(3-4)^2 = 8$.
|
||||||
\label{fig:QP-first_qp}}
|
\label{fig:QP-first_qp}}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\subsection{Constructing a program from data}
|
\subsection{Constructing a Program from Data}
|
||||||
Here is how this quadratic program can be solved in \cgal\
|
Here is how this quadratic program can be solved in \cgal\
|
||||||
according to the first way (letting the model take care of
|
according to the first way (letting the model take care of
|
||||||
the data). We use \ccc{int} as the input type, and
|
the data). We use \ccc{int} as the input type, and
|
||||||
|
|
@ -282,7 +282,7 @@ If \texttt{GMP} is not installed, the values are of course the same,
|
||||||
but numerator and denominator might have a common divisor that is not
|
but numerator and denominator might have a common divisor that is not
|
||||||
factored out.
|
factored out.
|
||||||
|
|
||||||
\subsection{Constructing a program from a stream}
|
\subsection{Constructing a Program from a Stream}
|
||||||
Here, the program data must be available in \ccc{MPSFormat} (the
|
Here, the program data must be available in \ccc{MPSFormat} (the
|
||||||
\ccc{MPSFormat} page shows how our running example looks like in
|
\ccc{MPSFormat} page shows how our running example looks like in
|
||||||
this format, and it briefly explains the format). Assuming that
|
this format, and it briefly explains the format). Assuming that
|
||||||
|
|
@ -292,7 +292,7 @@ as before.
|
||||||
|
|
||||||
\ccIncludeExampleCode{QP_solver/first_qp_from_mps.cpp}
|
\ccIncludeExampleCode{QP_solver/first_qp_from_mps.cpp}
|
||||||
|
|
||||||
\subsection{Constructing a program from iterators}
|
\subsection{Constructing a Program from Iterators}
|
||||||
The following program again solves our running example from above,
|
The following program again solves our running example from above,
|
||||||
with the same output, but this time with iterators over data stored
|
with the same output, but this time with iterators over data stored
|
||||||
in suitable containers. You can see that we also store zero
|
in suitable containers. You can see that we also store zero
|
||||||
|
|
@ -360,7 +360,7 @@ general quadratic or linear program), but all predefined models make
|
||||||
it easy to specify all sorts of default bounds, covering the free
|
it easy to specify all sorts of default bounds, covering the free
|
||||||
case.
|
case.
|
||||||
|
|
||||||
\subsection{The linear programming solver}
|
\subsection{The Linear Programming Solver}
|
||||||
Let's go back to our first quadratic program from above and change it
|
Let's go back to our first quadratic program from above and change it
|
||||||
into a linear program by simply removing the quadratic part of the
|
into a linear program by simply removing the quadratic part of the
|
||||||
objective function:
|
objective function:
|
||||||
|
|
@ -419,7 +419,7 @@ variable values:
|
||||||
1: 11/3
|
1: 11/3
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
\subsection{The nonnegative quadratic programming solver}
|
\subsection{The Nonnegative Quadratic Programming Solver}
|
||||||
If we go back to our first quadratic program and
|
If we go back to our first quadratic program and
|
||||||
remove the constraint $y\leq 4$, we arrive at a nonnegative quadratic
|
remove the constraint $y\leq 4$, we arrive at a nonnegative quadratic
|
||||||
program:
|
program:
|
||||||
|
|
@ -469,7 +469,7 @@ variable values:
|
||||||
\ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_mps.cpp}\\
|
\ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_mps.cpp}\\
|
||||||
\ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_iterators.cpp}
|
\ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_iterators.cpp}
|
||||||
|
|
||||||
\subsection{The nonnegative linear programming solver}
|
\subsection{The Nonnegative Linear Programming Solver}
|
||||||
Finally, a dedicated model and function is available for nonnnegative linear
|
Finally, a dedicated model and function is available for nonnnegative linear
|
||||||
programs as well. Let's take our linear program from above and remove
|
programs as well. Let's take our linear program from above and remove
|
||||||
the constraint $y\leq 4$ to obtain a nonnegative linear program. At
|
the constraint $y\leq 4$ to obtain a nonnegative linear program. At
|
||||||
|
|
@ -553,7 +553,7 @@ most. As the exact type, we use \ccc{MP_Float} or \ccc{Gmpzf}
|
||||||
|
|
||||||
\ccIncludeExampleCode{QP_solver/convex_hull_containment.cpp}
|
\ccIncludeExampleCode{QP_solver/convex_hull_containment.cpp}
|
||||||
|
|
||||||
\subsection{Using makers\label{sec:QP-makers}}
|
\subsection{Using Makers\label{sec:QP-makers}}
|
||||||
You already noticed in the previous example that the actual
|
You already noticed in the previous example that the actual
|
||||||
template arguments for
|
template arguments for
|
||||||
\ccc{CGAL::Nonnegative_linear_program_from_iterators<A_it, B_it, R_it, C_it>}
|
\ccc{CGAL::Nonnegative_linear_program_from_iterators<A_it, B_it, R_it, C_it>}
|
||||||
|
|
@ -679,7 +679,7 @@ This can be done by passing a suitably prepared object of the class
|
||||||
concern ``soft'' issues like verbosity, but there are two notable case
|
concern ``soft'' issues like verbosity, but there are two notable case
|
||||||
where it is of critical importance to be able to change the defaults.
|
where it is of critical importance to be able to change the defaults.
|
||||||
|
|
||||||
\subsection{Exponent overflow in double using floating-point filters\label{sec:QP-customization-filtering}}
|
\subsection{Exponent Overflow in Double Using Floating-Point Filters\label{sec:QP-customization-filtering}}
|
||||||
The filtered version of the solver that is used for some problems
|
The filtered version of the solver that is used for some problems
|
||||||
by default on input
|
by default on input
|
||||||
type \ccc{double} internally constructs double-approximations of exact
|
type \ccc{double} internally constructs double-approximations of exact
|
||||||
|
|
@ -700,7 +700,7 @@ to be safe from the issue described here (see
|
||||||
\ccReferToExampleCode{QP_solver/cycling.cpp}
|
\ccReferToExampleCode{QP_solver/cycling.cpp}
|
||||||
for an example that shows how to change the pricing strategy).
|
for an example that shows how to change the pricing strategy).
|
||||||
|
|
||||||
\subsection{The solver internally cycles\label{sec:QP-customization-cycling}}
|
\subsection{The Solver Internally Cycles\label{sec:QP-customization-cycling}}
|
||||||
Consider the following program. It reads a nonnegative linear program from
|
Consider the following program. It reads a nonnegative linear program from
|
||||||
the file \texttt{cycling.mps} (which is in the example directory as well),
|
the file \texttt{cycling.mps} (which is in the example directory as well),
|
||||||
and then solves it in verbose mode, using \emph{Bland's rule}, see
|
and then solves it in verbose mode, using \emph{Bland's rule}, see
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ algorithms; such quantities may be computed by the package {\em
|
||||||
Estimation of Local Differential Properties of Sampled Surfaces via
|
Estimation of Local Differential Properties of Sampled Surfaces via
|
||||||
Polynomial Fitting}.
|
Polynomial Fitting}.
|
||||||
|
|
||||||
Notice this package needs the third party libraries
|
Note that this package needs the third party libraries
|
||||||
\ccThirdPartyLapack\ and \ccThirdPartyBlas\ for linear algebra operations.
|
\ccThirdPartyLapack\ and \ccThirdPartyBlas\ for linear algebra operations.
|
||||||
|
|
||||||
\subsection{Overview}
|
\subsection{Overview}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
\subsection{Example ofRange Tree on Map-like Data\label{sec:range_tree_ex}}
|
\subsection{Example for Range Tree on Map-like Data\label{sec:range_tree_ex}}
|
||||||
|
|
||||||
The following example program uses the predefined \ccc{
|
The following example program uses the predefined \ccc{
|
||||||
Range_tree_2} data structure together with the predefined traits
|
Range_tree_2} data structure together with the predefined traits
|
||||||
|
|
@ -47,7 +47,7 @@ int main()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Example of Range Tree on Set-like Data}
|
\subsection{Example for Range Tree on Set-like Data}
|
||||||
|
|
||||||
This example illustrates the use of the range tree on
|
This example illustrates the use of the range tree on
|
||||||
2-dimensional point data (no value is associated to a data item).
|
2-dimensional point data (no value is associated to a data item).
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
\subsection{Example of Segment Tree on Map-like Data\label{sec:segment_tree_ex}}
|
\subsection{Example for Segment Tree on Map-like Data\label{sec:segment_tree_ex}}
|
||||||
|
|
||||||
The following example program uses the predefined \ccc{
|
The following example program uses the predefined \ccc{
|
||||||
Segment_tree_2} data structure together with the predefined traits
|
Segment_tree_2} data structure together with the predefined traits
|
||||||
|
|
@ -65,7 +65,7 @@ int main()
|
||||||
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
\subsection{Example of Segment Tree on Set-like Data}
|
\subsection{Example for Segment Tree on Set-like Data}
|
||||||
|
|
||||||
This example illustrates the use of the predefined segment tree
|
This example illustrates the use of the predefined segment tree
|
||||||
on 3-dimensional interval data (with no value associated). After
|
on 3-dimensional interval data (with no value associated). After
|
||||||
|
|
|
||||||
|
|
@ -500,7 +500,7 @@ pretty much alike a proper medial axis.
|
||||||
|
|
||||||
The most natural usage of straight skeletons is offsetting: growing and shrinking polygons (provided by this \cgal\ package).
|
The most natural usage of straight skeletons is offsetting: growing and shrinking polygons (provided by this \cgal\ package).
|
||||||
|
|
||||||
Anther usage, perhaps its very first, is roof design: The straight skeleton of a polygonal roof directly gives the layout of each tent. If each skeleton edge is lifted from the plane a height equal to its offset distance, the resulting roof is "correct" in that water will always fall down to the contour edges (roof border) regardless of were in the roof it falls. \cite{cgal:ld-agrm-03} gives an algorithm for roof design based on the straight skeleton.
|
Another usage, perhaps its very first, is roof design: The straight skeleton of a polygonal roof directly gives the layout of each tent. If each skeleton edge is lifted from the plane a height equal to its offset distance, the resulting roof is "correct" in that water will always fall down to the contour edges (roof border) regardless of were in the roof it falls. \cite{cgal:ld-agrm-03} gives an algorithm for roof design based on the straight skeleton.
|
||||||
|
|
||||||
Just like medial axes, 2D straight skeletons can also be used for 2D shape description and matching. Essentially, all the applications of image-based skeletonization (for which there is a vast literature) are also direct applications of the straight skeleton, specially since skeleton edges are simply straight line segments.
|
Just like medial axes, 2D straight skeletons can also be used for 2D shape description and matching. Essentially, all the applications of image-based skeletonization (for which there is a vast literature) are also direct applications of the straight skeleton, specially since skeleton edges are simply straight line segments.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -266,7 +266,7 @@ That is, you give each parameter a name by wrapping it into a function whose nam
|
||||||
When you use named parameters, the ordering is irrelevant, so this: \ccc{f(name(n).age(a).gender(g))} is equivalent to this:
|
When you use named parameters, the ordering is irrelevant, so this: \ccc{f(name(n).age(a).gender(g))} is equivalent to this:
|
||||||
\ccc{f(age(a).gender(g).name(n))}, and you can just omit any named parameter that has a default value.
|
\ccc{f(age(a).gender(g).name(n))}, and you can just omit any named parameter that has a default value.
|
||||||
|
|
||||||
\subsubsection{Sample call}
|
\subsubsection{Sample Call}
|
||||||
|
|
||||||
\begin{ccExampleCode}
|
\begin{ccExampleCode}
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -511,7 +511,7 @@ three caching degeneracy removal policies support on-line insertions.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Efficiency Considerations\label{subsec:vda2-efficiency}}
|
\subsection*{Efficiency Considerations\label{subsec:vda2-efficiency}}
|
||||||
|
|
||||||
One last item that merits some discussion are the different choices
|
One last item that merits some discussion are the different choices
|
||||||
from the point of view of time- and space-efficiency.
|
from the point of view of time- and space-efficiency.
|
||||||
|
|
|
||||||
|
|
@ -440,7 +440,7 @@ private:
|
||||||
|
|
||||||
// Specialization for the identity face degeneracy tester
|
// Specialization for the identity face degeneracy tester
|
||||||
|
|
||||||
template<class DG> class Identity_face_rejector;
|
template<class DG> struct Identity_face_rejector;
|
||||||
|
|
||||||
template<class DG>
|
template<class DG>
|
||||||
class Cached_face_rejector<Identity_face_rejector<DG>,Tag_false>
|
class Cached_face_rejector<Identity_face_rejector<DG>,Tag_false>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue