// Description: Detaches a half-edge from its origin.
#ifndef PASTELGEOMETRY_HALFMESH_DETACH_HALF_HPP
#define PASTELGEOMETRY_HALFMESH_DETACH_HALF_HPP
#include "pastel/geometry/halfmesh/halfmesh.h"
namespace Pastel
{
    template <
        typename Settings, 
        template <typename> class Customization>
    void HalfMesh<Settings, Customization>::detachHalf(
        const Half_ConstIterator& half)
    {
        if (!half.isNormal())
        {
            return;
        }
        Vertex_Iterator origin = cast(half->origin());
        Half_Iterator in = cast(half->previous());
        Half_Iterator out = cast(half->rotateNext());
        if (origin->half() == half)
        {
            origin->half_ = 
                (out == half) ?
                Half_Iterator() : out;
        }
        in->next_ = out;
        out->previous_ = in;
    }
}
#endif