cgal/Polynomial/doc/Polynomial/Concepts/PolynomialTraits_d.h

361 lines
8.4 KiB
C++

/*!
\ingroup PkgPolynomialConcepts
\cgalConcept
A model of `PolynomialTraits_d` is associated with a type
`Polynomial_d`.
The type `Polynomial_d` represents a multivariate polynomial.
The number of variables is denoted as the dimension \f$ d\f$ of the polynomial,
it is arbitrary but fixed for a certain model of this concept.
Note that univariate polynomials are not excluded by this concept. In this case
\f$ d\f$ is just set to one.
`PolynomialTraits_d` provides two different views on the
multivariate polynomial.
<UL>
<LI>The recursive view: In this view, the polynomial is considered as
an element of \f$ R[x_0,\dots,x_{d-2}][x_{d-1}]\f$. That is, the polynomial
is treated as a univariate polynomial over the ring \f$ R[x_0,\dots,x_{d-2}]\f$.
<LI>The symmetric or multivariate view: This view is symmetric
with respect to all variables,
considering the polynomial as an element of \f$ R [x_0,\dots,x_{d-1}]\f$.
</UL>
Many functors consider the polynomial as a univariate polynomial in one variable.
By default this is the outermost variable \f$ x_{d-1}\f$. However, in general it
is possible to select a certain variable.
\cgalRefines `AlgebraicStructureTraits`
\sa `Polynomial_d`
\cgalHasModel `CGAL::Polynomial_traits_d<Polynomial_d>`
*/
class PolynomialTraits_d {
public:
/// \name Constants
/// @{
/*!
The dimension and the number of variables respectively.
*/
static const int d;
/// @}
/// \name Types
/// @{
/*!
Type representing \f$ R[x_0,\dots,x_{d-1}]\f$.
*/
typedef unspecified_type Polynomial_d;
/*!
Type representing \f$ R[x_0,\dots,x_{d-2}]\f$.
*/
typedef unspecified_type Coefficient_type ;
/*!
Type representing the base ring \f$ R\f$.
*/
typedef unspecified_type Innermost_coefficient_type;
/*!
Const iterator used to iterate through all coefficients of the polynomial.
*/
typedef unspecified_type Coefficient_const_iterator;
/*!
Const iterator used to iterate through all innermost coefficients of the polynomial.
*/
typedef unspecified_type Innermost_coefficient_const_iterator;
/*!
This template class has to define a type `Rebind<T,d>::%Other` which is a model
of the concept `PolynomialTraits_d`, where `d` is the number of
variables and `T` the `Innermost_coefficient_type`.
\note It can be implemented using a nested template class.
*/
template <typename T, int d>
using Rebind = unspecified_type;
/// @}
/// \name Functors
/// In case a functor is not provided it is set to `CGAL::Null_functor`.
/// @{
/*!
A model of `PolynomialTraits_d::ConstructPolynomial`.
*/
typedef unspecified_type Construct_polynomial;
/*!
A model of `PolynomialTraits_d::GetCoefficient`.
*/
typedef unspecified_type Get_coefficient;
/*!
A model of `PolynomialTraits_d::GetInnermostCoefficient`.
*/
typedef unspecified_type Get_innermost_coefficient;
/*!
A model of
`PolynomialTraits_d::ConstructCoefficientConstIteratorRange`.
*/
typedef unspecified_type Construct_coefficient_const_iterator_range;
/*!
A model of
`PolynomialTraits_d::ConstructInnermostCoefficientConstIteratorRange`.
*/
typedef unspecified_type Construct_innermost_coefficient_const_iterator_range;
/*!
A model of `PolynomialTraits_d::Swap`.
*/
typedef unspecified_type Swap;
/*!
A model of `PolynomialTraits_d::Move`.
*/
typedef unspecified_type Move;
/*!
A model of `PolynomialTraits_d::Degree`.
*/
typedef unspecified_type Degree;
/*!
A model of `PolynomialTraits_d::TotalDegree`.
*/
typedef unspecified_type Total_degree;
/*!
A model of `PolynomialTraits_d::DegreeVector`.
*/
typedef unspecified_type Degree_vector;
/*!
A model of `PolynomialTraits_d::LeadingCoefficient`.
*/
typedef unspecified_type Leading_coefficient;
/*!
A model of `PolynomialTraits_d::InnermostLeadingCoefficient`.
*/
typedef unspecified_type Innermost_leading_coefficient;
/*!
A model of `PolynomialTraits_d::Canonicalize`.
*/
typedef unspecified_type Canonicalize;
/*!
A model of `PolynomialTraits_d::Differentiate`.
*/
typedef unspecified_type Differentiate;
/*!
A model of `PolynomialTraits_d::Evaluate`.
*/
typedef unspecified_type Evaluate;
/*!
A model of `PolynomialTraits_d::EvaluateHomogeneous`.
*/
typedef unspecified_type Evaluate_homogeneous;
/*!
A model of `PolynomialTraits_d::Substitute`.
*/
typedef unspecified_type Substitute;
/*!
A model of `PolynomialTraits_d::SubstituteHomogeneous`.
*/
typedef unspecified_type Substitute_homogeneous;
/*!
A model of `PolynomialTraits_d::IsZeroAt`.
*/
typedef unspecified_type Is_zero_at;
/*!
A model of `PolynomialTraits_d::IsZeroAtHomogeneous`.
*/
typedef unspecified_type Is_zero_at_homogeneous;
/*!
A model of `PolynomialTraits_d::SignAt`.
In case `Innermost_coefficient_type` is not `RealEmbeddable` this
is `CGAL::Null_functor`.
*/
typedef unspecified_type Sign_at;
/*!
A model of `PolynomialTraits_d::SignAtHomogeneous`.
In case `Innermost_coefficient_type` is not `RealEmbeddable` this
is `CGAL::Null_functor`.
*/
typedef unspecified_type Sign_at_homogeneous;
/*!
A model of `PolynomialTraits_d::Compare`.
In case `Innermost_coefficient_type` is not `RealEmbeddable` this
is `CGAL::Null_functor`.
*/
typedef unspecified_type Compare;
/*!
In case `PolynomialTraits_d::Coefficient_type` is <B>not</B> a model of
`UniqueFactorizationDomain`, this is `CGAL::Null_functor`, otherwise this is
a model of `PolynomialTraits_d::UnivariateContent`.
*/
typedef unspecified_type Univariate_content;
/*!
In case `PolynomialTraits_d::Innermost_coefficient_type` is <B>not</B>
a model of `UniqueFactorizationDomain`, this is `CGAL::Null_functor`,
otherwise this is a model of
`PolynomialTraits_d::MultivariateContent`.
*/
typedef unspecified_type Multivariate_content;
/*!
A model of `PolynomialTraits_d::Shift`.
*/
typedef unspecified_type Shift;
/*!
A model of `PolynomialTraits_d::Negate`.
*/
typedef unspecified_type Negate;
/*!
A model of `PolynomialTraits_d::Invert`.
*/
typedef unspecified_type Invert;
/*!
A model of `PolynomialTraits_d::Translate`.
*/
typedef unspecified_type Translate;
/*!
A model of `PolynomialTraits_d::TranslateHomogeneous`.
*/
typedef unspecified_type Translate_homogeneous;
/*!
A model of `PolynomialTraits_d::Scale`.
*/
typedef unspecified_type Scale;
/*!
A model of `PolynomialTraits_d::ScaleHomogeneous`.
*/
typedef unspecified_type Scale_homogeneous;
/*!
A model of `PolynomialTraits_d::MakeSquareFree`.
*/
typedef unspecified_type Make_square_free;
/*!
In case `PolynomialTraits::Polynomial_d`
is not a model of `UniqueFactorizationDomain`, this is of type `CGAL::Null_functor`,
otherwise this is a model of `PolynomialTraits_d::SquareFreeFactorize`.
*/
typedef unspecified_type Square_free_factorize;
/*!
A model of `PolynomialTraits_d::PseudoDivision`.
*/
typedef unspecified_type Pseudo_division ;
/*!
A model of `PolynomialTraits_d::PseudoDivisionRemainder`.
*/
typedef unspecified_type Pseudo_division_remainder;
/*!
A model of `PolynomialTraits_d::PseudoDivisionQuotient`.
*/
typedef unspecified_type Pseudo_division_quotient ;
/*!
A model of `PolynomialTraits_d::GcdUpToConstantFactor`.
*/
typedef unspecified_type Gcd_up_to_constant_factor;
/*!
A model of `PolynomialTraits_d::IntegralDivisionUpToConstantFactor`.
*/
typedef unspecified_type Integral_division_up_to_constant_factor;
/*!
A model of `PolynomialTraits_d::UnivariateContentUpToConstantFactor`.
*/
typedef unspecified_type Content_up_to_constant_factor;
/*!
A model of `PolynomialTraits_d::SquareFreeFactorizeUpToConstantFactor`.
*/
typedef unspecified_type Square_free_factorize_up_to_constant_factor;
/*!
A model of `PolynomialTraits_d::Resultant`.
*/
typedef unspecified_type Resultant;
/*!
Either `CGAL::Null_functor` or a model of `PolynomialTraits_d::PolynomialSubresultants`.
*/
typedef unspecified_type Polynomial_subresultants;
/*!
Either `CGAL::Null_functor` or a model of `PolynomialTraits_d::PolynomialSubresultants_with_cofactors`.
*/
typedef unspecified_type Polynomial_subresultants_with_cofactors;
/*!
Either `CGAL::Null_functor` or a model of `PolynomialTraits_d::PrincipalSubresultants`.
*/
typedef unspecified_type Principal_subresultants;
/*!
Either `CGAL::Null_functor` or a model of `PolynomialTraits_d::SturmHabichtSequence`.
*/
typedef unspecified_type Sturm_habicht_sequence;
/*!
Either `CGAL::Null_functor` or a model of `PolynomialTraits_d::SturmHabichtSequenceWithCofactors`.
*/
typedef unspecified_type Sturm_habicht_sequence_with_cofactors;
/*!
Either `CGAL::Null_functor` or a model of `PolynomialTraits_d::PrincipalSturmHabichtSequence`.
*/
typedef unspecified_type Principal_sturm_habicht_sequence;
/// @}
}; /* end PolynomialTraits_d */