merge from next

This branch still has to be tested.
This commit is contained in:
Laurent Rineau 2011-10-26 14:40:48 +00:00
commit 93d8367048
81 changed files with 607 additions and 427 deletions

1
.gitattributes vendored
View File

@ -2806,6 +2806,7 @@ Number_types/doc_tex/NumberTypeSupport/illustration.png -text
Number_types/doc_tex/NumberTypeSupport_ref/CORE_BigFloat.tex -text
Number_types/doc_tex/NumberTypeSupport_ref/Gmpfi.tex -text
Number_types/doc_tex/NumberTypeSupport_ref/Gmpfr.tex -text
Number_types/doc_tex/NumberTypeSupport_ref/compute_roots_of_2.tex -text
Number_types/doc_tex/NumberTypeSupport_ref/fundamental_types.tex -text
Number_types/doc_tex/NumberTypeSupport_ref/make_sqrt.tex -text
Number_types/doc_tex/NumberTypeSupport_ref/open.tex -text

View File

@ -27,7 +27,7 @@ with remainder.
second_argument_type y);}{}
\ccMethod{template <class NT1, class NT2> result_type operator()(NT1 x, NT2 y);}
{This operator is well defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
{This operator is defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
with coercion type \ccc{AlgebraicStructureTraits::Type}. }
%\ccHasModels

View File

@ -106,7 +106,7 @@ The following table illustrates the behavior for integers:
\ccMethod{template <class NT1, class NT2> result_type
operator()(NT1 x, NT2 y, third_argument_type q, fourth_argument_type r);}
{This operator is well defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
{This operator is defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
with coercion type \ccc{AlgebraicStructureTraits::Type}. }
%\ccHasModels

View File

@ -37,7 +37,7 @@ Thus, $0$ is divided by every element of the Ring, in particular by itself.
{ returns $gcd(x,y)$. }
\ccMethod{template <class NT1, class NT2> result_type operator()(NT1 x, NT2 y);}
{This operator is well defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
{This operator is defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
with coercion type \ccc{AlgebraicStructureTraits::Type}. }
%\ccHasModels

View File

@ -34,7 +34,7 @@ $z$ is uniquely defined if it exists.
\ccMethod{template <class NT1, class NT2> result_type operator()(NT1 x, NT2 y);}
{This operator is well defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
{This operator is defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
with coercion type \ccc{AlgebraicStructureTraits::Type}. }
%\ccHasModels

View File

@ -26,7 +26,7 @@
second_argument_type y);}{}
\ccMethod{template <class NT1, class NT2> result_type operator()(NT1 x, NT2 y);}
{This operator is well defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
{This operator is defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable}
with coercion type \ccc{AlgebraicStructureTraits::Type}. }
%\ccHasModels

View File

@ -27,7 +27,7 @@
\ccMethod{template <class NT1, class NT2>
result_type operator()(NT1 x, NT2 y);}{
This operator is well defined if \ccc{NT1} and \ccc{NT2} are
This operator is defined if \ccc{NT1} and \ccc{NT2} are
\ccc{ExplicitInteroperable} with coercion type
\ccc{RealEmbeddableTraits::Type}. }

View File

@ -4,6 +4,9 @@
\ccc{AdaptableUnaryFunction} computes a double approximation of a real
embeddable number.
Remark: In order to control the quality of approximation one has to resort
to methods that are specific to NT. There are no general guarantees whatsoever.
\ccRefines

View File

@ -4,7 +4,7 @@
The template function \ccRefName\ returns the absolute value of a number.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -8,7 +8,7 @@ the second, i.e. it returns \ccc{CGAL::LARGER} if $x$ is larger then $y$.
In case the argument types \ccc{NT1} and \ccc{NT2} differ,
\ccRefName\ is performed with the semantic of the type determined via
\ccc{Coercion_traits}.
The function is guaranteed to be well defined in case this type
The function is defined if this type
is a model of the \ccc{RealEmbeddable} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -11,7 +11,7 @@ Thus, the \ccc{result_type} is well defined if \ccc{NT1} and \ccc{NT2}
are a model of \ccc{ExplicitInteroperable}. \\
The actual \ccRefName\ is performed with the semantic of that type.
The function is guaranteed to be well defined in case \ccc{result_type}
The function is defined if \ccc{result_type}
is a model of the \ccc{EuclideanRing} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -11,7 +11,7 @@ Thus, the \ccc{result_type} is well defined if \ccc{NT1} and \ccc{NT2}
are a model of \ccc{ExplicitInteroperable}. \\
The actual \ccRefName\ is performed with the semantic of that type.
The function is guaranteed to be well defined in case \ccc{result_type}
The function is defined if \ccc{result_type}
is a model of the \ccc{EuclideanRing} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -10,7 +10,7 @@ Thus, the \ccc{result_type} is well defined if \ccc{NT1} and \ccc{NT2}
are a model of \ccc{ExplicitInteroperable}. \\
The actual \ccRefName\ is performed with the semantic of that type.
The function is guaranteed to be well defined in case \ccc{result_type}
The function is defined if \ccc{result_type}
is a model of the \ccc{UniqueFactorizationDomain} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -14,7 +14,7 @@ Thus, the \ccc{result_type} is well defined if \ccc{NT1} and \ccc{NT2}
are a model of \ccc{ExplicitInteroperable}. \\
The actual \ccRefName\ is performed with the semantic of that type.
The function is guaranteed to be well defined in case \ccc{result_type}
The function is defined if \ccc{result_type}
is a model of the \ccc{IntegralDomain} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -4,7 +4,7 @@
The function \ccRefName\ returns the inverse element with respect to multiplication.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{Field} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -3,7 +3,7 @@
\ccDefinition
The template function \ccRefName\ determines if a value is negative or not.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} concept.

View File

@ -3,7 +3,7 @@
\ccDefinition
The function \ccRefName\ determines if a value is equal to 1 or not.\\
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{IntegralDomainWithoutDivision} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -3,7 +3,7 @@
\ccDefinition
The template function \ccRefName\ determines if a value is positive or not.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -3,7 +3,7 @@
\ccDefinition
The function \ccRefName\ determines if a value is equal to 0 or not.\\
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} or of
the \ccc{IntegralDomainWithoutDivision} concept.

View File

@ -4,7 +4,7 @@
The function \ccRefName\ returns the k-th root of a value.
The function is guaranteed to be well defined in case the second argument type
The function is defined if the second argument type
is a model of the \ccc{FieldWithKthRoot} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -10,7 +10,7 @@ Thus, the \ccc{result_type} is well defined if \ccc{NT1} and \ccc{NT2}
are a model of \ccc{ExplicitInteroperable}. \\
The actual \ccRefName\ is performed with the semantic of that type.
The function is guaranteed to be well defined in case \ccc{result_type}
The function is defined if \ccc{result_type}
is a model of the \ccc{EuclideanRing} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -5,7 +5,7 @@
The function \ccRefName\ computes a real root of a square-free univariate
polynomial.
The function is guaranteed to be well defined in case the value type, \ccc{NT},
The function is defined if the value type, \ccc{NT},
of the iterator range is a model of the \ccc{FieldWithRootOf} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -4,7 +4,7 @@
The template function \ccRefName\ returns the sign of a number.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -4,7 +4,7 @@
The function \ccRefName\ may simplify a given object.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{IntegralDomainWithoutDivision} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -4,7 +4,7 @@
The function \ccRefName\ returns the square root of a value.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{FieldWithSqrt} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -3,7 +3,7 @@
\ccDefinition
The function \ccRefName\ returns the square of a number.\\
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{IntegralDomainWithoutDivision} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -3,9 +3,11 @@
\ccDefinition
The template function \ccRefName\ returns an double approximation of a number.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} concept.
Remark: In order to control the quality of approximation one has to resort to methods that are specific to NT. There are no general guarantees whatsoever.
\ccInclude{CGAL/number_utils.h}
\ccFunction{template <class NT> double to_double(const NT& x);}

View File

@ -5,7 +5,7 @@
The template function \ccRefName\ computes for a given real embeddable
number $x$ a double interval containing $x$.
This interval is represented by a \ccc{std::pair<double,double>}.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{RealEmbeddable} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -5,7 +5,7 @@
The function \ccRefName\ computes the unit part of a given ring
element.
The function is guaranteed to be well defined in case the argument type
The function is defined if the argument type
is a model of the \ccc{IntegralDomainWithoutDivision} concept.
\ccInclude{CGAL/number_utils.h}

View File

@ -1629,7 +1629,7 @@ protected:
_two*_t*_v - _four*_s*_u,
_v*_v - _four*_s*_w,
xs);
n_xs = xs_end - xs;
n_xs = static_cast<int>(xs_end - xs);
// Find the y-coordinates of the vertical tangency points.
Algebraic ys[2];
@ -1649,7 +1649,7 @@ protected:
_four*_r*_s*_v - _two*_s*_t*_u,
_r*_v*_v - _t*_u*_v + _t*_t*_w,
ys);
n_ys = ys_end - ys;
n_ys = static_cast<int>(ys_end - ys);
}
// Pair the x and y coordinates and obtain the vertical tangency points.
@ -1714,7 +1714,7 @@ protected:
_two*_t*_u - _four*_r*_v,
_u*_u - _four*_r*_w,
ys);
n = ys_end - ys;
n = static_cast<int>(ys_end - ys);
// Compute the x coordinates and construct the horizontal tangency points.
Algebraic x;
@ -1722,7 +1722,7 @@ protected:
for (i = 0; i < n; i++)
{
// Having computed y, x is the simgle solution to the quadratic equation
// Having computed y, x is the single solution to the quadratic equation
// above, and since its discriminant is 0, x is simply given by:
x = -(nt_traits.convert(_t)*ys[i] + nt_traits.convert(_u)) /
nt_traits.convert(_two*_r);

View File

@ -38,22 +38,23 @@ namespace CGAL {
* \return The number of distinct roots found.
*/
template <class Nt_traits>
int _compute_resultant_roots (Nt_traits& nt_traits,
const typename Nt_traits::Integer& r1,
const typename Nt_traits::Integer& s1,
const typename Nt_traits::Integer& t1,
const typename Nt_traits::Integer& u1,
const typename Nt_traits::Integer& v1,
const typename Nt_traits::Integer& w1,
const int& deg1,
const typename Nt_traits::Integer& r2,
const typename Nt_traits::Integer& s2,
const typename Nt_traits::Integer& t2,
const typename Nt_traits::Integer& u2,
const typename Nt_traits::Integer& v2,
const typename Nt_traits::Integer& w2,
const int& deg2,
typename Nt_traits::Algebraic *xs)
int
_compute_resultant_roots (Nt_traits& nt_traits,
const typename Nt_traits::Integer& r1,
const typename Nt_traits::Integer& s1,
const typename Nt_traits::Integer& t1,
const typename Nt_traits::Integer& u1,
const typename Nt_traits::Integer& v1,
const typename Nt_traits::Integer& w1,
const int& deg1,
const typename Nt_traits::Integer& r2,
const typename Nt_traits::Integer& s2,
const typename Nt_traits::Integer& t2,
const typename Nt_traits::Integer& u2,
const typename Nt_traits::Integer& v2,
const typename Nt_traits::Integer& w2,
const int& deg2,
typename Nt_traits::Algebraic *xs)
{
if (deg1 == 2 && deg2 == 1)
{
@ -107,7 +108,7 @@ int _compute_resultant_roots (Nt_traits& nt_traits,
xs_end = nt_traits.solve_quadratic_equation (c[2], c[1], c[0],
xs);
return (xs_end - xs);
return static_cast<int>(xs_end - xs);
}
// At this stage, both curves have degree 2. We obtain a qaurtic polynomial
@ -165,7 +166,7 @@ int _compute_resultant_roots (Nt_traits& nt_traits,
xs_end = nt_traits.compute_polynomial_roots (poly,
xs);
return (xs_end - xs);
return static_cast<int>(xs_end - xs);
}
/*!
@ -179,8 +180,9 @@ int _compute_resultant_roots (Nt_traits& nt_traits,
* \return The number of distinct roots found.
*/
template <class Nt_traits>
int _compute_resultant_roots (Nt_traits& nt_traits,
const typename Nt_traits::Algebraic& r,
int
_compute_resultant_roots (Nt_traits& nt_traits,
const typename Nt_traits::Algebraic& r,
const typename Nt_traits::Algebraic& s,
const typename Nt_traits::Algebraic& t,
const typename Nt_traits::Algebraic& u,
@ -226,7 +228,7 @@ int _compute_resultant_roots (Nt_traits& nt_traits,
xs_end = nt_traits.solve_quadratic_equation (c[2], c[1], c[0],
xs);
return (xs_end - xs);
return static_cast<int>(xs_end - xs);
}
} //namespace CGAL

View File

@ -1932,7 +1932,7 @@ private:
// x and y-coordinates are sorted in ascending order, we output the
// intersection points in lexicographically ascending order.
unsigned int mult;
int i, j;
int i, j;
if (arc._is_special_segment())
{

View File

@ -290,7 +290,7 @@ public:
*/
inline unsigned int size() const
{
return segments.size();
return static_cast<unsigned int>(segments.size());
}
/*!

View File

@ -539,7 +539,7 @@ private:
}
/*! Find the given object in the given bucket. */
Bucket_iterator _find_in_bucket (int index,
Bucket_iterator _find_in_bucket (std::size_t index,
const value_type& val) const
{
Bucket& my_bucket = const_cast<Bucket&>(buckets[index]);

View File

@ -416,7 +416,8 @@ protected:
void _init_sweep (CurveInputIterator curves_begin,
CurveInputIterator curves_end)
{
m_num_of_subCurves = std::distance (curves_begin, curves_end);
// m_num_of_subCurves should be a size_t for "huge" data sets
m_num_of_subCurves = static_cast<int>(std::distance (curves_begin, curves_end));
_init_structures();

View File

@ -55,7 +55,7 @@ void make_x_monotone (CurveInputIter begin, CurveInputIter end,
const Traits * tr)
{
// Split the input curves into x-monotone objects.
unsigned int num_of_curves = std::distance(begin, end);
std::size_t num_of_curves = std::distance(begin, end);
std::vector<Object> object_vec;
CurveInputIter iter;

View File

@ -607,9 +607,9 @@ bool Traits_test<T_Traits>::intersect_wrapper(std::istringstream& str_stream)
std::back_inserter(object_vec));
std::cout << "Test: intersect( " << this->m_xcurves[id1] << ","
<< this->m_xcurves[id2] << " ) ? ";
std::size_t num;
unsigned int num;
str_stream >> num;
if (!this->compare(num, object_vec.size(), "size")) return false;
if (!this->compare(num, static_cast<unsigned int>(object_vec.size()), "size")) return false;
for (unsigned int i = 0; i < num; ++i) {
unsigned int type; // 0 - point, 1 - x-monotone curve

View File

@ -186,8 +186,8 @@ run_trapped_test()
else
run_test $1 $2 $3 $4 $5 $6 &
WPID=$!
trap "kill -9 $WPID" INT
(sleep 1200; kill -9 $WPID) > /dev/null 2>&1 &
trap "kill -HUP $WPID" INT
(sleep 1200; kill -HUP $WPID) > /dev/null 2>&1 &
SPID=$!
wait $WPID > /dev/null 2>&1
# RES=$?

View File

@ -1,4 +1,6 @@
# Top level CMakeLists.txt for CGAL-branchbuild
project(CGAL)
cmake_minimum_required(VERSION 2.6.2)
# option for branch build

View File

@ -1691,5 +1691,5 @@ from Moka with the design of the Halfedge data structure package of
\cgal. Andreas Fabri and S\'ebastien Loriot contributed to the
design, the coding, and to the documentation of the package, and
Laurent Rineau helped for the design. Emma Michel contributed to the
manual. Monique Teillaud and Bernd Gaertner contributed to the manual
manual. Monique Teillaud and Bernd G{\"a}rtner contributed to the manual
by giving useful remarks, really numerous and detailed for Monique.

View File

@ -18,6 +18,9 @@
// Author(s) : Susan Hert
//
#include <CGAL/config.h>
#ifdef CGAL_USE_GEOMVIEW
#include <CGAL/Homogeneous.h>
#include <CGAL/point_generators_3.h>
@ -31,8 +34,6 @@
#include <vector>
#include <cassert>
#ifdef CGAL_USE_GEOMVIEW
#ifdef CGAL_USE_LEDA
#include <CGAL/leda_integer.h>
typedef leda_integer RT;
@ -89,6 +90,7 @@ int main ()
#else
#include <iostream>
int main() {
std::cerr <<
"This demo requires geomview, which is not present on this platform\n";

View File

@ -17,7 +17,9 @@
//
// Author(s) : Susan Hert
#include <CGAL/config.h>
#ifdef CGAL_USE_GEOMVIEW
#include <CGAL/Homogeneous.h>
#include <CGAL/point_generators_3.h>
@ -28,8 +30,6 @@
#include <CGAL/IO/Geomview_stream.h>
#include <CGAL/IO/Polyhedron_geomview_ostream.h>
#ifdef CGAL_USE_GEOMVIEW
#ifdef CGAL_USE_LEDA
#include <CGAL/leda_integer.h>
typedef leda_integer RT;
@ -128,6 +128,8 @@ int main(int argc, char* argv[])
#else
#include <iostream>
int main() {
std::cerr <<
"This demo requires geomview, which is not present on this platform\n";

View File

@ -17,7 +17,12 @@
//
// Author(s) : Michael Seel <seel@mpi-sb.mpg.de>
#include <CGAL/basic.h>
#include <iostream>
#include <string>
#include <cstdlib>
#if !defined(_MSC_VER)
#include <CGAL/Homogeneous.h>
#include <CGAL/Convex_hull_d_traits_3.h>
#include <CGAL/Convex_hull_d.h>
@ -27,11 +32,6 @@
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Convex_hull_d_to_polyhedron_3.h>
#include <CGAL/IO/Polyhedron_geomview_ostream.h>
#include <iostream>
#include <string>
#include <cstdlib>
#if !defined(_MSC_VER)
#ifdef CGAL_USE_LEDA
#include <CGAL/leda_integer.h>

View File

@ -17,7 +17,12 @@
//
// Author(s) : Michael Seel <seel@mpi-sb.mpg.de>
#include <CGAL/basic.h>
#include <iostream>
#include <string>
#include <cstdlib>
#if !defined(_MSC_VER)
#include <CGAL/Homogeneous_d.h>
#include <CGAL/Convex_hull_d.h>
#include <CGAL/random_selection.h>
@ -26,11 +31,6 @@
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Convex_hull_d_to_polyhedron_3.h>
#include <CGAL/IO/Polyhedron_geomview_ostream.h>
#include <iostream>
#include <string>
#include <cstdlib>
#if !defined(_MSC_VER)
#ifdef CGAL_USE_LEDA
#include <CGAL/leda_integer.h>

View File

@ -30,7 +30,7 @@ int main() {
PG p2( Point( 250,-250), Point( 250,250),50);
Segm_iterator t1( p1, p2); // Segment generator.
Count_iterator t1_begin( t1); // Finite range.
Count_iterator t1_end( 50);
Count_iterator t1_end( t1, 50);
std::copy( t1_begin, t1_end, std::back_inserter(segs));
// A vertical like fan.
@ -38,7 +38,7 @@ int main() {
PG p4( Point(-250, 250), Point( 250, 250),50);
Segm_iterator t2( p3, p4);
Count_iterator t2_begin( t2);
Count_iterator t2_end( 50);
Count_iterator t2_end( t2, 50);
std::copy( t2_begin, t2_end, std::back_inserter(segs));
CGAL_assertion( segs.size() == 100);

View File

@ -300,7 +300,7 @@ MainWindow::loadEdgConstraints(QString fileName)
int n;
ifs >> n;
K::Point_2 p,q, qold;
K::Point_2 p,q, qold(0,0); // Initialize qold, as otherwise some g++ issue a unjustified warning
SVD::Vertex_handle vp, vq, vqold;
while(ifs >> p) {

View File

@ -110,26 +110,36 @@ if( NOT CGAL_MACROS_FILE_INCLUDED )
set(search_dirs "")
message("Compiler version:")
set(version "Unknown compiler. Cannot display its version")
foreach(flag "-V" "--version" "-v")
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" ${flag}
if(MSVC)
execute_process(COMMAND "${CMAKE_CXX_COMPILER}"
RESULT_VARIABLE ok
OUTPUT_VARIABLE out_version
ERROR_VARIABLE out_version
TIMEOUT 5)
if(ok EQUAL 0)
if("${out_version}" MATCHES "^clang")
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" -print-search-dirs
RESULT_VARIABLE ok
OUTPUT_VARIABLE out_search_dirs
TIMEOUT 5)
if(ok EQUAL 0)
set(search_dirs "${out_search_dirs}")
endif()
endif()
set(version "${out_version}")
break()
endif()
endforeach()
else()
foreach(flag "-V" "--version" "-v")
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" ${flag}
RESULT_VARIABLE ok
OUTPUT_VARIABLE out_version
ERROR_VARIABLE out_version
TIMEOUT 5)
if(ok EQUAL 0)
if("${out_version}" MATCHES "^clang")
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" -print-search-dirs
RESULT_VARIABLE ok
OUTPUT_VARIABLE out_search_dirs
TIMEOUT 5)
if(ok EQUAL 0)
set(search_dirs "${out_search_dirs}")
endif()
endif()
set(version "${out_version}")
break()
endif()
endforeach()
endif()
message("${version}")
if(search_dirs)
message("Search dirs:")

View File

@ -53,7 +53,7 @@ and Debug modes.
\TTindex{cgal\_create\_cmake\_script}\index{scripts!\texttt{cgal\_create\_cmake\_script}}
The Bourne-shell script \texttt{cgal\_create\_cmake\_script} is contained in the
\cgaldir\texttt{/scripts} directory. It can be used to create
\texttt{\cgalrel/scripts} directory. It can be used to create
\texttt{CmakeLists.txt} files for compiling \cgal\ applications. Executing
\texttt{cgal\_create\_cmake\_script} in an application directory creates a
\texttt{CMakeLists.txt} containing rules for every \texttt{*.cpp} file

View File

@ -40,13 +40,7 @@
\newcommand{\mswin}{\textsc{MS}~Windows}
%% macro for CGAL directory
\newcommand{\cgaldir}{\texttt{CGAL-\cgalversionnumber}}
%% macro for YOUR CGAL directory :)
\newcommand{\yourcgaldir}{$<$\textit{insert your \cgaldir\ dir}$>$}
%% macro for CGAL install config directory
\newcommand{\cgalinstconfdir}{\cgaldir\texttt{/config/install}\index{directories!config/install@\texttt{config/install}}}
\newcommand{\cgalrel}{\texttt{CGAL-\cgalversionnumber}}
%% macros for WWW pages
% Now in cgal_manual.sty -- Laurent Rineau, 2010/02/20
@ -62,14 +56,14 @@ This document describes how to install \cgal\ on Windows, Unix-like systems and
Ideally, installing \cgal\ amounts to:
\begin{verbatim}
cd CGAL-3.9 # go to CGAL directory
\begin{alltt}
cd \cgalrel # go to CGAL directory
cmake . # configure CGAL
make # build the CGAL libraries
cd examples/Straight_skeleton_2 # go to an example directory
cmake -DCGAL_DIR=$HOME/CGAL-3.9 . # configure the examples
cmake -DCGAL_DIR=$HOME/\cgalrel . # configure the examples
make # build the examples
\end{verbatim}
\end{alltt}
%% $ This dollar is there to trick syntax highlighting in emacs
In a less ideal world, you probably have to install \cmake, a makefile
@ -78,7 +72,7 @@ generator, and third party libraries. That's what this manual is about.
\section{Supported Compilers}
In order to build the \cgal\ libraries, you need a \CC\ compiler.
\cgal~3.9 is supported for the following compilers/operating systems:
\cgal~\cgalversionnumber is supported for the following compilers/operating systems:
\begin{center}\index{compilers!supported}\index{supported compilers}
\renewcommand{\arraystretch}{1.3}
@ -160,7 +154,7 @@ installed is recommended. These libraries can be obtained from
As Visual \CC\ is not properly
supported by the \gmp\ and \mpfr\ projects, we provide precompiled versions
of \gmp\ and \mpfr, which can be downloaded with the installer
\texttt{CGAL-3.9-Setup.exe}.
\texttt{\cgalrel-Setup.exe}.
\subsection{CORE \label{thirdparty:Core}}
@ -241,7 +235,7 @@ It also contains a complete \lapack\ implementation.
As Visual~\CC\ is not properly
supported by the \taucs\ project, we provide a precompiled version of
\taucs, which can be downloaded with the installer
\texttt{CGAL-3.9-Setup.exe}.
\texttt{\cgalrel-Setup.exe}.
{\em CAUTION:} Since version 3.3.1, \cgal\ is no longer compatible with the official
release of \taucs\ (currently 2.2). Make sure to use the modified
@ -331,20 +325,20 @@ It can be downloaded from \esbtlpage.
The \cgal\ library can be downloaded from \cgaldownloadpage.
After you have downloaded the file \texttt{CGAL-3.9.tar.gz} containing the
After you have downloaded the file \texttt{\cgalrel.tar.gz} containing the
\cgal\ sources, you have to unpack it. Under a Unix-like shell, use the
command:
\begin{verbatim}
tar xzf CGAL-3.9.tar.gz
\end{verbatim}
\begin{alltt}
tar xzf \cgalrel.tar.gz
\end{alltt}
When you are on Windows you may download and run the \texttt{CGAL-3.9-Setup.exe}. It is a
When you are on Windows you may download and run the \texttt{\cgalrel-Setup.exe}. It is a
self extracting executable that installs the \cgal\ source, and that allows
you to select and download some precompiled third party libraries.
In both cases the directory \cgaldir\ will be created. This directory
In both cases the directory \cgalrel\ will be created. This directory
contains the following subdirectories:\index{directories!structure}
\begin{center}
@ -386,8 +380,9 @@ third-party libraries you want to use and where they can be found, and
which \cgal\ libraries you want to build. Gathering
all this information is called {\em configuration}.
For CGAL-3.9, the configuration is generated with \cmake, a
cross-platform build system. This manual explains only those features of
The configuration uses \cmake, a
cross-platform build system generator that can generate makefiles, or IDE
project files. This manual explains only those features of
\cmake\ which are needed in order to build \cgal. Please refer to the \cmake\
documentation at \cmakepage\ for further details.
@ -402,10 +397,10 @@ is available on all platforms since \cmake\ version~2.6. You must pass as
argument the root directory of \cgal. For example:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
cd CGAL-3.9
\begin{alltt}
cd \cgalrel
cmake-gui . # Notice the dot to indicate the current directory.
\end{verbatim}
\end{alltt}
}
Once \texttt{cmake-gui} has started up, you must press 'Configure'.
@ -430,10 +425,10 @@ Alternatively, you can run the command-line tool called
\cgal. For example:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
cd CGAL-3.9
\begin{alltt}
cd \cgalrel
cmake . # Notice the dot to indicate the current directory.
\end{verbatim}
\end{alltt}
}
@ -462,10 +457,10 @@ you choose a particular generator as a mean to choose a specific compiler (becau
build files). For example, the following generates solution files for use in Visual \CC\ 9.0:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
cd CGAL-3.9
\begin{alltt}
cd \cgalrel
cmake -G"Visual Studio 9 2008" .
\end{verbatim}
\end{alltt}
}
In other cases, however, the generator doesn't directly identify a specific compiler but a tool chain.
@ -474,10 +469,10 @@ command-line compiler, like \texttt{gcc}. If you need the makefiles to use a dif
specify the desired compiler in the call to \cmake{}, as in this example:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
cd CGAL-3.9
\begin{alltt}
cd \cgalrel
cmake -DCMAKE_CXX_COMPILER:FILEPATH=g++-3.4 .
\end{verbatim}
\end{alltt}
}
@ -528,10 +523,10 @@ by \cgal\ for the user convenience and it has it's own license.}\addtocounter{fo
If you turn off the configuration of a library, you can still configure it manually from the source directory:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
cd CGAL-3.9/src/CGALQt4
\begin{alltt}
cd \cgalrel/src/CGALQt4
cmake . # configures only the CGAL_Qt4 library
\end{verbatim}
\end{alltt}
}
\subsection{Examples and Demos}
@ -577,19 +572,19 @@ distinct directory for each configuration and by running \cmake\ from there. Thi
as {\em out-of-source configuration}, as opposite to an {\em in-source
configuration}, as showed in the previous sections.
You can, for example, generate subdirectories \cgaldir{}\texttt{/cmake/platforms/debug} and
\cgaldir{}\texttt{/cmake/platforms/release} for two configurations, respectively:
You can, for example, generate subdirectories \cgalrel{}\texttt{/cmake/platforms/debug} and
\cgalrel{}\texttt{/cmake/platforms/release} for two configurations, respectively:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
mkdir CGAL-3.9/cmake/platforms/debug
cd CGAL-3.9/cmake/platforms/debug
\begin{alltt}
mkdir \cgalrel/cmake/platforms/debug
cd \cgalrel/cmake/platforms/debug
cmake -DCMAKE_BUILD_TYPE=Debug ../../..
mkdir CGAL-3.9/cmake/platforms/release
cd CGAL-3.9/cmake/platforms/release
mkdir \cgalrel/cmake/platforms/release
cd \cgalrel/cmake/platforms/release
cmake -DCMAKE_BUILD_TYPE=Release ../../..
\end{verbatim}
\end{alltt}
}
\section{Building \cgal\ Libraries}
@ -606,9 +601,9 @@ makefiles. You can use the \texttt{make} command-line tool for the
succeeding build step as follows:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
cd CGAL-3.9
cd \cgalrel
# build all the selected libraries at once
@ -619,11 +614,11 @@ make
make CGAL CGAL_ImageIO CGAL_Qt4
\end{verbatim}
\end{alltt}
}
The resulting are placed in the subdirectory {\tt lib} under {\tt <CMAKE\_BINARY\_DIR>}
(which is \cgaldir\ in case you run an in-source-configuration).
(which is \cgalrel\ in case you run an in-source-configuration).
With generators other than {\tt UNIX Makefiles} the resulting build files
are solution and project files which
@ -634,11 +629,11 @@ Alternatively, you can build it with the command line version of the
{\sc Visual Studio Ide}:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
devenv CGAL.sln /Build Debug
\end{verbatim}
\end{alltt}
}
The "Debug" argument is needed because \cmake\ creates solution files for
@ -667,7 +662,7 @@ The targets \texttt{examples} and \texttt{demos} include themselves all the targ
for examples and demos respectively.
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
# build all examples at once
make examples
@ -678,7 +673,7 @@ make demos
# build only the Straight Skeleton demo
make Straight_skeleton_2_demo
\end{verbatim}
\end{alltt}
}
\begin{ccAdvanced}
@ -704,15 +699,15 @@ The following example shows a typical session from configuration to
installation in a {\sc Unix}-like environment:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
cd CGAL-3.9
cd \cgalrel
cmake . # configure
make # compile
make install # install
\end{verbatim}
\end{alltt}
}
If you use a generator that produces IDE files (for Visual Studio for instance) there will be an optional
@ -728,7 +723,7 @@ variable explicitly {\em at the configuration time} and not when executing the i
\end{ccAdvanced}
The file \texttt{CGALConfig.cmake} is installed by default in
\texttt{\$CMAKE\_INSTALLED\_PREFIX/lib/CGAL-3.9}.
\texttt{\$CMAKE\_INSTALLED\_PREFIX/lib/\cgalrel}.
\section{Configuring and Building Programs Using \cgal}
@ -745,13 +740,13 @@ to indicate the location of that config file in the \cmake\ variable
\texttt{CGAL\_DIR}:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
cd CGAL-3.9/examples/Straight_skeleton_2
cmake -DCGAL_DIR=$HOME/CGAL-3.9 .
cd \cgalrel/examples/Straight_skeleton_2
cmake -DCGAL_DIR=$HOME/\cgalrel .
make
\end{verbatim}
\end{alltt}
}
\texttt{CGAL\_DIR} can also be an environment variable.
@ -786,17 +781,17 @@ If you use the command line tool you can specify flags {\em directly} by setting
controlling variable right up front:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
cd CGAL-3.9
cd \cgalrel
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-g .
cd CGAL-3.9/examples/Straight_skeleton_2
cd \cgalrel/examples/Straight_skeleton_2
cmake -DCGAL_DIR=CGAL-3.9 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=-O2 -DCGAL_DONT_OVERRIDE_CMAKE_FLAGS=TRUE .
cmake -DCGAL_DIR=\cgalrel -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=-O2 -DCGAL_DONT_OVERRIDE_CMAKE_FLAGS=TRUE .
\end{verbatim}
\end{alltt}
}
\end{ccAdvanced}
@ -1221,17 +1216,17 @@ Below is an example output on a Windows machine with VC8 installed, using \cmake
and the following command-line call to \texttt{cmake}:
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
cmake -DWITH_examples=false
-DWITH_demos=false
-DCMAKE_BUILD_TYPE=Release
../../..
\end{verbatim}
\end{alltt}
}
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
\begin{alltt}
-- Check for working C compiler: cl
-- Check for working C compiler: cl -- works
-- Detecting C compiler ABI info
@ -1322,8 +1317,8 @@ cmake -DWITH_examples=false
-- uic executable: C:/Work/Downloaded/Libraries/qt-win-opensource-src-4.4.1/bin/uic.exe
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Work/Active/GeometryFactory/CGAL/Autotest/CGAL-3.9/cmake/platforms/a
\end{verbatim}
-- Build files have been written to: C:/Work/Active/GeometryFactory/CGAL/Autotest/\cgalrel/cmake/platforms/a
\end{alltt}
}

View File

@ -200,7 +200,7 @@ test_coords(const Triangul& T, const typename
typename Triangul::Cell_handle start;
typename Triangul::Geom_traits::FT norm;
typename Triangul::Geom_traits::FT norm = 1; // 1 for that default doesn't trigger an assert
//test different function calls
switch(version){
case 0:{

View File

@ -19,7 +19,6 @@
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/IO/Geomview_stream.h>
#include <CGAL/Delaunay_triangulation_3.h>
#include <CGAL/aff_transformation_tags.h>

View File

@ -21,6 +21,11 @@
#include <string>
#include <CGAL/config.h>
#if defined(BOOST_MSVC)
# pragma warning(disable:4244) // int to float conversion warning
#endif
#include <CGAL/intersections.h>
#include <CGAL/Cartesian.h>

View File

@ -427,8 +427,8 @@ fill_matrix(InputIterator begin, InputIterator end,
M.set(line_count, k*(k+1)/2+i,
std::pow(x,static_cast<double>(k-i))
* std::pow(y,static_cast<double>(i))
/( fact(i) *
fact(k-i)
/( fact(static_cast<unsigned int>(i)) *
fact(static_cast<unsigned int>(k-i))
*std::pow(this->preconditionning,static_cast<double>(k))));
}
}

View File

@ -1,2 +1,3 @@
unique_sqrt_extension-sloriot
global_function_solve_1-hemmer
global_function_solve_1-hemmer
Generator-removed_deprecated-odevil

View File

@ -89,43 +89,43 @@ inline double estimate_html_size( const string& s) {
void three_cols_html_begin( ostream& out, bool big_col1) {
current_font = it_font;
out << indent << indent << ind_newline
<< "<!3><TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0 WIDTH="
<< table_width << ">" << ind_newline
<< "<TR><TD ALIGN=LEFT VALIGN=TOP WIDTH="
<< "<!3><TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0 WIDTH=\""
<< table_width << "\">" << ind_newline
<< "<TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=\""
<< table_first_col + (big_col1 ? (table_second_col+table_third_col) :0)
<< "%" << ( big_col1 ? " COLSPAN=3>" : " NOWRAP>")
<< ind_newline << "<I><NOBR>" << outdent << ind_newline;
<< "%\"" << ( big_col1 ? " COLSPAN=3>" : " NOWRAP>")
<< ind_newline << "<I class=\"nowrap\">" << outdent << ind_newline;
}
void three_cols_html_premature_end( ostream& out) {
out << indent << ind_newline << store_remember_font() << "</I></NOBR>"
out << indent << ind_newline << store_remember_font() << "</I>"
<< ind_newline << "</TD></TR>" << ind_newline
<< "</TABLE><!3>" << outdent << outdent << ind_newline;
}
void three_cols_html_second( ostream& out, bool big_col1, bool big_col2) {
out << indent << ind_newline << store_remember_font() << "</I></NOBR>"
out << indent << ind_newline << store_remember_font() << "</I>"
<< ind_newline << "</TD>";
if ( big_col1)
out << "</TR><TR><TD WIDTH=" << table_first_col << "% NOWRAP></TD>";
out << "<TD ALIGN=LEFT VALIGN=TOP WIDTH="
out << "</TR><TR><TD WIDTH=\"" << table_first_col << "%\" NOWRAP></TD>";
out << "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\""
<< table_second_col + ( big_col2 ? table_third_col : 0)
<< "% NOWRAP" << ( big_col2 ? " COLSPAN=2>" : ">")
<< ind_newline << "<I><NOBR>" << get_remember_font() << outdent
<< "%\" NOWRAP" << ( big_col2 ? " COLSPAN=2>" : ">")
<< ind_newline << "<I class=\"nowrap\">" << get_remember_font() << outdent
<< ind_newline;
}
void three_cols_html_third( ostream& out, bool big_col2, bool empty_col3) {
out << indent << ind_newline << store_remember_font() << "</I></NOBR>"
out << indent << ind_newline << store_remember_font() << "</I>"
<< ind_newline;
if ( ! big_col2)
out << "</TD>";
if ( ! empty_col3) {
if ( big_col2)
out << "</TR><TR><TD WIDTH=" << table_first_col
<< "% NOWRAP></TD><TD WIDTH=" << table_second_col
<< "% NOWRAP></TD>";
out << "<TD ALIGN=LEFT VALIGN=TOP WIDTH=" << table_third_col << "%>";
out << "</TR><TR><TD WIDTH=\"" << table_first_col
<< "%\" NOWRAP></TD><TD WIDTH=\"" << table_second_col
<< "%\" NOWRAP></TD>";
out << "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"" << table_third_col << "%\">";
}
out << outdent << ind_newline;
}
@ -145,31 +145,31 @@ void three_cols_html_new_closing( ostream& out) {
void two_cols_html_begin( ostream& out) {
current_font = it_font;
out << indent << indent << ind_newline
<< "<!2><TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0 WIDTH="
<< table_width << ">" << ind_newline
<< "<TR><TD ALIGN=LEFT VALIGN=TOP WIDTH="
<< table_2c_first_col + table_2c_second_col << "% NOWRAP COLSPAN=2>"
<< ind_newline << "<I><NOBR>" << outdent << ind_newline;
<< "<!2><TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0 WIDTH=\""
<< table_width << "\">" << ind_newline
<< "<TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=\""
<< table_2c_first_col + table_2c_second_col << "%\" NOWRAP COLSPAN=2>"
<< ind_newline << "<I class=\"nowrap\">" << outdent << ind_newline;
}
void two_cols_html_premature_end( ostream& out) {
out << indent << ind_newline << store_remember_font() <<"</I></NOBR>"
out << indent << ind_newline << store_remember_font() <<"</I>"
<< ind_newline << "</TD></TR>" << ind_newline
<< "</TABLE><!2>" << outdent << outdent << ind_newline;
}
void two_cols_html_second( ostream& out, bool empty_col2) {
out << indent << ind_newline << store_remember_font() << "</I></NOBR>"
out << indent << ind_newline << store_remember_font() << "</I>"
<< ind_newline << "</TD></TR>";
if ( ! empty_col2)
out << "<TR><TD WIDTH=" << table_2c_first_col
<< "% NOWRAP></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH="
<< table_2c_second_col << "%>";
out << "<TR><TD WIDTH=\"" << table_2c_first_col
<< "%\" NOWRAP></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=\""
<< table_2c_second_col << "%\">";
out << outdent << ind_newline;
}
void two_cols_html_new_closing( ostream& out) {
out << indent << ind_newline << store_remember_font() << "</I></NOBR>"
out << indent << ind_newline << store_remember_font() << "</I>"
<< ind_newline << "</TD></TR>" << outdent << outdent;
}
@ -1133,9 +1133,9 @@ void format_function( bool method, const char* signature,
*current_ostream << "</I></TD>";
if ( macroIsTrue( "\\ccLongParamLayout") ||
! macroIsTrue( "\\ccAlternateThreeColumn"))
*current_ostream << "</TR><TR><TD ALIGN=LEFT WIDTH="
*current_ostream << "</TR><TR><TD ALIGN=LEFT WIDTH=\""
<< table_long_param_indent
<< " NOWRAP></TD>";
<< "\" NOWRAP></TD>";
*current_ostream << "<TD ALIGN=LEFT VALIGN=TOP "
"NOWRAP><I>";
*current_ostream << get_remember_font() << ind_newline;
@ -1287,9 +1287,9 @@ void format_function( bool method, const char* signature,
*current_ostream << "</I></TD>";
if ( macroIsTrue( "\\ccLongParamLayout") ||
! macroIsTrue( "\\ccAlternateThreeColumn"))
*current_ostream << "</TR><TR><TD WIDTH="
*current_ostream << "</TR><TR><TD WIDTH=\""
<< table_long_param_indent
<< " NOWRAP></TD>";
<< "\" NOWRAP></TD>";
*current_ostream << "<TD ALIGN=LEFT VALIGN=TOP "
"NOWRAP><I>";
*current_ostream << get_remember_font() << ind_newline;
@ -1904,9 +1904,9 @@ void format_constructor( const char* signature) {
*current_ostream << "</I></TD>";
if ( macroIsTrue( "\\ccLongParamLayout") ||
! macroIsTrue( "\\ccAlternateThreeColumn"))
*current_ostream << "</TR><TR><TD WIDTH="
*current_ostream << "</TR><TR><TD WIDTH=\""
<< table_long_param_indent
<< " NOWRAP></TD>";
<< "\" NOWRAP></TD>";
*current_ostream << "<TD ALIGN=LEFT VALIGN=TOP "
"NOWRAP><I>";
*current_ostream << get_remember_font() << ind_newline;

View File

@ -700,7 +700,7 @@
%% #1 == ccCategory
%% #2 == ccRefName
\newcommand{\lcDrawRefTabs}[2]{%
\lcRawHtml{<TABLE ALIGN=RIGHT><TR><TD><IMG ALIGN=TOP SRC="cc_#XC1.gif">}%
\lcRawHtml{<TABLE ALIGN=RIGHT><TR><TD><IMG ALIGN=TOP SRC="cc_#XC1.gif" ALT="#XC1">}%
\lcRawHtml{</TD></TR></TABLE>
}
}
@ -908,7 +908,7 @@
}
%% Tricky definition, since we must have % signs in it.
\newcommand{\lciTwoColsSecond}{\lcRawHtml{<TR><TD WIDTH=50}\%\lcRawHtml{ NOWRAP></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=50}\%\lcRawHtml{>
\newcommand{\lciTwoColsSecond}{\lcRawHtml{<TR><TD WIDTH="50}\%\lcRawHtml{" NOWRAP></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH="50}\%\lcRawHtml{">
}}
\newcommand{\lciTwoColsEnd}{\lcRawHtml{
<P></TD></TR>

View File

@ -449,9 +449,9 @@
% | * Accents and Special Symbols
% +--------------------------------------------------------------------------
\newcommand{\dag}{%
\lcRawHtml{<IMG BORDER=0 WIDTH=5 HEIGHT=17 ALIGN=BOTTOM SRC="cc_dag.gif">}}
\lcRawHtml{<IMG ALT="dag" BORDER=0 WIDTH=5 HEIGHT=17 ALIGN=BOTTOM SRC="cc_dag.gif">}}
\newcommand{\ddag}{%
\lcRawHtml{<IMG BORDER=0 WIDTH=5 HEIGHT=17 ALIGN=BOTTOM SRC="cc_ddag.gif">}}
\lcRawHtml{<IMG ALT="ddag" BORDER=0 WIDTH=5 HEIGHT=17 ALIGN=BOTTOM SRC="cc_ddag.gif">}}
\newcommand{\S}{\lcRawHtml{&sect;}}
\newcommand{\P}{\lcRawHtml{&para;}}
@ -476,13 +476,13 @@
\newcommand{\O}{\lcRawHtml{&Oslash;}}
\newcommand{\l}{%
\lcRawHtml{<IMG BORDER=0 WIDTH=4 HEIGHT=13 ALIGN=BOTTOM SRC="cc_lowercase_l.gif">}}
\lcRawHtml{<IMG ALT="l" BORDER=0 WIDTH=4 HEIGHT=13 ALIGN=BOTTOM SRC="cc_lowercase_l.gif">}}
\newcommand{\L}{%
\lcRawHtml{<IMG BORDER=0 WIDTH=9 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_L.gif">}}
\lcRawHtml{<IMG ALT="L" BORDER=0 WIDTH=9 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_L.gif">}}
\newcommand{\oe}{%
\lcRawHtml{<IMG BORDER=0 WIDTH=12 HEIGHT=8 ALIGN=BOTTOM SRC="cc_lowercase_oe.gif">}}
\lcRawHtml{<IMG ALT="oe" BORDER=0 WIDTH=12 HEIGHT=8 ALIGN=BOTTOM SRC="cc_lowercase_oe.gif">}}
\newcommand{\OE}{%
\lcRawHtml{<IMG BORDER=0 WIDTH=16 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_OE.gif">}}
\lcRawHtml{<IMG ALT="OE" BORDER=0 WIDTH=16 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_OE.gif">}}
% +--------------------------------------------------------------------------
% | * Greek alphabet: following Table 3.3 page 41 in Lamport.
@ -494,60 +494,60 @@
\newcommand{\epsilon}{\lcRawHtml{&epsilon;}}
\newcommand{\varepsilon}{\lcRawHtml{&epsilon;}}
\newcommand{\zeta}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_zeta.gif">}}
{<IMG ALT="zeta" BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_zeta.gif">}}
\newcommand{\eta}{\lcRawHtml{&eta;}}
\newcommand{\theta}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=6 HEIGHT=13 ALIGN=BOTTOM SRC="cc_lowercase_theta.gif">}}
{<IMG ALT="theta" BORDER=0 WIDTH=6 HEIGHT=13 ALIGN=BOTTOM SRC="cc_lowercase_theta.gif">}}
\newcommand{\vartheta}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_vartheta.gif">}}
{<IMG ALT="vartheta" BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_vartheta.gif">}}
\newcommand{\iota}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=4 HEIGHT=8 ALIGN=BOTTOM SRC="cc_iota.gif">}}
{<IMG ALT="iota" BORDER=0 WIDTH=4 HEIGHT=8 ALIGN=BOTTOM SRC="cc_iota.gif">}}
\newcommand{\kappa}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=8 HEIGHT=8 ALIGN=BOTTOM SRC="cc_kappa.gif">}}
{<IMG ALT="kappa" BORDER=0 WIDTH=8 HEIGHT=8 ALIGN=BOTTOM SRC="cc_kappa.gif">}}
\newcommand{\lambda}{\lcRawHtml{&lambda;}}
\newcommand{\mu}{\lcRawHtml{&micro;}}
%%\newcommand{\mu}{\lcRawHtml%
%% {<IMG BORDER=0 WIDTH=9 HEIGHT=17 ALIGN=MIDDLE SRC="cc_lowercase_mu.gif">}}
\newcommand{\nu}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=7 HEIGHT=8 ALIGN=BOTTOM SRC="cc_nu.gif">}}
{<IMG ALT="nu" BORDER=0 WIDTH=7 HEIGHT=8 ALIGN=BOTTOM SRC="cc_nu.gif">}}
\newcommand{\xi}{\lcRawHtml{&xi;}}
\newcommand{\pi}{\lcRawHtml{&pi;}}
\newcommand{\varpi}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=13 HEIGHT=8 ALIGN=BOTTOM SRC="cc_varpi.gif">}}
{<IMG ALT="varpi" BORDER=0 WIDTH=13 HEIGHT=8 ALIGN=BOTTOM SRC="cc_varpi.gif">}}
\newcommand{\rho}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=7 HEIGHT=17 ALIGN=MIDDLE SRC="cc_rho.gif">}}
{<IMG ALT="rho" BORDER=0 WIDTH=7 HEIGHT=17 ALIGN=MIDDLE SRC="cc_rho.gif">}}
\newcommand{\varrho}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=6 HEIGHT=17 ALIGN=MIDDLE SRC="cc_varrho.gif">}}
{<IMG ALT="varrho" BORDER=0 WIDTH=6 HEIGHT=17 ALIGN=MIDDLE SRC="cc_varrho.gif">}}
\newcommand{\sigma}{\lcRawHtml{&sigma;}}
\newcommand{\varsigma}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=5 HEIGHT=17 ALIGN=MIDDLE SRC="cc_varsigma.gif">}}
{<IMG ALT="varsigma" BORDER=0 WIDTH=5 HEIGHT=17 ALIGN=MIDDLE SRC="cc_varsigma.gif">}}
\newcommand{\tau}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=8 HEIGHT=8 ALIGN=BOTTOM SRC="cc_tau.gif">}}
{<IMG ALT="tau" BORDER=0 WIDTH=8 HEIGHT=8 ALIGN=BOTTOM SRC="cc_tau.gif">}}
\newcommand{\upsilon}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=8 HEIGHT=8 ALIGN=BOTTOM SRC="cc_lowercase_upsilon.gif">}}
{<IMG ALT="upsilon" BORDER=0 WIDTH=8 HEIGHT=8 ALIGN=BOTTOM SRC="cc_lowercase_upsilon.gif">}}
\newcommand{\phi}{\lcRawHtml{&Phi;}}
\newcommand{\varphi}{\lcRawHtml{&phi;}}
\newcommand{\chi}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=11 HEIGHT=17 ALIGN=MIDDLE SRC="cc_chi.gif">}}
{<IMG ALT="chi" BORDER=0 WIDTH=11 HEIGHT=17 ALIGN=MIDDLE SRC="cc_chi.gif">}}
\newcommand{\psi}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=10 HEIGHT=27 ALIGN=MIDDLE SRC="cc_lowercase_psi.gif">}}
{<IMG ALT="psi" BORDER=0 WIDTH=10 HEIGHT=27 ALIGN=MIDDLE SRC="cc_lowercase_psi.gif">}}
\newcommand{\omega}{\lcRawHtml{&omega;}}
\newcommand{\Gamma}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=9 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Gamma.gif">}}
{<IMG ALT="Gamma" BORDER=0 WIDTH=9 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Gamma.gif">}}
\newcommand{\Delta}{\lcRawHtml{&Delta;}}
\newcommand{\Theta}{\lcRawHtml{&Theta;}}
\newcommand{\Lambda}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Lambda.gif">}}
{<IMG ALT="Lambda" BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Lambda.gif">}}
\newcommand{\Xi}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=9 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Xi.gif">}}
{<IMG ALT="Xi" BORDER=0 WIDTH=9 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Xi.gif">}}
\newcommand{\Pi}{\lcRawHtml{&Pi;}}
\newcommand{\Sigma}{\lcRawHtml{&Sigma;}}
\newcommand{\Upsilon}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Upsilon.gif">}}
{<IMG ALT="Upsilon" BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Upsilon.gif">}}
\newcommand{\Phi}{\lcRawHtml{&Phi;}}
\newcommand{\Psi}{\lcRawHtml%
{<IMG BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Psi.gif">}}
{<IMG ALT="Psi" BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Psi.gif">}}
\newcommand{\Omega}{\lcRawHtml{&Omega;}}
% +--------------------------------------------------------------------------
@ -565,50 +565,50 @@
\newcommand{\lciMathbb}{} % dummy, supporting other chars/macros as argument
\newcommand{\lciMathbbA}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_A.gif"> }}
{< IMG ALT="A" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_A.gif"> }}
\newcommand{\lciMathbbB}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_B.gif"> }}
{< IMG ALT="B" BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_B.gif"> }}
\newcommand{\lciMathbbC}{\lcRawHtml{<span class="sym">&#x2102;</span>}}
\newcommand{\lciMathbbD}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_D.gif"> }}
{< IMG ALT="D" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_D.gif"> }}
\newcommand{\lciMathbbE}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_E.gif"> }}
{< IMG ALT="E" BORDER=0 WIDTH=12 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_E.gif"> }}
\newcommand{\lciMathbbF}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_F.gif"> }}
{< IMG ALT="F" BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_F.gif"> }}
\newcommand{\lciMathbbG}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_G.gif"> }}
{< IMG ALT="G" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_G.gif"> }}
\newcommand{\lciMathbbH}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_H.gif"> }}
{< IMG ALT="H" BORDER=0 WIDTH=14 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_H.gif"> }}
\newcommand{\lciMathbbI}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=7 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_I.gif"> }}
{< IMG ALT="I" BORDER=0 WIDTH=7 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_I.gif"> }}
\newcommand{\lciMathbbJ}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=21 ALIGN=MIDDLE SRC="cc_mathbb_J.gif"> }}
{< IMG ALT="J" BORDER=0 WIDTH=9 HEIGHT=21 ALIGN=MIDDLE SRC="cc_mathbb_J.gif"> }}
\newcommand{\lciMathbbK}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_K.gif"> }}
{< IMG ALT="K" BORDER=0 WIDTH=14 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_K.gif"> }}
\newcommand{\lciMathbbL}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_L.gif"> }}
{< IMG ALT="L" BORDER=0 WIDTH=12 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_L.gif"> }}
\newcommand{\lciMathbbM}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=18 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_M.gif"> }}
{< IMG ALT="M" BORDER=0 WIDTH=18 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_M.gif"> }}
\newcommand{\lciMathbbN}{\lcRawHtml{<span class="sym">&#x2115;</span>}}
\newcommand{\lciMathbbO}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=20 ALIGN=MIDDLE SRC="cc_mathbb_O.gif"> }}
{< IMG ALT="O" BORDER=0 WIDTH=12 HEIGHT=20 ALIGN=MIDDLE SRC="cc_mathbb_O.gif"> }}
\newcommand{\lciMathbbP}{\lcRawHtml{<span class="sym">&#x2119;</span>}}
\newcommand{\lciMathbbQ}{\lcRawHtml{<span class="sym">&#x211A;</span>}}
\newcommand{\lciMathbbR}{\lcRawHtml{<span class="sym">&#x211D;</span>}}
\newcommand{\lciMathbbS}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=8 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_S.gif"> }}
{< IMG ALT="S" BORDER=0 WIDTH=8 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_S.gif"> }}
\newcommand{\lciMathbbT}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_T.gif"> }}
{< IMG ALT="T" BORDER=0 WIDTH=11 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_T.gif"> }}
\newcommand{\lciMathbbU}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_U.gif"> }}
{< IMG ALT="U" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_U.gif"> }}
\newcommand{\lciMathbbV}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_V.gif"> }}
{< IMG ALT="V" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_V.gif"> }}
\newcommand{\lciMathbbW}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=18 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_W.gif"> }}
{< IMG ALT="W" BORDER=0 WIDTH=18 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_W.gif"> }}
\newcommand{\lciMathbbX}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_X.gif"> }}
{< IMG ALT="X" BORDER=0 WIDTH=14 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_X.gif"> }}
\newcommand{\lciMathbbY}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_Y.gif"> }}
{< IMG ALT="Y" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mathbb_Y.gif"> }}
\newcommand{\lciMathbbZ}{\lcRawHtml{<span class="sym">&#x2124;</span>}}
% +--------------------------------------------------------------------------
@ -630,62 +630,62 @@
\newcommand{\times}{\lcRawHtml{ &times; }}
\newcommand{\div}{\lcRawHtml{ &divide; }}
\newcommand{\mp}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_mp.gif"> }}
{< IMG ALT="mp" BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_mp.gif"> }}
\newcommand{\ast}{\lcRawHtml{ &#8727; }}
\newcommand{\star}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=4 HEIGHT=2 ALIGN=BOTTOM SRC="cc_star.gif"> }}
{< IMG ALT="star" BORDER=0 WIDTH=4 HEIGHT=2 ALIGN=BOTTOM SRC="cc_star.gif"> }}
\newcommand{\circ}{\lcRawHtml{&deg;}}
\newcommand{\bullet}{\lcRawHtml{&bull; }}
\newcommand{\cap}{\lcRawHtml{ <span class="sym">&cap;</span> }}
\newcommand{\cup}{\lcRawHtml{ <span class="sym">&cup;</span> }}
\newcommand{\uplus}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_uplus.gif"> }}
{< IMG ALT="uplus" BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_uplus.gif"> }}
\newcommand{\sqcap}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_sqcap.gif"> }}
{< IMG ALT="sqcap" BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_sqcap.gif"> }}
\newcommand{\sqcup}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_sqcup.gif"> }}
{< IMG ALT="sqcup" BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_sqcup.gif"> }}
\newcommand{\vee}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_vee.gif"> }}
{< IMG ALT="vee" BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_vee.gif"> }}
\newcommand{\wedge}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_wedge.gif"> }}
{< IMG ALT="wedge" BORDER=0 WIDTH=9 HEIGHT=11 ALIGN=BOTTOM SRC="cc_wedge.gif"> }}
\newcommand{\setminus}{\lcRawHtml{ \ }}
\newcommand{\wr}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=2 HEIGHT=21 ALIGN=MIDDLE SRC="cc_wr.gif"> }}
{< IMG ALT="wr" BORDER=0 WIDTH=2 HEIGHT=21 ALIGN=MIDDLE SRC="cc_wr.gif"> }}
\newcommand{\diamond}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=7 HEIGHT=7 ALIGN=BOTTOM SRC="cc_lowercase_diamond.gif"> }}
{< IMG ALT="diamond" BORDER=0 WIDTH=7 HEIGHT=7 ALIGN=BOTTOM SRC="cc_lowercase_diamond.gif"> }}
\newcommand{\bigtriangleup}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=21 ALIGN=MIDDLE SRC="cc_bigtriangleup.gif"> }}
{< IMG ALT="bigtriangleup" BORDER=0 WIDTH=13 HEIGHT=21 ALIGN=MIDDLE SRC="cc_bigtriangleup.gif"> }}
\newcommand{\bigtriangledown}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=21 ALIGN=MIDDLE SRC="cc_bigtriangledown.gif"> }}
{< IMG ALT="bigtriangledown" BORDER=0 WIDTH=13 HEIGHT=21 ALIGN=MIDDLE SRC="cc_bigtriangledown.gif"> }}
\newcommand{\triangleleft}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=6 HEIGHT=7 ALIGN=BOTTOM SRC="cc_triangleleft.gif"> }}
{< IMG ALT="triangleleft" BORDER=0 WIDTH=6 HEIGHT=7 ALIGN=BOTTOM SRC="cc_triangleleft.gif"> }}
\newcommand{\triangleright}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=6 HEIGHT=7 ALIGN=BOTTOM SRC="cc_triangleright.gif"> }}
{< IMG ALT="triangleright" BORDER=0 WIDTH=6 HEIGHT=7 ALIGN=BOTTOM SRC="cc_triangleright.gif"> }}
\newcommand{\lhd}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_lhd.gif"> }}
{< IMG ALT="lhd" BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_lhd.gif"> }}
\newcommand{\rhd}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_rhd.gif"> }}
{< IMG ALT="rhd" BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_rhd.gif"> }}
\newcommand{\unlhd}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_unlhd.gif"> }}
{< IMG ALT="unlhd" BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_unlhd.gif"> }}
\newcommand{\unrhd}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_unrhd.gif"> }}
{< IMG ALT="unrhd" BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_unrhd.gif"> }}
\newcommand{\oplus}{\lcRawHtml{ <span class="sym">&oplus;</span> }}
\newcommand{\ominus}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_ominus.gif"> }}
{< IMG ALT="ominus" BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_ominus.gif"> }}
\newcommand{\otimes}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_otimes.gif"> }}
{< IMG ALT="otimes" BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_otimes.gif"> }}
\newcommand{\oslash}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_oslash.gif"> }}
{< IMG ALT="oslash" BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_oslash.gif"> }}
\newcommand{\odot}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_odot.gif"> }}
{< IMG ALT="odot" BORDER=0 WIDTH=11 HEIGHT=23 ALIGN=MIDDLE SRC="cc_odot.gif"> }}
\newcommand{\bigcirc}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=27 ALIGN=MIDDLE SRC="cc_bigcirc.gif"> }}
{< IMG ALT="bigcirc" BORDER=0 WIDTH=15 HEIGHT=27 ALIGN=MIDDLE SRC="cc_bigcirc.gif"> }}
\newcommand{\dagger}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=5 HEIGHT=27 ALIGN=MIDDLE SRC="cc_dagger.gif"> }}
{< IMG ALT="dagger" BORDER=0 WIDTH=5 HEIGHT=27 ALIGN=MIDDLE SRC="cc_dagger.gif"> }}
\newcommand{\ddagger}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=5 HEIGHT=27 ALIGN=MIDDLE SRC="cc_ddagger.gif"> }}
{< IMG ALT="ddagger" BORDER=0 WIDTH=5 HEIGHT=27 ALIGN=MIDDLE SRC="cc_ddagger.gif"> }}
\newcommand{\amalg}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_amalg.gif"> }}
{< IMG ALT="amalg" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_amalg.gif"> }}
% +--------------------------------------------------------------------------
% | * Relation symbols following Table 3.5 page 43 in Lamport.
@ -695,130 +695,130 @@
\newcommand{\leq}{\lcRawHtml{ <span class="sym">&le;</span> }}
\newcommand{\prec}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_prec.gif"> }}
{< IMG ALT="prec" BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_prec.gif"> }}
\newcommand{\preceq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_preceq.gif"> }}
{< IMG ALT="preceq" BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_preceq.gif"> }}
\newcommand{\ll}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=25 ALIGN=MIDDLE SRC="cc_ll.gif"> }}
{< IMG ALT="ll" BORDER=0 WIDTH=15 HEIGHT=25 ALIGN=MIDDLE SRC="cc_ll.gif"> }}
\newcommand{\subset}{\lcRawHtml{ <span class="sym">&sub;</span> }}
\newcommand{\subseteq}{\lcRawHtml{ <span class="sym">&sube;</span> }}
\newcommand{\sqsubset}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=21 ALIGN=MIDDLE SRC="cc_sqsubset.gif"> }}
{< IMG ALT="sqsubset" BORDER=0 WIDTH=12 HEIGHT=21 ALIGN=MIDDLE SRC="cc_sqsubset.gif"> }}
\newcommand{\sqsubseteq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=25 ALIGN=MIDDLE SRC="cc_sqsubseteq.gif"> }}
{< IMG ALT="sqsubseteq" BORDER=0 WIDTH=12 HEIGHT=25 ALIGN=MIDDLE SRC="cc_sqsubseteq.gif"> }}
\newcommand{\in}{\lcRawHtml{ <span class="sym">&isin;</span> }}
\newcommand{\vdash}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_vdash.gif"> }}
{< IMG ALT="vdash" BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_vdash.gif"> }}
\newcommand{\geq}{\lcRawHtml{ <span class="sym">&ge;</span> }}
\newcommand{\succ}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_succ.gif"> }}
{< IMG ALT="succ" BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_succ.gif"> }}
\newcommand{\succeq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_succeq.gif"> }}
{< IMG ALT="succeq" BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_succeq.gif"> }}
\newcommand{\gg}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=25 ALIGN=MIDDLE SRC="cc_gg.gif"> }}
{< IMG ALT="gg" BORDER=0 WIDTH=15 HEIGHT=25 ALIGN=MIDDLE SRC="cc_gg.gif"> }}
\newcommand{\supset}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_supset.gif"> }}
{< IMG ALT="supset" BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_supset.gif"> }}
\newcommand{\supseteq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_supseteq.gif"> }}
{< IMG ALT="supseteq" BORDER=0 WIDTH=11 HEIGHT=25 ALIGN=MIDDLE SRC="cc_supseteq.gif"> }}
\newcommand{\sqsupset}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=21 ALIGN=MIDDLE SRC="cc_sqsupset.gif"> }}
{< IMG ALT="sqsupset" BORDER=0 WIDTH=12 HEIGHT=21 ALIGN=MIDDLE SRC="cc_sqsupset.gif"> }}
\newcommand{\sqsupseteq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=25 ALIGN=MIDDLE SRC="cc_sqsupseteq.gif"> }}
{< IMG ALT="sqsupseteq" BORDER=0 WIDTH=12 HEIGHT=25 ALIGN=MIDDLE SRC="cc_sqsupseteq.gif"> }}
\newcommand{\ni}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=21 ALIGN=MIDDLE SRC="cc_ni.gif"> }}
{< IMG ALT="ni" BORDER=0 WIDTH=9 HEIGHT=21 ALIGN=MIDDLE SRC="cc_ni.gif"> }}
\newcommand{\dashv}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_dashv.gif"> }}
{< IMG ALT="dashv" BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_dashv.gif"> }}
\newcommand{\equiv}{\lcRawHtml{ <span class="sym">&equiv;</span> }}
\newcommand{\sim}{\lcRawHtml{ <span class="sym">&sim;</span> }}
\newcommand{\simeq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=8 ALIGN=BOTTOM SRC="cc_simeq.gif"> }}
{< IMG ALT="simeq" BORDER=0 WIDTH=11 HEIGHT=8 ALIGN=BOTTOM SRC="cc_simeq.gif"> }}
\newcommand{\asymp}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=9 ALIGN=BOTTOM SRC="cc_asymp.gif"> }}
{< IMG ALT="asymp" BORDER=0 WIDTH=11 HEIGHT=9 ALIGN=BOTTOM SRC="cc_asymp.gif"> }}
\newcommand{\approx}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=10 ALIGN=BOTTOM SRC="cc_approx.gif"> }}
{< IMG ALT="approx" BORDER=0 WIDTH=11 HEIGHT=10 ALIGN=BOTTOM SRC="cc_approx.gif"> }}
\newcommand{\cong}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_cong.gif"> }}
{< IMG ALT="cong" BORDER=0 WIDTH=11 HEIGHT=21 ALIGN=MIDDLE SRC="cc_cong.gif"> }}
\newcommand{\neq}{\lcRawHtml{ <span class="sym">&ne;</span> }}
\newcommand{\ne}{\lcRawHtml{ <span class="sym">&ne;</span> }}
\newcommand{\doteq}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=9 ALIGN=BOTTOM SRC="cc_doteq.gif"> }}
{< IMG ALT="doteq" BORDER=0 WIDTH=11 HEIGHT=9 ALIGN=BOTTOM SRC="cc_doteq.gif"> }}
\newcommand{\notin}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=37 ALIGN=MIDDLE SRC="cc_notin.gif"> }}
{< IMG ALT="notin" BORDER=0 WIDTH=9 HEIGHT=37 ALIGN=MIDDLE SRC="cc_notin.gif"> }}
\newcommand{\models}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=29 ALIGN=MIDDLE SRC="cc_models.gif"> }}
{< IMG ALT="models" BORDER=0 WIDTH=12 HEIGHT=29 ALIGN=MIDDLE SRC="cc_models.gif"> }}
\newcommand{\perp}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=11 ALIGN=BOTTOM SRC="cc_perp.gif"> }}
{< IMG ALT="perp" BORDER=0 WIDTH=11 HEIGHT=11 ALIGN=BOTTOM SRC="cc_perp.gif"> }}
\newcommand{\mid}{\lcRawHtml{ <span class="sym">|</span> }}
\newcommand{\parallel}{\lcRawHtml{<span class="sym">||</span>}}
\newcommand{\bowtie}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=7 ALIGN=BOTTOM SRC="cc_bowtie.gif"> }}
{< IMG ALT="bowtie" BORDER=0 WIDTH=12 HEIGHT=7 ALIGN=BOTTOM SRC="cc_bowtie.gif"> }}
\newcommand{\Join}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=10 HEIGHT=11 ALIGN=BOTTOM SRC="cc_Join.gif"> }}
{< IMG ALT="Join" BORDER=0 WIDTH=10 HEIGHT=11 ALIGN=BOTTOM SRC="cc_Join.gif"> }}
\newcommand{\smile}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=4 ALIGN=BOTTOM SRC="cc_smile.gif"> }}
{< IMG ALT="smile" BORDER=0 WIDTH=15 HEIGHT=4 ALIGN=BOTTOM SRC="cc_smile.gif"> }}
\newcommand{\frown}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=4 ALIGN=BOTTOM SRC="cc_frown.gif"> }}
{< IMG ALT="frown" BORDER=0 WIDTH=15 HEIGHT=4 ALIGN=BOTTOM SRC="cc_frown.gif"> }}
\newcommand{\propto}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=8 ALIGN=BOTTOM SRC="cc_propto.gif"> }}
{< IMG ALT="propto" BORDER=0 WIDTH=12 HEIGHT=8 ALIGN=BOTTOM SRC="cc_propto.gif"> }}
% +--------------------------------------------------------------------------
% | * Arrow symbols following Table 3.6 page 43 in Lamport.
% +--------------------------------------------------------------------------
\newcommand{\leftarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=9 ALIGN=BOTTOM SRC="cc_lowercase_leftarrow.gif"> }}
{< IMG ALT="leftarrow" BORDER=0 WIDTH=15 HEIGHT=9 ALIGN=BOTTOM SRC="cc_lowercase_leftarrow.gif"> }}
\newcommand{\Leftarrow}{\lcRawHtml{ <span class="sym">&lArr;</span> }}
\newcommand{\rightarrow}{\lcRawHtml{ <span class="sym">&rarr;</span> }}
\newcommand{\Rightarrow}{\lcRawHtml{ <span class="sym">&rArr;</span> }}
\newcommand{\leftrightarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=9 ALIGN=BOTTOM SRC="cc_lowercase_leftrightarrow.gif"> }}
{< IMG ALT="leftrightarrow" BORDER=0 WIDTH=15 HEIGHT=9 ALIGN=BOTTOM SRC="cc_lowercase_leftrightarrow.gif"> }}
\newcommand{\Leftrightarrow}{\lcRawHtml{ <span class="sym">&hArr;</span> }}
\newcommand{\mapsto}{\lcRawHtml{ <span class="sym">&#8614;</span> }}
\newcommand{\hookleftarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=17 HEIGHT=9 ALIGN=BOTTOM SRC="cc_hookleftarrow.gif"> }}
{< IMG ALT="hookleftarrow" BORDER=0 WIDTH=17 HEIGHT=9 ALIGN=BOTTOM SRC="cc_hookleftarrow.gif"> }}
\newcommand{\leftharpoonup}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_leftharpoonup.gif"> }}
{< IMG ALT="leftharpoonup" BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_leftharpoonup.gif"> }}
\newcommand{\leftharpoondown}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_leftharpoondown.gif"> }}
{< IMG ALT="leftharpoondown" BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_leftharpoondown.gif"> }}
\newcommand{\rightleftharpoons}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=24 ALIGN=MIDDLE SRC="cc_rightleftharpoons.gif"> }}
{< IMG ALT="rightleftharpoons" BORDER=0 WIDTH=15 HEIGHT=24 ALIGN=MIDDLE SRC="cc_rightleftharpoons.gif"> }}
\newcommand{\longleftarrow}{\lcRawHtml{ <span class="sym">&larr;</span> }}
\newcommand{\Longleftarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=25 HEIGHT=11 ALIGN=BOTTOM SRC="cc_uppercase_Longleftarrow.gif"> }}
{< IMG ALT="Longleftarrow" BORDER=0 WIDTH=25 HEIGHT=11 ALIGN=BOTTOM SRC="cc_uppercase_Longleftarrow.gif"> }}
\newcommand{\longrightarrow}{\lcRawHtml{ <span class="sym">&rarr;</span> }}
\newcommand{\Longrightarrow}{\lcRawHtml{ <span class="sym">&rArr;</span> }}
\newcommand{\longleftrightarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=30 HEIGHT=9 ALIGN=BOTTOM SRC="cc_lowercase_longleftrightarrow.gif"> }}
{< IMG ALT="longleftrightarrow" BORDER=0 WIDTH=30 HEIGHT=9 ALIGN=BOTTOM SRC="cc_lowercase_longleftrightarrow.gif"> }}
\newcommand{\Longleftrightarrow}{\lcRawHtml{ <span class="sym">&hArr;</span> }}
\newcommand{\longmapsto}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=26 HEIGHT=9 ALIGN=BOTTOM SRC="cc_longmapsto.gif"> }}
{< IMG ALT="longmapsto" BORDER=0 WIDTH=26 HEIGHT=9 ALIGN=BOTTOM SRC="cc_longmapsto.gif"> }}
\newcommand{\hookrightarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=17 HEIGHT=9 ALIGN=BOTTOM SRC="cc_hookrightarrow.gif"> }}
{< IMG ALT="hookrightarrow" BORDER=0 WIDTH=17 HEIGHT=9 ALIGN=BOTTOM SRC="cc_hookrightarrow.gif"> }}
\newcommand{\rightharpoonup}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_rightharpoonup.gif"> }}
{< IMG ALT="rightharpoonup" BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_rightharpoonup.gif"> }}
\newcommand{\rightharpoondown}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_rightharpoondown.gif"> }}
{< IMG ALT="rightharpoondown" BORDER=0 WIDTH=15 HEIGHT=5 ALIGN=BOTTOM SRC="cc_rightharpoondown.gif"> }}
\newcommand{\leadsto}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=16 HEIGHT=7 ALIGN=BOTTOM SRC="cc_leadsto.gif"> }}
{< IMG ALT="leadsto" BORDER=0 WIDTH=16 HEIGHT=7 ALIGN=BOTTOM SRC="cc_leadsto.gif"> }}
\newcommand{\uparrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_lowercase_uparrow.gif"> }}
{< IMG ALT="uparrow" BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_lowercase_uparrow.gif"> }}
\newcommand{\Uparrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=10 HEIGHT=25 ALIGN=MIDDLE SRC="cc_uppercase_Uparrow.gif"> }}
{< IMG ALT="Uparrow" BORDER=0 WIDTH=10 HEIGHT=25 ALIGN=MIDDLE SRC="cc_uppercase_Uparrow.gif"> }}
\newcommand{\downarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_lowercase_downarrow.gif"> }}
{< IMG ALT="downarrow" BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_lowercase_downarrow.gif"> }}
\newcommand{\Downarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=10 HEIGHT=25 ALIGN=MIDDLE SRC="cc_uppercase_Downarrow.gif"> }}
{< IMG ALT="Downarrow" BORDER=0 WIDTH=10 HEIGHT=25 ALIGN=MIDDLE SRC="cc_uppercase_Downarrow.gif"> }}
\newcommand{\updownarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=7 HEIGHT=29 ALIGN=MIDDLE SRC="cc_lowercase_updownarrow.gif"> }}
{< IMG ALT="updownarrow" BORDER=0 WIDTH=7 HEIGHT=29 ALIGN=MIDDLE SRC="cc_lowercase_updownarrow.gif"> }}
\newcommand{\Updownarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=10 HEIGHT=26 ALIGN=MIDDLE SRC="cc_uppercase_Updownarrow.gif"> }}
{< IMG ALT="Updownarrow" BORDER=0 WIDTH=10 HEIGHT=26 ALIGN=MIDDLE SRC="cc_uppercase_Updownarrow.gif"> }}
\newcommand{\nearrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_nearrow.gif"> }}
{< IMG ALT="nearrow" BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_nearrow.gif"> }}
\newcommand{\searrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_searrow.gif"> }}
{< IMG ALT="searrow" BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_searrow.gif"> }}
\newcommand{\swarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_swarrow.gif"> }}
{< IMG ALT="swarrow" BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_swarrow.gif"> }}
\newcommand{\nwarrow}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_nwarrow.gif"> }}
{< IMG ALT="nwarrow" BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_nwarrow.gif"> }}
% +--------------------------------------------------------------------------
% | * Miscellaneous symbols following Table 3.7 page 43 in Lamport.
@ -830,55 +830,55 @@
\newcommand{\slash}{\verb+/+}
\newcommand{\aleph}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_aleph.gif"> }}
{< IMG ALT="aleph" BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_aleph.gif"> }}
\newcommand{\hbar}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_hbar.gif"> }}
{< IMG ALT="hbar" BORDER=0 WIDTH=8 HEIGHT=13 ALIGN=BOTTOM SRC="cc_hbar.gif"> }}
\newcommand{\imath}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=4 HEIGHT=8 ALIGN=BOTTOM SRC="cc_imath.gif"> }}
{< IMG ALT="imath" BORDER=0 WIDTH=4 HEIGHT=8 ALIGN=BOTTOM SRC="cc_imath.gif"> }}
\newcommand{\jmath}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=6 HEIGHT=17 ALIGN=MIDDLE SRC="cc_jmath.gif"> }}
{< IMG ALT="jmath" BORDER=0 WIDTH=6 HEIGHT=17 ALIGN=MIDDLE SRC="cc_jmath.gif"> }}
\newcommand{\ell}{\lcRawHtml{&#x2113;}}
\newcommand{\wp}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=9 HEIGHT=17 ALIGN=MIDDLE SRC="cc_wp.gif"> }}
{< IMG ALT="wp" BORDER=0 WIDTH=9 HEIGHT=17 ALIGN=MIDDLE SRC="cc_wp.gif"> }}
\newcommand{\Re}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=13 ALIGN=BOTTOM SRC="cc_Re.gif"> }}
{< IMG ALT="Re" BORDER=0 WIDTH=11 HEIGHT=13 ALIGN=BOTTOM SRC="cc_Re.gif"> }}
\newcommand{\Im}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=13 ALIGN=BOTTOM SRC="cc_Im.gif"> }}
{< IMG ALT="Im" BORDER=0 WIDTH=11 HEIGHT=13 ALIGN=BOTTOM SRC="cc_Im.gif"> }}
\newcommand{\mho}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=10 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mho.gif"> }}
{< IMG ALT="mho" BORDER=0 WIDTH=10 HEIGHT=12 ALIGN=BOTTOM SRC="cc_mho.gif"> }}
\newcommand{\emptyset}{\lcRawHtml{&empty;}}
\newcommand{\nabla}{\lcRawHtml{<span class="sym">&nabla;</span>}}
\newcommand{\surd}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=27 ALIGN=MIDDLE SRC="cc_surd.gif"> }}
{< IMG ALT="surd" BORDER=0 WIDTH=13 HEIGHT=27 ALIGN=MIDDLE SRC="cc_surd.gif"> }}
\newcommand{\top}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=11 ALIGN=BOTTOM SRC="cc_top.gif"> }}
{< IMG ALT="top" BORDER=0 WIDTH=11 HEIGHT=11 ALIGN=BOTTOM SRC="cc_top.gif"> }}
\newcommand{\bot}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=11 ALIGN=BOTTOM SRC="cc_bot.gif"> }}
{< IMG ALT="bot" BORDER=0 WIDTH=11 HEIGHT=11 ALIGN=BOTTOM SRC="cc_bot.gif"> }}
\newcommand{\angle}{\lcRawHtml{ <span class="sym">&ang;</span>}}
\newcommand{\forall}{\lcRawHtml{ <span class="sym">&forall;</span> }}
\newcommand{\exists}{\lcRawHtml{ <span class="sym">&exist;</span> }}
\newcommand{\flat}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=4 HEIGHT=14 ALIGN=BOTTOM SRC="cc_flat.gif"> }}
{< IMG ALT="flat" BORDER=0 WIDTH=4 HEIGHT=14 ALIGN=BOTTOM SRC="cc_flat.gif"> }}
\newcommand{\natural}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=4 HEIGHT=27 ALIGN=MIDDLE SRC="cc_natural.gif"> }}
{< IMG ALT="natural" BORDER=0 WIDTH=4 HEIGHT=27 ALIGN=MIDDLE SRC="cc_natural.gif"> }}
\newcommand{\sharp}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=4 HEIGHT=27 ALIGN=MIDDLE SRC="cc_sharp.gif"> }}
{< IMG ALT="sharp" BORDER=0 WIDTH=4 HEIGHT=27 ALIGN=MIDDLE SRC="cc_sharp.gif"> }}
\newcommand{\partial}{\lcRawHtml{&part;}}
\newcommand{\infty}{\lcRawHtml{&infin;}}
\newcommand{\Box}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=10 HEIGHT=10 ALIGN=BOTTOM SRC="cc_Box.gif"> }}
{< IMG ALT="Box" BORDER=0 WIDTH=10 HEIGHT=10 ALIGN=BOTTOM SRC="cc_Box.gif"> }}
\newcommand{\Diamond}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Diamond.gif"> }}
{< IMG ALT="Diamond" BORDER=0 WIDTH=13 HEIGHT=12 ALIGN=BOTTOM SRC="cc_uppercase_Diamond.gif"> }}
\newcommand{\triangle}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=21 ALIGN=MIDDLE SRC="cc_triangle.gif"> }}
{< IMG ALT="triangle" BORDER=0 WIDTH=13 HEIGHT=21 ALIGN=MIDDLE SRC="cc_triangle.gif"> }}
\newcommand{\clubsuit}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=13 HEIGHT=26 ALIGN=MIDDLE SRC="cc_clubsuit.gif"> }}
{< IMG ALT="clubsuit" BORDER=0 WIDTH=13 HEIGHT=26 ALIGN=MIDDLE SRC="cc_clubsuit.gif"> }}
\newcommand{\diamondsuit}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=26 ALIGN=MIDDLE SRC="cc_diamondsuit.gif"> }}
{< IMG ALT="diamondsuit" BORDER=0 WIDTH=11 HEIGHT=26 ALIGN=MIDDLE SRC="cc_diamondsuit.gif"> }}
\newcommand{\heartsuit}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=22 ALIGN=MIDDLE SRC="cc_heartsuit.gif"> }}
{< IMG ALT="heartsuit" BORDER=0 WIDTH=11 HEIGHT=22 ALIGN=MIDDLE SRC="cc_heartsuit.gif"> }}
\newcommand{\spadesuit}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=11 HEIGHT=26 ALIGN=MIDDLE SRC="cc_spadesuit.gif"> }}
{< IMG ALT="spadesuit" BORDER=0 WIDTH=11 HEIGHT=26 ALIGN=MIDDLE SRC="cc_spadesuit.gif"> }}
% +--------------------------------------------------------------------------
@ -891,14 +891,14 @@
{<span class="big_sym">&prod;</span>}}%
{\lcRawHtml{<span class="sym">&prod;</span>}}}
\newcommand{\coprod}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_coprod.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=11 HEIGHT=24 ALIGN=MIDDLE SRC="cc_coprod.gif"> }}}
{ <IMG ALT="coprod" BORDER=0 WIDTH=16 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_coprod.gif"> }}%
{\lcRawHtml{ <IMG ALT="coprod" BORDER=0 WIDTH=11 HEIGHT=24 ALIGN=MIDDLE SRC="cc_coprod.gif"> }}}
\newcommand{\int}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{<span class="big_sym">&int;</span>}}%
{\lcRawHtml{<span class="sym">&int;</span>}}}
\newcommand{\oint}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=12 HEIGHT=44 ALIGN=MIDDLE SRC="cc_big_oint.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_oint.gif"> }}}
{ <IMG ALT="oint" BORDER=0 WIDTH=12 HEIGHT=44 ALIGN=MIDDLE SRC="cc_big_oint.gif"> }}%
{\lcRawHtml{ <IMG ALT="oint" BORDER=0 WIDTH=7 HEIGHT=27 ALIGN=MIDDLE SRC="cc_oint.gif"> }}}
\newcommand{\bigcap}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{<span class="big_sym">&cap;</span>}}%
{\lcRawHtml{<span class="big_sym">&cap;</span>}}}
@ -906,26 +906,26 @@
{<span class="big_sym">&cup;</span>}}%
{\lcRawHtml{<span class="big_sym">&cup;</span>}}}
\newcommand{\bigsqcup}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigsqcup.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigsqcup.gif"> }}}
{ <IMG ALT="bigsqcup" BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigsqcup.gif"> }}%
{\lcRawHtml{ <IMG ALT="bigsqcup" BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigsqcup.gif"> }}}
\newcommand{\bigvee}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigvee.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigvee.gif"> }}}
{ <IMG ALT="bigvee" BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigvee.gif"> }}%
{\lcRawHtml{ <IMG ALT="bigvee" BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigvee.gif"> }}}
\newcommand{\bigwedge}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigwedge.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigwedge.gif"> }}}
{ <IMG ALT="bigwedge" BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigwedge.gif"> }}%
{\lcRawHtml{ <IMG ALT="bigwedge" BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigwedge.gif"> }}}
\newcommand{\bigodot}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=20 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigodot.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=14 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigodot.gif"> }}}
{ <IMG ALT="bigodot" BORDER=0 WIDTH=20 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigodot.gif"> }}%
{\lcRawHtml{ <IMG ALT="bigodot" BORDER=0 WIDTH=14 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigodot.gif"> }}}
\newcommand{\bigotimes}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=20 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigotimes.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=14 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigotimes.gif"> }}}
{ <IMG ALT="bigotimes" BORDER=0 WIDTH=20 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigotimes.gif"> }}%
{\lcRawHtml{ <IMG ALT="bigotimes" BORDER=0 WIDTH=14 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigotimes.gif"> }}}
\newcommand{\bigoplus}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=20 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigoplus.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=14 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigoplus.gif"> }}}
{ <IMG ALT="bigoplus" BORDER=0 WIDTH=20 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_bigoplus.gif"> }}%
{\lcRawHtml{ <IMG ALT="bigoplus" BORDER=0 WIDTH=14 HEIGHT=24 ALIGN=MIDDLE SRC="cc_bigoplus.gif"> }}}
\newcommand{\biguplus}{\lciIf{\lciMathModeDisplay}{\lcRawHtml%
{ <IMG BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_biguplus.gif"> }}%
{\lcRawHtml{ <IMG BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_biguplus.gif"> }}}
{ <IMG ALT="biguplus" BORDER=0 WIDTH=14 HEIGHT=29 ALIGN=MIDDLE SRC="cc_big_biguplus.gif"> }}%
{\lcRawHtml{ <IMG ALT="biguplus" BORDER=0 WIDTH=10 HEIGHT=24 ALIGN=MIDDLE SRC="cc_biguplus.gif"> }}}
% +--------------------------------------------------------------------------

View File

@ -35,6 +35,8 @@
\gdef{\lcBodyAttributes}{\lcRawHtml{bgcolor="white"}}
\gdef\lciFileSpecificCSS{}
\newcommand{\CGALManualCanonicalURL}{http://www.cgal.org/Manual/latest/doc_html/cgal_manual/}
\newcommand{\lciHtmlFileHeader}[1]{\lciHtmlFileHeaderExtra{#1}{}}
% Args: <title-text> <extra head text>
@ -46,7 +48,12 @@
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="CGAL latex_to_html converter">
<!-- by cc_extract_html, #XC2 -->
<!-- LaTeX source file: '#XC3' -->
<!-- LaTeX source file: '#XC3' -->}
% Now, add the canonical link. See:
% http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
\lcRawHtml{<link rel="canonical" href="}%
\lcRawHtmlExpanded{\CGALManualCanonicalURL}%
\lcRawHtmlExpanded{\lciOutputFilename}\lcRawHtml{">
<link href="}\lciOutputUppath\lcRawHtml{latex_to_html.css" rel="STYLESHEET">}
\lciFileSpecificCSS%
\lcRawHtml{<title>}#1\lcRawHtml{</title>}%

View File

@ -568,8 +568,7 @@ void MainWindow::on_actionSave_snapshot_triggered()
{
// save snapshot to file
QApplication::setOverrideCursor(Qt::WaitCursor);
QString filename = QFileDialog::getSaveFileName(this,tr("Save snapshot to file..."),"snapshot00.png","*.png");
viewer->saveSnapshot(filename);
viewer->saveSnapshot(false, false);
QApplication::restoreOverrideCursor();
}

View File

@ -68,6 +68,7 @@ Same for operator {\tt -,*,/,!=,<=,>,>=} as well as mixed forms with \ccc{RT} an
\ccRefIdfierPage{CGAL::make_root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::make_sqrt<RT>}\\
\ccRefIdfierPage{CGAL::compute_roots_of_2<RT,OutputIterator>}\\
\ccRefIdfierPage{CGAL::Root_of_traits<RT>}\\
\ccRefIdfierPage{AlgebraicKernelForCircles::PolynomialForCircles_2_2}\\
\ccRefIdfierPage{AlgebraicKernelForCircles}

View File

@ -21,5 +21,6 @@ algebraic numbers of degree 2 over \ccc{RT}. Moreover, the class provides
\ccSeeAlso
\ccRefIdfierPage{RootOf_2}\\
\ccRefIdfierPage{CGAL::compute_roots_of_2<RT,OutputIterator>}\\
\ccRefIdfierPage{CGAL::make_root_of_2<RT>}\\
\end{ccRefClass}

View File

@ -0,0 +1,29 @@
\begin{ccRefFunction}{compute_roots_of_2<RT,OutputIterator>}
\ccDefinition
The function \ccRefName\ solves a univariate polynomial as it is defined by the
coefficients given to the function. The solutions are written into the given
\ccc{OutputIterator}.
\ccInclude{CGAL/Root_of_traits.h}
\ccFunction{template <typename RT, typename OutputIterator>
OutputIterator
compute_roots_of_2(const RT& a, const RT& b, const RT& c, OutputIterator oit);}
{
Writes the real roots of the polynomial $aX^2+bX+c$ into $oit$ in ascending order. \\
\ccc{OutputIterator} is required to accept \ccc{Root_of_traits<RT>::Root_of_2}. \\
Multiplicities are not reported. \\
\ccPrecond{\ccc{RT} is an \ccc{IntegralDomainWithoutDivision}.}
\ccPrecond{$a\neq 0$ or $b\neq 0$.}
}
\ccSeeAlso
\ccRefIdfierPage{RootOf_2}\\
\ccRefIdfierPage{CGAL::Root_of_traits<RT>}\\
\ccRefIdfierPage{CGAL::make_root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::make_sqrt<RT>}\\
%\ccRefIdfierPage{CGAL::compute_roots_of_2<RT,OutputIterator>}\\
\ccRefIdfierPage{CGAL::Sqrt_extension<NT,ROOT>}\\
\end{ccRefFunction}

View File

@ -53,6 +53,7 @@
\ccRefIdfierPage{CGAL::Root_of_traits<RT>}\\
\ccRefIdfierPage{CGAL::make_root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::make_sqrt<RT>}\\
\ccRefIdfierPage{CGAL::compute_roots_of_2<RT,OutputIterator>}\\
\ccRefIdfierPage{CGAL::Sqrt_extension<NT,ROOT>}\\
\subsection*{Utilities}

View File

@ -50,6 +50,7 @@
\input{NumberTypeSupport_ref/Root_of_traits.tex}
\input{NumberTypeSupport_ref/make_root_of_2.tex}
\input{NumberTypeSupport_ref/make_sqrt.tex}
\input{NumberTypeSupport_ref/compute_roots_of_2.tex}
\input{NumberTypeSupport_ref/Sqrt_extension.tex}
\input{NumberTypeSupport_ref/Root_of_2.tex}

View File

@ -23,9 +23,13 @@ ring number type.
\ccPrecond{\ccc{RT} is an \ccc{IntegralDomainWithoutDivision}.}
\ccPrecond{$\gamma\geq 0$}}
\ccSeeAlso
\ccRefIdfierPage{RootOf_2}\\
\ccRefIdfierPage{CGAL::Root_of_traits<RT>}\\
%\ccRefIdfierPage{CGAL::make_root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::make_sqrt<RT>}\\
\ccRefIdfierPage{CGAL::compute_roots_of_2<RT,OutputIterator>}\\
\ccRefIdfierPage{CGAL::Sqrt_extension<NT,ROOT>}\\
\end{ccRefFunction}

View File

@ -158,7 +158,7 @@ private:
typename Interval_nt<>::Internal_protector P;
CGAL_assertion_msg(-CGAL_IA_MUL(-1.1, 10.1) != CGAL_IA_MUL(1.1, 10.1),
"Wrong rounding: did you forget the -frounding-math option if you use GCC (or -fp-model strict for Intel)?");
CGAL_assertion_msg(-CGAL_IA_DIV(-1, 10) != CGAL_IA_DIV(1, 10),
CGAL_assertion_msg(-CGAL_IA_DIV(-1., 10) != CGAL_IA_DIV(1., 10),
"Wrong rounding: did you forget the -frounding-math option if you use GCC (or -fp-model strict for Intel)?");
}
};

View File

@ -41,7 +41,6 @@ make_root_of_2(const NT &a, const NT &b, const NT &c)
return make_root_of_2(a,b,c);
}
template < class NT >
inline
typename Root_of_traits< NT >::Root_of_2
@ -60,6 +59,35 @@ make_sqrt(const NT &a)
return make_sqrt(a);
}
template < class NT , class OutputIterator>
inline
OutputIterator
compute_roots_of_2(const NT &a_, const NT &b_, const NT &c_, OutputIterator oit)
{
typedef typename Root_of_traits<NT>::Root_of_1 Root_of_1;
typedef typename Root_of_traits<NT>::Root_of_2 Root_of_2;
typename CGAL::Coercion_traits<Root_of_1,NT>::Cast cast;
Root_of_1 a(cast(a_)), b(cast(b_)), c(cast(c_));
if ( a != 0 ) {
Root_of_1 a0_ (-b/(2*a));
Root_of_1 root_(CGAL_NTS square(a0_) - c/a);
switch(CGAL::sign(root_)){
case CGAL::NEGATIVE: return oit;
case CGAL::ZERO: *oit++ = Root_of_2(a0_); return oit;
default:
// two roots
*oit++ = make_root_of_2(a0_,Root_of_1(-1),root_);
*oit++ = make_root_of_2(a0_,Root_of_1( 1),root_);
return oit;
}
}
else {
*oit++ = -c/b; return oit;
}
}
namespace internal {
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_typedef_Arithmetic_kernel,Arithmetic_kernel,false)
@ -105,7 +133,6 @@ struct Root_of_traits_helper{
}
};
private:
typedef CGAL::Algebraic_structure_traits<Root_of_2> AST;
public:
@ -159,7 +186,7 @@ public:
RT c_ = c_num * a_den * b_den;
return make_root_of_2(a_,b_,c_,smaller);
}
}
};
private:
@ -264,6 +291,14 @@ struct Root_of_traits<Interval_nt<B> >{
return a + b * CGAL_NTS sqrt(c) ;
}
};
private:
typedef CGAL::Algebraic_structure_traits<Interval_nt<B> > AST;
public:
typedef typename AST::Square Square;
typedef typename AST::Inverse Inverse;
typedef typename AST::Sqrt Make_sqrt;
};

View File

@ -29,7 +29,7 @@
namespace CGAL {
// We create a type of new node in Lazy_exact_nt's DAG
// for the make_root_of_2() operation.
// for the make_root_of_2() and solve_1(of degree 2) operation.
template <typename ET >
struct Lazy_exact_ro2

View File

@ -79,6 +79,38 @@ void test_root_of_traits(){
Root_of_2 rr = CGAL::make_sqrt(T(2))*CGAL::make_sqrt(T(2));
assert(r == rr);
}
bool is_not_exact = !CGAL::Algebraic_structure_traits<T>::Is_exact::value;
{
std::vector<Root_of_2> roots;
CGAL::compute_roots_of_2(T(1),T(0),T(-2),std::back_inserter(roots));
assert(roots.size()==2);
assert(roots[0]==-CGAL::make_sqrt(T(2)) || is_not_exact );
assert(roots[1]== CGAL::make_sqrt(T(2)) || is_not_exact );
}
{
Root_of_2 roots[2]= {Root_of_2(1),Root_of_2(1)};
CGAL::compute_roots_of_2(T(13),T(4),T(-23),roots);
assert(roots[0]==CGAL::make_root_of_2(T(13),T(4),T(-23),true) || is_not_exact );
assert(roots[1]==CGAL::make_root_of_2(T(13),T(4),T(-23),false) || is_not_exact );
}
{
std::vector<Root_of_2> roots;
CGAL::compute_roots_of_2(T(1),T(-6),T(9),std::back_inserter(roots));
assert(roots.size()==1);
assert(roots[0]==Root_of_2(3) || is_not_exact );
}
{
std::vector<Root_of_2> roots;
CGAL::compute_roots_of_2(T(1),T(0),T(2),std::back_inserter(roots));
assert(roots.size()==0);
}
{
std::vector<Root_of_2> roots;
CGAL::compute_roots_of_2(T(0),T(2),T(3),std::back_inserter(roots));
assert(roots.size()==1);
assert(roots[0]==-Root_of_2(3)/Root_of_2(2) || is_not_exact );
}
}

View File

@ -46,6 +46,11 @@ void test_root_of_traits_for_set(Integer, Rational, FWS){
int main(){
CGAL::Test::test_root_of_traits< double , double , double >();
try{// just compile and try to get as far as you can go.
CGAL::Test::test_root_of_traits< CGAL::Interval_nt<true> , CGAL::Interval_nt<true> , CGAL::Interval_nt<true> >();
CGAL::Test::test_root_of_traits< CGAL::Interval_nt<false> , CGAL::Interval_nt<false> , CGAL::Interval_nt<false> >();
}catch(...){}
#ifdef CGAL_USE_GMP
//TODO: switch to Gmpq
@ -84,6 +89,7 @@ int main(){
typedef AK::Field_with_sqrt FWS;
test_root_of_traits_for_set(Integer(),Rational(),FWS());
}
return 0;
}

View File

@ -310,7 +310,7 @@ create_riemannian_graph(
Point_vertex_handle_3 point_wrapper(point.x(), point.y(), point.z(), it);
kd_tree_points.push_back(point_wrapper);
}
std::auto_ptr<Tree> tree( new Tree(kd_tree_points.begin(), kd_tree_points.end()) );
boost::shared_ptr<Tree> tree( new Tree(kd_tree_points.begin(), kd_tree_points.end()) );
// Recover RAM
kd_tree_points.clear();

View File

@ -79,8 +79,10 @@ public:
typedef Polynomial<Coeff_> Polynomial;
typedef CGAL::Boolean_tag<1 == Dimension<Polynomial>::value> Is_univariate;
CGAL::Exponent_vector ivec((std::vector<int>)(Dimension<Polynomial>::value));
if(p.is_zero())
return *oit++ = std::make_pair(ivec,Innermost_coefficient(0));
if(p.is_zero()){
*oit++ = std::make_pair(ivec,Innermost_coefficient(0));
return oit;
}
return create_mrep(p, oit, ivec, Is_univariate());
}
};

View File

@ -25,6 +25,7 @@
#include <boost/iterator/transform_iterator.hpp>
#include <boost/iterator/zip_iterator.hpp>
#include <boost/shared_ptr.hpp>
#include <CGAL/Gmpq.h>
#include <CGAL/MP_Float.h>
@ -116,7 +117,7 @@ void write_MPS(std::ostream& out,
CGAL::print_quadratic_program(out, qp, problem_name);
}
std::auto_ptr<std::ofstream>
boost::shared_ptr<std::ofstream>
create_output_file(const char *filename, // Note: "Bernd3" and not
// "Bernd3.mps".
const char *directory,
@ -126,9 +127,9 @@ create_output_file(const char *filename, // Note: "Bernd3" and not
std::string new_name = std::string(directory) +
std::string("/") + std::string(filename) + std::string("_") +
std::string(suffix) + std::string(".mps");
return std::auto_ptr<std::ofstream>(new std::ofstream(new_name.c_str(),
std::ios_base::trunc |
std::ios_base::out));
return boost::shared_ptr<std::ofstream>(new std::ofstream(new_name.c_str(),
std::ios_base::trunc |
std::ios_base::out));
}
template<typename NT>
@ -191,7 +192,7 @@ void create_shifted_instance(const CGAL::Quadratic_program_from_mps <IT>& qp,
// output:
using boost::make_transform_iterator;
using boost::make_zip_iterator;
std::auto_ptr<std::ofstream> out = create_output_file(file, dir, "shifted");
boost::shared_ptr<std::ofstream> out = create_output_file(file, dir, "shifted");
write_MPS(*out,
"", // deduce number-type
@ -275,7 +276,7 @@ void create_free_instance(CGAL::Quadratic_program_from_mps<IT>& qp,
qp.set_u(i, false); // variable becomes free
}
// output:
std::auto_ptr<std::ofstream> out = create_output_file(file, dir, "free");
boost::shared_ptr<std::ofstream> out = create_output_file(file, dir, "free");
write_MPS(*out,
"", // deduce number-type
"Freed instance of original file",

View File

@ -149,7 +149,7 @@ int main()
q.push(&data[0]+i);
}
for (std::size_t i=0;i<10;++i){
for (unsigned int i=0;i<10;++i){
data[i].second=9-i;
q.update(&data[0]+i,true);
CGAL_assertion(q.top()->first==i);
@ -169,14 +169,14 @@ int main()
q.push(&data[0]+i);
}
for (std::size_t i=0;i<9;++i){
for (unsigned int i=0;i<9;++i){
data[i].second=10+i;
q.update(&data[0]+i,true);
CGAL_assertion(q.top()->first==i+1);
}
//revert order
for (std::size_t i=0;i<10;++i){
for (unsigned int i=0;i<10;++i){
data[9-i].second=i;
q.update(&data[0]+9-i,true);
CGAL_assertion(q.top()->first==9);

View File

@ -58,7 +58,7 @@ EOF
if [ "${TYPE}" = "demo" ] ; then
target_name="${PROJECT}_${TYPE}"
for file in `ls *.C *.cpp 2>/dev/null | sort` ; do
for file in `ls "$SOURCE_DIR"*.C "$SOURCE_DIR"*.cpp 2>/dev/null | sort` ; do
all="$all $file"
done
cat <<'EOF'
@ -87,16 +87,16 @@ EOF
EOF
if [ -d ../../include ] ; then
echo ' include_directories (BEFORE ../../include)'
if [ -d "${SOURCE_DIR}../../include" ] ; then
echo " include_directories (BEFORE \"${SOURCE_DIR}../../include\")"
echo
fi
if [ -d ../include ] ; then
echo ' include_directories (BEFORE ../include)'
if [ -d "${SOURCE_DIR}../include" ] ; then
echo " include_directories (BEFORE \"${SOURCE_DIR}../include\")"
echo
fi
if [ -d include ] ; then
echo ' include_directories (BEFORE include)'
if [ -d "${SOURCE_DIR}include" ] ; then
echo " include_directories (BEFORE \"${SOURCE_DIR}include\")"
echo
fi
cat <<EOF
@ -132,20 +132,20 @@ if ( CGAL_FOUND )
include( CGAL_CreateSingleSourceCGALProgram )
EOF
if [ -d ../../include ] ; then
echo ' include_directories (BEFORE ../../include)'
if [ -d "${SOURCE_DIR}../../include" ] ; then
echo " include_directories (BEFORE \"${SOURCE_DIR}../../include\")"
echo
fi
if [ -d ../include ] ; then
echo ' include_directories (BEFORE ../include)'
if [ -d "${SOURCE_DIR}../include" ] ; then
echo " include_directories (BEFORE \"${SOURCE_DIR}../include\")"
echo
fi
if [ -d include ] ; then
echo ' include_directories (BEFORE include)'
if [ -d "${SOURCE_DIR}include" ] ; then
echo " include_directories (BEFORE \"${SOURCE_DIR}include\")"
echo
fi
for file in `ls *.C *.cpp 2>/dev/null | sort` ; do
for file in `ls "$SOURCE_DIR"*.C "$SOURCE_DIR"*.cpp 2>/dev/null | sort` ; do
# Create an executable for each cpp that contains a function "main()"
BASE=`basename $file .C`
BASE=`basename $BASE .cpp`
@ -173,34 +173,63 @@ EOF
usage()
{
echo "Usage: cgal_create_cmake_script [TYPE]"
echo "Usage: cgal_create_cmake_script [TYPE] [--source_dir <source directory>]"
echo
echo " TYPE must be any of example, demo or test."
echo " Default is example."
echo
echo " Create a CMakeLists.txt file in the current working directory."
echo
echo " TYPE must be any of example, demo or test. The default is example."
echo
echo " If the option --source_dir is specified with a directory, the "
echo " CMakeLists.txt uses source files from that directory, otherwise "
echo " the source directory is supposed to be the current directory."
}
SOURCE_DIR=
case $# in
0) TYPE="example";;
1) TYPE=$1;;
*) usage
exit 1
esac
if [ "${TYPE}" = "example" -o "${TYPE}" = "demo" -o "${TYPE}" = "test" ]; then
ok='y'
fi
if [ -z "$ok" ]; then
echo "Invalid type: ${TYPE}. Valid values are example, demo or test"
exit 1
fi
while [ $1 ]; do
case "$1" in
-h|-help|--h|--help)
usage; exit
;;
example)
if [ -z "$TYPE" ]; then TYPE=$1; shift; else usage; exit 1; fi
;;
demo)
if [ -z "$TYPE" ]; then TYPE=$1; shift; else usage; exit 1; fi
;;
test)
if [ -z "$TYPE" ]; then TYPE=$1; shift; else usage; exit 1; fi
;;
--source_dir)
if [ -d "$2" ]; then
SOURCE_DIR=$2;
shift;
shift;
else
if [ -z "$2" ]; then
echo "Error: you must specify a directory after the --source_dir option!"
echo
else
echo "Error: \"$2\" is not a directory!"
echo
fi
usage; exit 1;
fi
;;
*)
echo "Unknown option: $1"
usage; exit 1
;;
esac
done
OUTPUTFILE=CMakeLists.txt
PROJECT=`basename $PWD`
if [ -n "$SOURCE_DIR" ]; then
PROJECT=`basename $SOURCE_DIR`
SOURCE_DIR=$SOURCE_DIR/
else
PROJECT=`basename $PWD`
fi
if [ -f ${OUTPUTFILE} ] ; then
echo "moving $OUTPUTFILE to ${OUTPUTFILE}.bak ..."

View File

@ -14,6 +14,9 @@ endif()
#option(POINT_SET_DEMO_ENABLE_FORWARD_DECL "In the Point Set demo, enable " OFF)
#mark_as_advanced(POINT_SET_DEMO_ENABLE_FORWARD_DECL)
# Let plugins be compiled in the same directory as the executable.
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
# Require packages new or improved since CGAL 3.5 beta 1
include_directories (BEFORE ../../../Installation/include/)
include_directories (BEFORE ../../../Point_set_processing_3/include)

View File

@ -6,6 +6,7 @@
class Messages_interface {
public:
virtual ~Messages_interface() {}
virtual void warning(QString) = 0;
virtual void error(QString) = 0;
virtual void information(QString) = 0;

View File

@ -9,6 +9,7 @@ class Scene_item;
class Polyhedron_demo_io_plugin_interface
{
public:
virtual ~Polyhedron_demo_io_plugin_interface() {}
virtual QStringList nameFilters() const = 0;
virtual bool canLoad() const = 0;

View File

@ -13,6 +13,7 @@ class Messages_interface;
class Polyhedron_demo_plugin_interface
{
public:
virtual ~Polyhedron_demo_plugin_interface() {}
virtual void init(QMainWindow*, Scene_interface*) {};
virtual void init(QMainWindow* mw, Scene_interface* sc, Messages_interface*) {
init(mw, sc);

View File

@ -3,6 +3,7 @@
class Scene_draw_interface {
public:
virtual ~Scene_draw_interface(){}
virtual void initializeGL() = 0;
virtual void draw() = 0;
virtual void drawWithNames() = 0;

View File

@ -2978,14 +2978,14 @@ inexact_locate(const Point & t, Face_handle start, int n_of_turns) const
}
} else if(c->neighbor(1) == prev){
prev = c;
if (inexact_orientation(p1,p2,t) == NEGATIVE) {
c = c->neighbor( 0 );
continue;
}
if (inexact_orientation(p0,p1,t) == NEGATIVE) {
c = c->neighbor( 2 );
continue;
}
if (inexact_orientation(p1,p2,t) == NEGATIVE) {
c = c->neighbor( 0 );
continue;
}
} else {
prev = c;
if (inexact_orientation(p2,p0,t) == NEGATIVE) {