
namespace CGAL {

/*!
\ingroup PkgAlgebraicKernelDModels

The class represents an algebraic real root by a square free polynomial and an
isolating interval that uniquely defines the root.
The template argument `Coeff` determines the coefficient type of the
kernel, which is also the coefficient type of the supported polynomials.

Currently, the following coefficient types are supported:
- `Gmpz`, `Gmpq`, (requires configuration with external libraries GMP, MPFR and MPFI)
- `CORE::BigInt`, `CORE::BigRat`, (requires configuration with external library GMP)
- `leda_integer`, `leda_rational`. (requires configuration with external library LEDA)
.

\cgalAdvancedBegin
The template argument type can also be set to `Sqrt_extension<NT,ROOT>`, where `NT` is
one of the types listed above. `ROOT` should be one of the integer types.
See also the documentation of `Sqrt_extension<NT,ROOT>`.
\cgalAdvancedEnd

The current method to isolate roots is the bitstream Descartes method
presented in \cgalCite{eigenwillig-phd-08}.  The used method to refine the
approximation of an algebraic real root is a slightly modified
(filtered) version of the one presented in \cgalCite{abbott-qir-06}. The
method has quadratic convergence.

\cgalModels{AlgebraicKernel_d_1}

\sa `AlgebraicKernel_d_1`
\sa `Polynomial_d`
\sa `CGAL::Algebraic_kernel_d_2<Coeff>`

*/
template< typename Coeff >
class Algebraic_kernel_d_1 {
public:

/// \name Types
/// @{

/*!
Same type as the template argument `Coeff`.
*/
typedef unspecified_type Coefficient;

/*!
A model of `::AlgebraicKernel_d_1::Polynomial_1`.
*/
typedef unspecified_type Polynomial_1;

/*!
A model of `::AlgebraicKernel_d_1::Algebraic_real_1`.
*/
typedef unspecified_type Algebraic_real_1;

/*!
The choice of `Coeff` also determines the provided bound type.
In case of `Coeff` is:

- `Gmpz` or `Gmpq`, this is `Gmpq`,

- `CORE::BigInt` or `CORE::BigRat`, this is `CORE::BigRat`,

- `leda_integer` or `leda_rational`, this is `leda_rational`.
*/
typedef unspecified_type Bound;

/*!
The multiplicity type is `int`.
*/
typedef unspecified_type Multiplicity_type;

/// @}

}; /* end Algebraic_kernel_d_1 */
} /* end namespace CGAL */
