
/*!
\ingroup PkgAlgebraicKernelDConceptsBi
\cgalConcept

Computes the real zero-dimensional solutions of a bivariate polynomial system.
The multiplicity stored in the output iterator is the multiplicity in the system.

\cgalRefines{Assignable,CopyConstructible}
*/
class AlgebraicKernel_d_2::Solve_2 {
public:

/// \name Operations
/// A model of this type must provide:
/// @{

/*!
Computes all common solutions of \f$ f\f$ and \f$ g\f$ with multiplicity, and copies them as objects of type
`std::pair<AlgebraicKernel_d_2::Algebraic_real_2, AlgebraicKernel_d_2::Multiplicity_type>` in `res`.
\pre \f$ f\f$ is square free.
\pre \f$ g\f$ is square free.
\pre \f$ f\f$ and \f$ g\f$ are coprime.

*/
template < class OutputIterator >
OutputIterator
operator()(
AlgebraicKernel_d_2::Polynomial_2 f,
AlgebraicKernel_d_2::Polynomial_2 g,
OutputIterator res );

/*!
Computes all common solutions of \f$ f\f$ and \f$ g\f$ in the closed box \f$ [xl,xu]\times[yl,yu]\f$, and copies them as objects of
type `std::pair<AlgebraicKernel_d_2::Algebraic_real_2, AlgebraicKernel_d_2::Multiplicity_type>` in `res`.
\pre \f$ f\f$ is square free.
\pre \f$ g\f$ is square free.
\pre \f$ f\f$ and \f$ g\f$ are coprime.

*/
template < class OutputIterator > OutputIterator operator()(
AlgebraicKernel_d_2::Polynomial_2 f,
AlgebraicKernel_d_2::Polynomial_2 g,
AlgebraicKernel_d_2::Bound xl,
AlgebraicKernel_d_2::Bound xu,
AlgebraicKernel_d_2::Bound yl,
AlgebraicKernel_d_2::Bound yu,
OutputIterator res);

/// @}

}; /* end AlgebraicKernel_d_2::Solve_2 */

