
/*!
\ingroup PkgPolytopeDistanceDConcepts
\cgalConcept

This concept defines the requirements for traits classes of \f$ d\f$-dimensional
optimization algorithms.

\cgalHasModelsBegin
\cgalHasModels{CGAL::Polytope_distance_d_traits_2<K,ET,NT>}
\cgalHasModels{CGAL::Polytope_distance_d_traits_3<K,ET,NT>}
\cgalHasModels{CGAL::Polytope_distance_d_traits_d<K,ET,NT>}
\cgalHasModelsEnd

\sa `CGAL::Polytope_distance_d<Traits>`

*/

class PolytopeDistanceDTraits {
public:

/// \name Types
/// @{

/*!
point type used to represent the input points.
*/
typedef unspecified_type Point_d;

/*!
compile time tag to distinguish between %Cartesian and homogeneous
representation of the input points. `Rep_tag` has to be either
`CGAL::``Cartesian_tag` or
`CGAL::``Homogeneous_tag`.
*/
typedef unspecified_type Rep_tag;

/*!
number type used to represent the coordinates of the input points.
It has to be a model for `RingNumberType`.
*/
typedef unspecified_type RT;

/*!
number type used to return either the squared radius of the smallest
enclosing sphere or annulus, or the squared distance of the polytopes.
`FT` has to be either `RT` or `CGAL::``Quotient<RT>` if
the input points have %Cartesian or homogeneous representation,
respectively (cf. `Rep_tag`).
*/
typedef unspecified_type FT;

/*!
data accessor object used to access the dimension of the input points.
*/
typedef unspecified_type Access_dimension_d;

/*!
data accessor object used to access the coordinates of the input points.
*/
typedef unspecified_type Access_coordinates_begin_d;

/*!
constructor object used to construct either the center of the smallest
enclosing sphere or annulus, or the points realizing the distance between
the two polytopes.
*/
typedef unspecified_type Construct_point_d;

/// @}

/// \name Special types
/// The following two number types are only needed for
/// `CGAL::Min_annulus_d<Traits>` and
/// `CGAL::Polytope_distance_d<Traits>`.
/// @{

/*!
exact number type used to do the exact computations in the
underlying solver for linear programs. It has to to be a model for
`RingNumberType`. There must be an implicit conversion from
`RT` to `ET` available.
*/
typedef unspecified_type ET;

/*!
fast (possibly inexact) number type used to speed up the pricing step in
the underlying solver for linear programs. It has to be a model for
`RingNumberType`. There must be implicit conversions from `RT` to
`NT` and from `NT` to `ET` available.
*/
typedef unspecified_type NT;

/// @}

/// \name Creation
/// Only default and copy constructor are required.
/// @{

/*!

*/
PolytopeDistanceDTraits( );

/*!

*/
PolytopeDistanceDTraits( const PolytopeDistanceDTraits&);

/// @}

/// \name Operations
/// The following functions just return the corresponding function class object.
/// @{

/*!

*/
Access_dimension_d
access_dimension_d_object() const;

/*!

*/
Access_coordinates_begin_d
access_coordinates_begin_d_object() const;

/*!

*/
Construct_point_d
construct_point_d_object() const;

/// @}

}; /* end PolytopeDistanceDTraits */

