
namespace CGAL {

/*!
\ingroup PkgAlphaShapes3Ref

The class `Alpha_shape_cell_base_3` is the default model for the concept 
`AlphaShapeCell_3`. 

\tparam Traits is the geometric traits class that is provided 
to the `Alpha_shape_3` class. 
\tparam Cb must be a cell base class adapted to the type of triangulation that is being used.
        By default, it is instantiated with `Delaunay_triangulation_cell_base_3<Traits>`,
        which is appropriate for basic alpha shapes.
\tparam ExactAlphaComparisonTag is a tag that, when set to 
\link Tag_true `Tag_true`\endlink, triggers exact comparisons between alpha values. See the description
provided in the documentation of `Alpha_shape_3` for more details. The default value is \link Tag_false `Tag_false`\endlink.
\tparam WeightedTag is used only if `ExactAlphaComparisonTag` is \link Tag_true `Tag_true`\endlink. It
must be \link Tag_true `Tag_true`\endlink if the underlying triangulation of the alpha shape to be used is a regular triangulation
and \link Tag_false `Tag_false`\endlink otherwise. The default is \link Tag_false `Tag_false`\endlink.

\cgalModels `AlphaShapeCell_3`

\sa `Delaunay_triangulation_cell_base_3`
\sa `Regular_triangulation_cell_base_3`
\sa `Periodic_3_triangulation_ds_cell_base_3`
*/
template< typename Traits, typename Cb, typename ExactAlphaComparisonTag, typename WeightedTag >
class Alpha_shape_cell_base_3 : public Cb {
public:

/// @}

}; /* end Alpha_shape_cell_base_3 */
} /* end namespace CGAL */

namespace CGAL {

/*!
\ingroup PkgAlphaShapes3Ref

The class `Alpha_status` is a small data structure to store 
the critical alpha values of faces of an alpha shape. 
Each face has three critical alpha values, called 
`alpha_min`, `alpha_mid` and `alpha_max` in increasing order. 
The face will be exterior for any \f$ \alpha < \f$ `alpha_min`, 
singular for `alpha_min` \f$ \leq \alpha < \f$ `alpha_mid`, 
regular for `alpha_mid` \f$ \leq \alpha < \f$ `alpha_max` 
and interior for `alpha_max` \f$ \leq \alpha\f$. 
The value `alpha_min` is undefined for faces which are not Gabriel 
faces and therefore do not appear in the alpha complex 
without any of their 
including face. The value `alpha_max` is undefined 
for convex hull faces which can never be interior.
The data structure also includes two Boolean to mark 
if the face is a Gabriel face or a convex hull face. 

The class `Alpha_status` is parameterized by a number type `NT`. 

\sa `::AlphaShapeCell_3`
\sa `::AlphaShapeVertex_3`

*/
template< typename NT >
class Alpha_status {
public:

/// \name Creation 
/// @{

/*!
default constructor. 
*/ 
Alpha_status(); 

/// @} 

/// \name Modifiers 
/// @{

/*!
sets Gabriel marker. 
*/ 
void set_is_Gabriel(bool yesorno); 

/*!
sets convex hull marker.
*/ 
void set_is_on_chull(bool yesorno); 

/*!
sets `alpha_min`. 
*/ 
void set_alpha_min(NT alpha); 

/*!
sets `alpha_mid`. 
*/ 
void set_alpha_mid(NT alpha); 

/*!
sets `alpha_max`. 
*/ 
void set_alpha_max(NT alpha); 

/// @} 

/// \name Access Functions 
/// @{

/*!
Returns true for Gabriel faces. 
*/ 
bool is_Gabriel() const ; 

/*!
Returns true for convex hull faces. 
*/ 
bool is_on_chull() const; 

/*!
Returns the `alpha_min`. 
\pre `is_Gabriel()` returns false; 
*/ 
NT alpha_min() const; 

/*!
Returns the `alpha_mid`.
*/ 
NT alpha_mid() const; 

/*!
Returns `alpha_max`. 
\pre `is_on_chull()` returns `false`. 
*/ 
NT alpha_max() const; 

/// @}

}; /* end Alpha_status */
} /* end namespace CGAL */
