• All names in the kernel traits have the dimension as a suffix. This is necessary because in some cases
(e.g., the Orientation 2 object) the absence of the suffix would cause a name conflict with an existing type
or class (e.g., the enumeration type Orientation).
• The names of generalized predicates are determined by their results. Furthermore, names are as much
as possible consistent with the current kernel and the STL. So, for example, we have objects like Has
on bounded side 2, Is degenerate 2, and Is horizontal 2. According to the current kernel we also have
Left turn 2. For reasons of consistency with STL, all “less-than”-objects start with Less , e.g., Less xy 2.
Further examples are Less distance to point 2 and Less distance to line 2. However, we have Equal
2, whereas the corresponding STL functor is called equal to. Here, we give our dimension rule higher
priority.
• The names of construction objects (category 2 above) follow the pattern Construct type d, where type d
is the type constructed, e.g., Construct point 2 and Construct line 2. The operator() of these functor
classes is overloaded. This reduces the number of names to remember drastically, while replacing one of
the constructions gets more complicated, but is still possible.
• Functors in category 3 above can be further subdivided into two classes:
– constructive procedures that construct objects whose types are known a priori
– procedures that construct objects whose types are not known a priori
The names of functors in the first class also start with Construct whenever a geometric object is con-
structed, otherwise they start with Compute . Here, real numbers are not considered to be 1-dimensional
geometric objects. For example, on the one hand we have Construct perpendicular vector 2, Construct
midpoint 3, Construct circumcenter d, Construct bisector 2, and Construct point on 3, while on the
other hand there are Compute area 2 and Compute squared length 3.
For the second class, the names of the objects describe the (generic) action, e.g. Intersect 2.
• The equality operator (operator==()) is replaced by function objects with names of the form Equal k,
where k is the dimension number (i.e., 2, 3, or d). For replacing arithmetic operators, we might also
provide Add 2, Subtract 2, Multiply 2, and Divide 2. (As mentioned above, the action determines the
name, not the result.) We think that these objects are not really needed. They are likely to be part of
primitive operations that have a corresponding function object in the traits.
In addition, for each functor the kernel traits class has a member function that returns an instance of this functor.
The name of this function should be the (uncapitalized) name of the functor followed by the suffix object.For
example, the function that retuns an instance of the Less xy 2 functor is called less xy 2 object.
File names
• File names should be chosen in the “spirit” of the naming rules given above.
• If a single geometric object, data structure, or algorithm is provided in a single file, its name (and its
capitalization) should be used for the file name. For example, the file Triangulation 2.h contains the data
structure Triangulation 2.
• If a file does not contain a single class, its name should not begin with a capital letter.
• No two files should have the same names even when capitalization is ignored. This is to prevent over-
writing of files on operating systems where file names are not case sensitive. A package that contains file
names that are the same as files already in the release will be rejected by the submission script.
• The names of files should not contain any characters not allowed by all the platforms the library supports.
In particular, it should not contain the characters ‘:’, ‘*’, or ‘ ’.
7