// -*- C++ -*-
namespace Katabatic {
/*! \class AutoContactTurn
*
* \brief AutoContact Turn (one H, one V)
*
* AutoContact to make a turn (one H, one V).
*/
//! \function AutoContactTurn* AutoContactTurn::create ( GCell* gcell, Net* net, const Layer* layer );
//! \param gcell The GCell into which create the AutoContact.
//! \param net The Net to which this AutoContact belongs.
//! \param layer The Layer of the AutoContact.
//! \return The created AutoContactTurn.
//!
//! Create a new AutoContactTurn.
//! \function void AutoContactTurn::updateTopology ();
//! Restore the topology (i.e. connexity) of the contact after one or both
//! connected segments has changed layer.
//!
//! Based on the layer depth delta between the two perpandiculars segments.
//! Three case can occurs:
//! - The delta is \b zero, then just sets the layer of the contact
//! to the common metal layer (turn in same layer).
//! - The delta is \b one, then sets the contact layer to VIA connecting
//! the two layers.
//! - The delta cannot be equal to two, due to the alternatives
//! routing directions, it would mean a \e turn connecting two \e horizontals
//! (or verticals) in different layers.
//! - The delta is \b three, then create a dogleg to restore the connexity.
//! The dogleg will be created on the connected segment which as been
//! layer invalidated. If both of them have been invalidated,
//! the horizontal one is preferred.
//! - A delta of more than \b three is an error, and must never occurs.
//!
//! \image html updateTopologyTurn.png "Update Turn Topology"
}