namespace CGAL {

/*!
\ingroup PkgHalfedgeDS_HDS

The class `HalfedgeDS_vector` is a model for the `HalfedgeDS` concept.
`HalfedgeDS_vector` is a vector-based representation with random
access iterators that does not support removal.

\cgalModelsBareBegin
\cgalModelsBare{`HalfedgeDS<Traits,Items,Alloc>`}
\cgalModelsBareEnd

\sa `CGAL::HalfedgeDS_default`
\sa `CGAL::HalfedgeDS_list`
\sa `HalfedgeDSItems`
\sa `CGAL::Polyhedron_3<Traits>`
\sa `CGAL::HalfedgeDS_items_decorator<HDS>`
\sa `CGAL::HalfedgeDS_decorator<HDS>`
\sa `CGAL::HalfedgeDS_const_decorator<HDS>`

\cgalHeading{Implementation}

`HalfedgeDS_vector` uses internally the \stl `std::vector` container
class. We require that we can create a `std::vector::iterator`
from a pointer. If this will not be true any longer for any major \stl distribution we might switch to an internal implementation of a vector.

The capacity is restricted to the reserved size. Allocations
are not possible beyond the capacity without calling reserve again.
All handles and iterators are invalidated upon a reserve call that
increases the capacity.

`CGAL_ALLOCATOR(int)` is used as default argument for the
`Alloc` template parameter.

*/
template< typename Traits, typename HalfedgeDSItems, typename Alloc >
class HalfedgeDS_vector {
public:

/// \name Types
/// @{

/*!

*/
typedef random_access_iterator_tag iterator_category;

/*!

*/
typedef CGAL::Tag_false Supports_removal;

/// @}

}; /* end HalfedgeDS_vector */
} /* end namespace CGAL */
