\ccUserChapter{Introduction} \cgal, the {\em Computational Geometry Algorithms Library}, is written in \CC\ and consists of three major parts. The first part is the kernel, which consists of constant-size non-modifiable geometric primitive objects and operations on these objects. The objects are represented both as stand-alone classes that are parameterized by a representation class, which specifies the underlying number types used for calculations and as members of the kernel classes, which allows for more flexibility and adaptability of the kernel. The second part is a collection of basic geometric data structures and algorithms, which are parameterized by traits classes that define the interface between the data structure or algorithm and the primitives they use. In many cases, the kernel classes provided in \cgal\ can be used as traits classes for these data structures and algorithms. The collection of basic geometric algorithms and data structures currently includes polygons, half-edge data structures, polyhedral surfaces, topological maps, planar maps, arrangements of curves, triangulations, convex hulls, alpha shapes, optimisation algorithms, dynamic point sets for geometric queries, and multidimensional search trees. The third part of the library consists of non-geometric support facilities, such as support for number types, STL extensions for \cgal, handles, circulators, protected access to internal representations, geometric object generators, timers, I/O stream operators and other stream support including PostScript, colors, windows, and visualization tools GeoWin, Geomview and a Qt widget for 2D \cgal\ objects. Additional documents accompanying the \cgal\ distribution are the `Installation Guide' and `The Use of \stl\ and \stl\ Extensions in \cgal', which gives a manual style introduction to \stl\ constructs such as iterators and containers, as well an extension, called circulator, used in many places in \cgal. We also recommend the standard text book by Austern~\cite{cgal:a-gps-98} for the \stl\ and its notion of \emph{concepts} and \emph{models}. Other resources for \cgal\ are the tutorials at \path|http://www.cgal.org/Tutorials/| and the user support page at \path|www.cgal.org|. \begin{ccAdvanced} Some functionality is considered more advanced. Such functionality is described in sections such as this one that are bounded by horizontal brackets. \end{ccAdvanced} \section{Namespace CGAL} All names introduced by \cgal, especially those documented in these manuals, are in a namespace called \ccc{CGAL}, which is in global scope. A user can either qualify names from \cgal\ by adding \ccc{CGAL::}, e.g., \ccc{CGAL::Point_2< CGAL::Homogeneous< int> >}, make a single name from \cgal\ visible in a scope via a \ccc{using} statement, e.g., \ccc{using CGAL::Cartesian;}, and then use this name unqualified in this scope, or even make all names from namespace \ccc{CGAL} visible in a scope with \ccc{using namespace CGAL;}. The latter, however, is likely to give raise to name conflicts and is therefore not recommended. \section{Inclusion Order of Header files} Not all compilers fully support standard header names. \cgal\ provides workarounds for these problems in \ccc{CGAL/basic.h}. Consequently, as a golden rule, you should always inlcude \ccc{CGAL/basic.h} first in your programs (or \ccc{CGAL/Cartesian.h}, or \ccc{CGAL/Homogeneous.h}, since they include \ccc{CGAL/basic.h} first). \section{Compile-time Flags to Control Inlining} \ccIndexMainItem{code optimization} \ccIndexMainItem{inlining} \ccIndexMainItem{\tt inline} Making funcitons inlined can, at times, improve the efficiency of your code. However this is not always the case and it can differ for a single function depending on the application in which it is used. Thus \cgal\ defines a set of compile-time macros that can be used to control whether certain functions are designated as inlined functions or not. The following table lists the macros and their default values, which are set in one of the \cgal\ include files. \begin{tabular}{l|l} macro name & default \\ \hline \ccc{CGAL_KERNEL_INLINE} & inline \\ \ccc{CGAL_KERNEL_MEDIUM_INLINE} & \\ \ccc{CGAL_KERNEL_LARGE_INLINE} & \\ \ccc{CGAL_MEDIUM_INLINE} & inline \\ \ccc{CGAL_LARGE_INLINE} & \\ \ccc{CGAL_HUGE_INLINE} & \end{tabular} If you wish to change the value of one or more of these macros, you can simply give it a new value when compiling. For example, to make functions that use the macro \ccc{CGAL_KERNEL_MEDIUM_INLINE} inline functions, you should set the value of this macro to \texttt{inline} instead of the default blank. \input{Introduction_ref/licenses} \input{Introduction_ref/thirdparty} \input{Introduction/checks} % extra chapter