// Description: Removes a vertex.
#ifndef PASTELGEOMETRY_HALFMESH_REMOVE_VERTEX_HPP
#define PASTELGEOMETRY_HALFMESH_REMOVE_VERTEX_HPP
#include "pastel/geometry/halfmesh/halfmesh.h"
namespace Pastel
{
    template <
        typename Settings, 
        template <typename> class Customization>
    auto HalfMesh<Settings, Customization>::removeVertex(
        const Vertex_ConstIterator& vertex)
    -> Vertex_Iterator
    {
        if (vertex.isSentinel() || vertex.empty())
        {
            return cast(vertex);
        }
        this->onRemoveVertex(cast(vertex));
        if (!vertex->isolated())
        {
            // Remove every edge that is connected
            // to this vertex.
            Half_Iterator current;
            Half_Iterator next = vertex->half();
            do
            {
                current = next;
                next = next->rotateNext();
                if (next->edge() == current->edge())
                {
                    next = next->rotateNext();
                }
                removeEdge(current->edge());
            }
            while (current != next);
        }
        return vertexSet_.erase(vertex);
    }
}
#endif