/*!
\ingroup PkgPartition2FunctionObjectConcepts
\cgalConcept

Function object that determines if a sequence of points represents a
valid partition polygon or not, where "valid" can assume any of several
meanings (e.g., convex or \f$ y\f$-monotone).

\cgalHasModelsBegin
\cgalHasModels{CGAL::Is_convex_2<Traits>}
\cgalHasModels{CGAL::Is_y_monotone_2<Traits>}
\cgalHasModelsEnd

\sa `CGAL::approx_convex_partition_2()`
\sa `CGAL::convex_partition_is_valid_2()`
\sa `CGAL::greene_approx_convex_partition_2()`
\sa `CGAL::optimal_convex_partition_2()`
\sa `CGAL::partition_is_valid_2()`
\sa `CGAL::y_monotone_partition_2()`
\sa `CGAL::y_monotone_partition_is_valid_2()`

*/

class PolygonIsValid {
public:

/// \name Creation
/// @{

/*!

`Traits` is a model of the concept required by the function that checks
for validity of the polygon.

*/
PolygonIsValid(const Traits tr);

/// @}

/// \name Operations
/// @{

/*!

returns `true` iff the points of type `Traits::Point_2`
in the range [`first`,`beyond`) define a valid polygon.

*/
template<class InputIterator>
bool operator()(InputIterator first, InputIterator beyond);

/// @}

}; /* end PolygonIsValid */
