// Description: Removes a polygon.
#ifndef PASTELGEOMETRY_HALFMESH_REMOVE_POLYGON_HPP
#define PASTELGEOMETRY_HALFMESH_REMOVE_POLYGON_HPP
#include "pastel/geometry/halfmesh/halfmesh.h"
namespace Pastel
{
    template <
        typename Settings, 
        template <typename> class Customization>
    auto HalfMesh<Settings, Customization>::removePolygon(
        const Polygon_ConstIterator& polygon)
    -> Polygon_Iterator
    {
        if (polygon.isEnd() || polygon.empty())
        {
            return cast(polygon);
        }
        this->onRemovePolygon(cast(polygon));
        Half_Iterator begin = cast(polygon->half());
        ASSERT(!begin.empty());
        Half_Iterator current = begin;
        do
        {
            current->left_ = Polygon_Iterator();
            current = current->next();
        }
        while (current != begin);
        return polygonSet_.erase(polygon);
    }
}
#endif