coriolis/kite/doc/latex/classKite_1_1SegmentFsm.tex

492 lines
42 KiB
TeX

\hypertarget{classKite_1_1SegmentFsm}{}\subsection{Segment\+Fsm Class Reference}
\label{classKite_1_1SegmentFsm}\index{Segment\+Fsm@{Segment\+Fsm}}
Pseudo-\/decorator to process a \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}.
\subsubsection*{Public Types}
\begin{DoxyCompactItemize}
\item
enum \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8}{State} \{ \newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a79ae4f26b8ed9c55b81f981bb5076e1d}{Missing\+Data} = (1$<$$<$0),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a13ac7e0722ca806ff25d8fa9220e980b}{Empty\+Track\+List} = (1$<$$<$1),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8abb9adb1672565a2d0c2de07ea840414e}{Inserted} = (1$<$$<$2),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8aacd3ef9d889b306ca7e7bdcd37ba659a}{Self} = (1$<$$<$3),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a75f0c3176be2226dfe8ad164a0a034a2}{Other} = (1$<$$<$4),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a08900dc237aef7e4a7f50d2ba1ffd748}{Ripup} = (1$<$$<$5),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a9fc7197613f3435d906edf69a73acf38}{Maximum\+Slack} = (1$<$$<$6),
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a8c564779c81599aaadbe879fa2b08d92}{Self\+Inserted} = Self $\vert$ Inserted,
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a22374bab829fac7d12af4784d80eeb6e}{Other\+Ripup} = Other $\vert$ Ripup,
\newline
\hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a560766bb79539564fdeda432c8efae6d}{Self\+Maximum\+Slack} = Self $\vert$ Maximum\+Slack
\}
\end{DoxyCompactItemize}
\subsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item
\hyperlink{classKite_1_1SegmentFsm_a2a8eadaaf3ed213914e7b4a81cae6e6a}{Segment\+Fsm} (\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} $\ast$, \hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue} \&, \hyperlink{classKite_1_1RoutingEventHistory}{Routing\+Event\+History} \&)
\item
bool \hyperlink{classKite_1_1SegmentFsm_a90fb28e997bec986238b81c0316319f0}{is\+Full\+Blocked} () const
\item
\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} $\ast$ \hyperlink{classKite_1_1SegmentFsm_a513f39c546ef4be0d13787cdace4eadf}{get\+Event} () const
\item
\hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue} \& \hyperlink{classKite_1_1SegmentFsm_a3e86badede6ba842280779cecea21e81}{get\+Queue} () const
\item
\hyperlink{classKite_1_1RoutingEventHistory}{Routing\+Event\+History} \& \hyperlink{classKite_1_1SegmentFsm_a1bf115c7f375168ec89ec400d58440b4}{get\+History} () const
\item
unsigned int \hyperlink{classKite_1_1SegmentFsm_a40ec2b23684a0e6e6d7ac9783a269037}{get\+State} () const
\item
\hyperlink{classKite_1_1DataNegociate}{Data\+Negociate} $\ast$ \hyperlink{classKite_1_1SegmentFsm_ad272e2f3fbbddcd6c8dc2f0187f08c4e}{get\+Data} ()
\item
\textbf{ Interval} \& \hyperlink{classKite_1_1SegmentFsm_abf6603c742bee65a4effa24135f2d955}{get\+Constraint} ()
\item
\textbf{ Interval} \& \hyperlink{classKite_1_1SegmentFsm_a9d1a7f4108b49d3096d8c733fabe60f3}{get\+Optimal} ()
\item
vector$<$ Track\+Cost $>$ \& \hyperlink{classKite_1_1SegmentFsm_ab7144079976c8808e69f9aac68dda06d}{get\+Costs} ()
\item
Track\+Cost \& \hyperlink{classKite_1_1SegmentFsm_a5256595f77ebc80c3ee683cfdbc7f8f6}{get\+Cost} (size\+\_\+t)
\item
\hyperlink{classKite_1_1Track}{Track} $\ast$ \hyperlink{classKite_1_1SegmentFsm_af2d9a3a5df8a4de5d263fb3fae563a8a}{get\+Track} (size\+\_\+t)
\item
size\+\_\+t \hyperlink{classKite_1_1SegmentFsm_a13a1ec8bdcf29f2bcb21cab348b77ed2}{get\+Begin} (size\+\_\+t)
\item
size\+\_\+t \hyperlink{classKite_1_1SegmentFsm_aaf31c0a3018908a2ee26a8ea9e893eb1}{get\+End} (size\+\_\+t)
\item
vector$<$ \hyperlink{classKite_1_1SegmentAction}{Segment\+Action} $>$ \& \hyperlink{classKite_1_1SegmentFsm_ab3b06bb353ee9333be6b937bffc8fd84}{get\+Actions} ()
\item
void \hyperlink{classKite_1_1SegmentFsm_adf5147448951f8dc8b4088a1032e97b2}{set\+State} (unsigned int)
\item
void \hyperlink{classKite_1_1SegmentFsm_ad9384c1cc2a9cd70ab9ff089b56380a0}{add\+Action} (\hyperlink{classKite_1_1TrackElement}{Track\+Element} $\ast$, unsigned int type, \textbf{ Db\+U\+::\+Unit} axis\+Hint=0, unsigned int to\+State=0)
\item
void \hyperlink{classKite_1_1SegmentFsm_abbcf429498049478d4d8ab94cdb4a022}{do\+Actions} ()
\item
void \hyperlink{classKite_1_1SegmentFsm_a4cf911f1f4e5ac588d502c9d069a1bde}{clear\+Actions} ()
\item
bool \hyperlink{classKite_1_1SegmentFsm_a7140b507da2cab137d968a037bed19df}{insert\+In\+Track} (size\+\_\+t)
\item
bool \hyperlink{classKite_1_1SegmentFsm_a0d9a9926ae67cc7998799347f135e28a}{conflict\+Solve\+By\+History} ()
\item
bool \hyperlink{classKite_1_1SegmentFsm_a9c0fa6a9067b6e027e24f38330f627dc}{conflict\+Solve\+By\+Placeds} ()
\item
bool \hyperlink{classKite_1_1SegmentFsm_a0b8e8be9d7c9501be9534d3c2a9dd586}{desaturate} ()
\item
bool \hyperlink{classKite_1_1SegmentFsm_a623d68f599c0de60cdd36af3f183e6f1}{slacken\+Topology} (unsigned int flags=0)
\item
bool \hyperlink{classKite_1_1SegmentFsm_ab8ae818baad1d0a274a7e8c308ca3f92}{solve\+Full\+Blockages} ()
\end{DoxyCompactItemize}
\subsubsection{Detailed Description}
Pseudo-\/decorator to process a \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}.
The \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} class actually perform the placement of the \hyperlink{classKite_1_1TrackElement}{Kite\+::\+Track\+Element} of the \hyperlink{classKite_1_1RoutingEvent}{Kite\+::\+Routing\+Event}. It structured around three goals\+:
\begin{DoxyItemize}
\item Implement the finite state machine for the \hyperlink{classKite_1_1DataNegociate}{Kite\+::\+Data\+Negociate} state.
\item Provide a kind of decoration on the Routing\+Event/\+Track\+Element (it do not abide by the definition from Design Patterns).
\item Cache a lot of on-\/the-\/fly computed datas needed during the \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} lifetime and the Manipulator(s) it may uses.
\end{DoxyItemize}\hypertarget{classKite_1_1SegmentFsm_secUpdate}{}\subsubsection{Update Mechanism}\label{classKite_1_1SegmentFsm_secUpdate}
The constructor of \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} triggers the update of the \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} and through it \hyperlink{classKite_1_1DataNegociate}{Data\+Negociate}.\hypertarget{classKite_1_1SegmentFsm_secSlackening}{}\subsubsection{Slackening / F\+S\+M Transitions}\label{classKite_1_1SegmentFsm_secSlackening}
A transition occurs in the F\+SM whenener all the availables ripup methods for a segment have failed. Failure means that the topology of the net itself must be altered to allow a greater level of flexibility. Modifying the net topology means to give the current segment some more slack.
Availables slackening operations\+:
\begin{DoxyEnumerate}
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7a19d8d157762b2b73c5274e4865523d29}{Data\+Negociate\+::\+Ripup\+Perpandiculars} (\hyperlink{classKite_1_1Manipulator}{Manipulator}) place the segments before any of it\textquotesingle{}s perpandiculars are placed to allow a maximum track choice.
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7a548e204a4e2ffae50774910737f11380}{Data\+Negociate\+::\+Minimize} (\hyperlink{classKite_1_1Manipulator}{Manipulator}) try to fit the segment in a hole in a track, perform a hole detection.
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7a361bca46d5e7bdf02f50f7ecaa6018a9}{Data\+Negociate\+::\+Dogleg} (\hyperlink{classKite_1_1Manipulator}{Manipulator}) create a dogleg matching {\itshape the first track candidate} with a non-\/nul overlap.
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7a0d4bff02b3163821c0e5f7ad9dd55f36}{Data\+Negociate\+::\+Slacken} (\hyperlink{classKite_1_1Manipulator}{Manipulator}) to be reviewed.
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7ae08187cba35efd6229ab8acfd003a600}{Data\+Negociate\+::\+Conflict\+Solve\+By\+History} (\hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm}) try to find a break point on the segment, based on the ripup history.
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7afce071be0ba39626ed1c865789da598b}{Data\+Negociate\+::\+Conflict\+Solve\+By\+Placeds} (\hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm}) try to find a break point on the segment, based on the current position of segments on the candidate tracks.
\item \hyperlink{classKite_1_1DataNegociate_ab7ccb6fc1f298728995250a3bbcf18c7adfd76a7d65b56ed7ecc0eedf921d6f82}{Data\+Negociate\+::\+Move\+Up} (\hyperlink{classKite_1_1Manipulator}{Manipulator}) try to move up the segment.
\end{DoxyEnumerate}
Simple slackening operations are defined in \hyperlink{classKite_1_1Manipulator}{Manipulator} and complex ones directly in \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm}.\hypertarget{classKite_1_1SegmentFsm_secNonSlackening}{}\subsubsection{Non-\/\+Slackening Operations}\label{classKite_1_1SegmentFsm_secNonSlackening}
In addition, some operation that do not modifies the topology are availables\+:
\begin{DoxyEnumerate}
\item \hyperlink{classKite_1_1Manipulator_add26b688d75a99a1ae781787eead08d5}{Manipulator\+::force\+Over\+Locals()} mostly for global segments to ripup a track from all it\textquotesingle{}s locals.
\item \hyperlink{classKite_1_1SegmentFsm_a7140b507da2cab137d968a037bed19df}{Segment\+Fsm\+::insert\+In\+Track()} automates the three subsequent ripup trials.
\end{DoxyEnumerate}
\subsubsection{Member Enumeration Documentation}
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!State@{State}}
\index{State@{State}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{State}{State}}
{\footnotesize\ttfamily enum \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8}{State}}
Indicates what the \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} has done the processed \hyperlink{classKite_1_1TrackElement}{Track\+Element}, possible values are\+:
\begin{DoxyItemize}
\item \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a79ae4f26b8ed9c55b81f981bb5076e1d}{Segment\+Fsm\+::\+Missing\+Data}, this is an error condition, the \hyperlink{classKite_1_1TrackElement}{Track\+Element} do not have associated \hyperlink{classKite_1_1DataNegociate}{Data\+Negociate} structure. Nothing is done.
\item \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a13ac7e0722ca806ff25d8fa9220e980b}{Segment\+Fsm\+::\+Empty\+Track\+List}, no \hyperlink{classKite_1_1Track}{Track} is available for placement (free or used).
\item \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a8c564779c81599aaadbe879fa2b08d92}{Segment\+Fsm\+::\+Self\+Inserted}, the \hyperlink{classKite_1_1TrackElement}{Track\+Element} can be successfully inserted in a \hyperlink{classKite_1_1Track}{Track} (i.\+e. without overlap).
\item \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a560766bb79539564fdeda432c8efae6d}{Segment\+Fsm\+::\+Self\+Maximum\+Slack}, nothing can be done to further slacken the \hyperlink{classKite_1_1TrackElement}{Track\+Element}, it is at maximum ripup of the last possible state (no more topological modifications are possibles).
\item \hyperlink{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a22374bab829fac7d12af4784d80eeb6e}{Segment\+Fsm\+::\+Other\+Ripup}, the \hyperlink{classKite_1_1TrackElement}{Track\+Element} can be inserted but it needs the ripup of some others.
\end{DoxyItemize}\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{Missing\+Data@{Missing\+Data}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Missing\+Data@{Missing\+Data}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a79ae4f26b8ed9c55b81f981bb5076e1d}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a79ae4f26b8ed9c55b81f981bb5076e1d}}
Missing\+Data&{\bfseries \mbox{[}Flag\mbox{]}}, see Segment\+Fsm\+::\+Segment\+Fsm\+Value. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Empty\+Track\+List@{Empty\+Track\+List}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Empty\+Track\+List@{Empty\+Track\+List}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a13ac7e0722ca806ff25d8fa9220e980b}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a13ac7e0722ca806ff25d8fa9220e980b}}
Empty\+Track\+List&{\bfseries \mbox{[}Flag\mbox{]}}, see Segment\+Fsm\+::\+Segment\+Fsm\+Value. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Inserted@{Inserted}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Inserted@{Inserted}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8abb9adb1672565a2d0c2de07ea840414e}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8abb9adb1672565a2d0c2de07ea840414e}}
Inserted&{\bfseries \mbox{[}Flag\mbox{]}}, the \hyperlink{classKite_1_1TrackElement}{Track\+Element} can be inserted in a \hyperlink{classKite_1_1Track}{Track}. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Self@{Self}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Self@{Self}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8aacd3ef9d889b306ca7e7bdcd37ba659a}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8aacd3ef9d889b306ca7e7bdcd37ba659a}}
Self&{\bfseries \mbox{[}Flag\mbox{]}}, the action is related to the processed \hyperlink{classKite_1_1TrackSegment}{Track\+Segment}. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Other@{Other}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Other@{Other}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a75f0c3176be2226dfe8ad164a0a034a2}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a75f0c3176be2226dfe8ad164a0a034a2}}
Other&{\bfseries \mbox{[}Flag\mbox{]}}, the action is {\bfseries not} related to the processed \hyperlink{classKite_1_1TrackSegment}{Track\+Segment}, that is, others are being topologically modificated or riped up. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Ripup@{Ripup}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Ripup@{Ripup}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a08900dc237aef7e4a7f50d2ba1ffd748}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a08900dc237aef7e4a7f50d2ba1ffd748}}
Ripup&{\bfseries \mbox{[}Flag\mbox{]}}, segement, that are not the processed one are being ripped up. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Maximum\+Slack@{Maximum\+Slack}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Maximum\+Slack@{Maximum\+Slack}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a9fc7197613f3435d906edf69a73acf38}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a9fc7197613f3435d906edf69a73acf38}}
Maximum\+Slack&{\bfseries \mbox{[}Flag\mbox{]}}, the processed segment as reached it\textquotesingle{}s maximum ripup count on the last possible slackening state. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Self\+Inserted@{Self\+Inserted}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Self\+Inserted@{Self\+Inserted}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a8c564779c81599aaadbe879fa2b08d92}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a8c564779c81599aaadbe879fa2b08d92}}
Self\+Inserted&{\bfseries \mbox{[}Mask\mbox{]}}, see Segment\+Fsm\+::\+Segment\+Fsm\+Value. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Other\+Ripup@{Other\+Ripup}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Other\+Ripup@{Other\+Ripup}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a22374bab829fac7d12af4784d80eeb6e}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a22374bab829fac7d12af4784d80eeb6e}}
Other\+Ripup&{\bfseries \mbox{[}Mask\mbox{]}}, see Segment\+Fsm\+::\+Segment\+Fsm\+Value. \\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{Self\+Maximum\+Slack@{Self\+Maximum\+Slack}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Self\+Maximum\+Slack@{Self\+Maximum\+Slack}}}\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a560766bb79539564fdeda432c8efae6d}\label{classKite_1_1SegmentFsm_a5d74787dedbc4e11c1ab15bf487e61f8a560766bb79539564fdeda432c8efae6d}}
Self\+Maximum\+Slack&{\bfseries \mbox{[}Mask\mbox{]}}, see Segment\+Fsm\+::\+Segment\+Fsm\+Value. \\
\hline
\end{DoxyEnumFields}
\subsubsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a2a8eadaaf3ed213914e7b4a81cae6e6a}\label{classKite_1_1SegmentFsm_a2a8eadaaf3ed213914e7b4a81cae6e6a}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!Segment\+Fsm@{Segment\+Fsm}}
\index{Segment\+Fsm@{Segment\+Fsm}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{Segment\+Fsm()}{SegmentFsm()}}
{\footnotesize\ttfamily \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} (\begin{DoxyParamCaption}\item[{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} $\ast$}]{event, }\item[{\hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue} \&}]{queue, }\item[{\hyperlink{classKite_1_1RoutingEventHistory}{Routing\+Event\+History} \&}]{history }\end{DoxyParamCaption})}
\begin{DoxyParams}{Parameters}
{\em event} & The \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} to be processed. \\
\hline
{\em queue} & The \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} queue. \\
\hline
{\em history} & The complete history of \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}.\\
\hline
\end{DoxyParams}
Construct a \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} from a \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}. The constructor is in charge of computing all the cached values.
\subsubsection{Member Function Documentation}
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a90fb28e997bec986238b81c0316319f0}\label{classKite_1_1SegmentFsm_a90fb28e997bec986238b81c0316319f0}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!is\+Full\+Blocked@{is\+Full\+Blocked}}
\index{is\+Full\+Blocked@{is\+Full\+Blocked}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{is\+Full\+Blocked()}{isFullBlocked()}}
{\footnotesize\ttfamily bool is\+Full\+Blocked (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} {\bfseries true} if there are Tracks avalaibles but the constraints are such that none is actually usable.
Referenced by Segment\+Fsm\+::desaturate().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a513f39c546ef4be0d13787cdace4eadf}\label{classKite_1_1SegmentFsm_a513f39c546ef4be0d13787cdace4eadf}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Event@{get\+Event}}
\index{get\+Event@{get\+Event}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Event()}{getEvent()}}
{\footnotesize\ttfamily \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} $\ast$ get\+Event (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The currently processed \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} ({\itshape cached}).
Referenced by Segment\+Fsm\+::conflict\+Solve\+By\+Placeds(), Segment\+Fsm\+::do\+Actions(), Segment\+Fsm\+::slacken\+Topology(), and Segment\+Fsm\+::solve\+Full\+Blockages().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a3e86badede6ba842280779cecea21e81}\label{classKite_1_1SegmentFsm_a3e86badede6ba842280779cecea21e81}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Queue@{get\+Queue}}
\index{get\+Queue@{get\+Queue}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Queue()}{getQueue()}}
{\footnotesize\ttfamily \hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue} \& get\+Queue (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} queue ({\itshape cached}). \mbox{\Hypertarget{classKite_1_1SegmentFsm_a1bf115c7f375168ec89ec400d58440b4}\label{classKite_1_1SegmentFsm_a1bf115c7f375168ec89ec400d58440b4}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+History@{get\+History}}
\index{get\+History@{get\+History}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+History()}{getHistory()}}
{\footnotesize\ttfamily \hyperlink{classKite_1_1RoutingEventHistory}{Routing\+Event\+History} \& get\+History (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} history ({\itshape cached}).
Referenced by Segment\+Fsm\+::conflict\+Solve\+By\+History().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a40ec2b23684a0e6e6d7ac9783a269037}\label{classKite_1_1SegmentFsm_a40ec2b23684a0e6e6d7ac9783a269037}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+State@{get\+State}}
\index{get\+State@{get\+State}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+State()}{getState()}}
{\footnotesize\ttfamily unsigned int get\+State (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The state (Segment\+Fsm\+::\+Segment\+Fsm\+Values) which the \hyperlink{classKite_1_1SegmentFsm}{Segment\+Fsm} has computed for the \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}. This is {\bfseries not} the state of the \hyperlink{classKite_1_1DataNegociate}{Data\+Negociate}
Referenced by Routing\+Event\+::process().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_ad272e2f3fbbddcd6c8dc2f0187f08c4e}\label{classKite_1_1SegmentFsm_ad272e2f3fbbddcd6c8dc2f0187f08c4e}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Data@{get\+Data}}
\index{get\+Data@{get\+Data}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Data()}{getData()}}
{\footnotesize\ttfamily \hyperlink{classKite_1_1DataNegociate}{Data\+Negociate} $\ast$ get\+Data (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The \hyperlink{classKite_1_1DataNegociate}{Data\+Negociate} of the \hyperlink{classKite_1_1TrackElement}{Track\+Element} ({\itshape cached}).
Referenced by Routing\+Event\+::process().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_abf6603c742bee65a4effa24135f2d955}\label{classKite_1_1SegmentFsm_abf6603c742bee65a4effa24135f2d955}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Constraint@{get\+Constraint}}
\index{get\+Constraint@{get\+Constraint}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Constraint()}{getConstraint()}}
{\footnotesize\ttfamily \textbf{ Interval} \& get\+Constraint (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The interval into which the segment axis can be set (computed from the topological constraints and the placement constraints on the already placed perpandiculars). \mbox{\Hypertarget{classKite_1_1SegmentFsm_a9d1a7f4108b49d3096d8c733fabe60f3}\label{classKite_1_1SegmentFsm_a9d1a7f4108b49d3096d8c733fabe60f3}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Optimal@{get\+Optimal}}
\index{get\+Optimal@{get\+Optimal}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Optimal()}{getOptimal()}}
{\footnotesize\ttfamily \textbf{ Interval} \& get\+Optimal (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The interval for an optimal placement of the segment axis. \mbox{\Hypertarget{classKite_1_1SegmentFsm_ab7144079976c8808e69f9aac68dda06d}\label{classKite_1_1SegmentFsm_ab7144079976c8808e69f9aac68dda06d}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Costs@{get\+Costs}}
\index{get\+Costs@{get\+Costs}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Costs()}{getCosts()}}
{\footnotesize\ttfamily vector$<$ Track\+Cost $>$ \& get\+Costs (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The table of cost for all the candidates Tracks of the segment. The table is sorted in increasing cost order (see Track\+Cost).
Referenced by Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::make\+Dogleg(), Manipulator\+::minimize(), and Routing\+Event\+::process().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a5256595f77ebc80c3ee683cfdbc7f8f6}\label{classKite_1_1SegmentFsm_a5256595f77ebc80c3ee683cfdbc7f8f6}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Cost@{get\+Cost}}
\index{get\+Cost@{get\+Cost}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Cost()}{getCost()}}
{\footnotesize\ttfamily Track\+Cost \& get\+Cost (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{i }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The cost at index {\ttfamily i} in the table.
Referenced by Segment\+Fsm\+::conflict\+Solve\+By\+Placeds(), Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::force\+To\+Track(), Manipulator\+::insert\+In\+Track(), Manipulator\+::minimize(), Routing\+Event\+::process(), and Segment\+Fsm\+::solve\+Full\+Blockages().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_af2d9a3a5df8a4de5d263fb3fae563a8a}\label{classKite_1_1SegmentFsm_af2d9a3a5df8a4de5d263fb3fae563a8a}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Track@{get\+Track}}
\index{get\+Track@{get\+Track}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Track()}{getTrack()}}
{\footnotesize\ttfamily \hyperlink{classKite_1_1Track}{Track} $\ast$ get\+Track (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{i }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The \hyperlink{classKite_1_1Track}{Track} for cost at index {\ttfamily i} in the table.
Referenced by Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::force\+To\+Track(), Manipulator\+::insert\+In\+Track(), Manipulator\+::make\+Dogleg(), Manipulator\+::minimize(), and Manipulator\+::shrink\+To\+Track().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a13a1ec8bdcf29f2bcb21cab348b77ed2}\label{classKite_1_1SegmentFsm_a13a1ec8bdcf29f2bcb21cab348b77ed2}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Begin@{get\+Begin}}
\index{get\+Begin@{get\+Begin}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Begin()}{getBegin()}}
{\footnotesize\ttfamily size\+\_\+t get\+Begin (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{i }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The overlapping {\itshape begin} index in \hyperlink{classKite_1_1Track}{Track} for cost at index {\ttfamily i} in the table.
Referenced by Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::force\+To\+Track(), Manipulator\+::insert\+In\+Track(), Manipulator\+::make\+Dogleg(), Manipulator\+::minimize(), and Manipulator\+::shrink\+To\+Track().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_aaf31c0a3018908a2ee26a8ea9e893eb1}\label{classKite_1_1SegmentFsm_aaf31c0a3018908a2ee26a8ea9e893eb1}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+End@{get\+End}}
\index{get\+End@{get\+End}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+End()}{getEnd()}}
{\footnotesize\ttfamily size\+\_\+t get\+End (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{i }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The overlapping {\itshape end} index in \hyperlink{classKite_1_1Track}{Track} for cost at index {\ttfamily i} in the table.
Referenced by Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::force\+To\+Track(), Manipulator\+::insert\+In\+Track(), Manipulator\+::make\+Dogleg(), Manipulator\+::minimize(), and Manipulator\+::shrink\+To\+Track().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_ab3b06bb353ee9333be6b937bffc8fd84}\label{classKite_1_1SegmentFsm_ab3b06bb353ee9333be6b937bffc8fd84}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!get\+Actions@{get\+Actions}}
\index{get\+Actions@{get\+Actions}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{get\+Actions()}{getActions()}}
{\footnotesize\ttfamily vector$<$ \hyperlink{classKite_1_1SegmentAction}{Segment\+Action} $\ast$ $>$ \& get\+Actions (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} The table of \hyperlink{classKite_1_1SegmentAction}{Segment\+Action}, that is the delayed requests for \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event} creation.
Referenced by Manipulator\+::shrink\+To\+Track().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_adf5147448951f8dc8b4088a1032e97b2}\label{classKite_1_1SegmentFsm_adf5147448951f8dc8b4088a1032e97b2}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!set\+State@{set\+State}}
\index{set\+State@{set\+State}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{set\+State()}{setState()}}
{\footnotesize\ttfamily unsigned int set\+State (\begin{DoxyParamCaption}\item[{unsigned int}]{state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
{\bfseries Returns\+:} Sets the state of the state...
Referenced by Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::force\+To\+Track(), Manipulator\+::insert\+In\+Track(), Routing\+Event\+::process(), and Manipulator\+::shrink\+To\+Track().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_ad9384c1cc2a9cd70ab9ff089b56380a0}\label{classKite_1_1SegmentFsm_ad9384c1cc2a9cd70ab9ff089b56380a0}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!add\+Action@{add\+Action}}
\index{add\+Action@{add\+Action}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{add\+Action()}{addAction()}}
{\footnotesize\ttfamily void add\+Action (\begin{DoxyParamCaption}\item[{\hyperlink{classKite_1_1TrackElement}{Track\+Element} $\ast$}]{segment, }\item[{unsigned int}]{type, }\item[{\textbf{ Db\+U\+::\+Unit}}]{axis\+Hint = {\ttfamily 0}, }\item[{unsigned int}]{to\+State = {\ttfamily 0} }\end{DoxyParamCaption})}
Request the creation of a new delayed \hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}, for the meaning of the parameters, see \hyperlink{classKite_1_1SegmentAction_acbeca58f8327b69a540628f299d5bd35}{Segment\+Action\+::\+Segment\+Action}.
Referenced by Segment\+Fsm\+::desaturate(), Manipulator\+::force\+Over\+Locals(), Manipulator\+::force\+To\+Track(), Manipulator\+::insert\+In\+Track(), Manipulator\+::minimize(), Routing\+Event\+::process(), Manipulator\+::relax(), Manipulator\+::repack\+Perpandiculars(), Manipulator\+::ripple(), Manipulator\+::ripup(), Manipulator\+::ripup\+Perpandiculars(), Manipulator\+::shrink\+To\+Track(), and Segment\+Fsm\+::slacken\+Topology().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_abbcf429498049478d4d8ab94cdb4a022}\label{classKite_1_1SegmentFsm_abbcf429498049478d4d8ab94cdb4a022}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!do\+Actions@{do\+Actions}}
\index{do\+Actions@{do\+Actions}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{do\+Actions()}{doActions()}}
{\footnotesize\ttfamily bool do\+Actions (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
Actually generate Routing\+Event(s) from the Segment\+Action(s).
Referenced by Routing\+Event\+::process().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a4cf911f1f4e5ac588d502c9d069a1bde}\label{classKite_1_1SegmentFsm_a4cf911f1f4e5ac588d502c9d069a1bde}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!clear\+Actions@{clear\+Actions}}
\index{clear\+Actions@{clear\+Actions}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{clear\+Actions()}{clearActions()}}
{\footnotesize\ttfamily void clear\+Actions (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Clear the the table of requested actions, whithout generating them.
Referenced by Manipulator\+::insert\+In\+Track(), and Segment\+Fsm\+::slacken\+Topology().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a7140b507da2cab137d968a037bed19df}\label{classKite_1_1SegmentFsm_a7140b507da2cab137d968a037bed19df}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!insert\+In\+Track@{insert\+In\+Track}}
\index{insert\+In\+Track@{insert\+In\+Track}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{insert\+In\+Track()}{insertInTrack()}}
{\footnotesize\ttfamily bool insert\+In\+Track (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{i }\end{DoxyParamCaption})}
Try to insert the \hyperlink{classKite_1_1TrackElement}{Track\+Element} in the \hyperlink{classKite_1_1Track}{Track} at index {\ttfamily i} (in the cost table). Return {\bfseries true} if the insertion is possible.
The insertion is not done at this stage, but a set of ripup actions is emitted to allow insertion the next time the segment will be processed.
Three subsequent trials are done before giving up on inserting the segment\+:
\begin{DoxyEnumerate}
\item \hyperlink{classKite_1_1Manipulator_a7140b507da2cab137d968a037bed19df}{Manipulator\+::insert\+In\+Track()}, try to push asides the neighbors.
\item \hyperlink{classKite_1_1Manipulator_aba69c61ccb330e26aaa8211f0454795f}{Manipulator\+::shrink\+To\+Track()}, try squeeze the segment in an existing free space.
\item \hyperlink{classKite_1_1Manipulator_a76d3956660cfa624696e2a5f2916cd22}{Manipulator\+::force\+To\+Track()}, perform a complete ripup of all the neighbors and their perpandiculars.
\end{DoxyEnumerate}
The event keeps track of the insertion attempt step (see \hyperlink{classKite_1_1RoutingEvent_a00f02910915e7deb857f023e5d584c08}{Routing\+Event\+::get\+Insert\+State()}).
Referenced by Routing\+Event\+::process().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a0d9a9926ae67cc7998799347f135e28a}\label{classKite_1_1SegmentFsm_a0d9a9926ae67cc7998799347f135e28a}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!conflict\+Solve\+By\+History@{conflict\+Solve\+By\+History}}
\index{conflict\+Solve\+By\+History@{conflict\+Solve\+By\+History}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{conflict\+Solve\+By\+History()}{conflictSolveByHistory()}}
{\footnotesize\ttfamily bool conflict\+Solve\+By\+History (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
{\bfseries Returns\+:} {\bfseries true} if a suitable dogleg has been created in the segment.
Initially, global segments may be very long, and a placement solution in which each one is placed on a track of it\textquotesingle{}s own may not be realisable. In that case, at least one of the global segment must be broken. The figure below illustrate the case\+: {\bfseries (a)}, {\bfseries (b)}, {\bfseries (c)} form a first cluster and {\bfseries (d)}, {\bfseries (e)}, {\bfseries (f)} form a second one. Due to the constraints of the segments the remaining free track cannot be the same in both clusters. The only solution to place {\bfseries (g)} is to break it into two sub-\/globals. The whole point of the conflict solve is to correctly detect the cluster and choose the breaking point.
This variant of the conflict solve method try to guess the track span for which there is a conflict by looking at the event history.
{\bfseries Dislodger Definition\+:}
A segment is said to be a dislodger if it matches the two following criterions\+:
\begin{DoxyItemize}
\item It\textquotesingle{}s span intersect the to be inserted segment span.
\item It has been placed on a track inside the perpandicular span of the to be placed segment.
\end{DoxyItemize}
For the time beeing we limit the search to the last three dislodgers, to not waste too much time looking back the event history. We merge overlapping intervals into one (see the undocumented class {\ttfamily Union\+Intervals} and {\ttfamily Ripup\+History} in {\ttfamily Segment\+Fsm.\+cpp}).
For the time beeing we only look on the track into which the to be inserted segment wants to be placed.
Then we try to break the to be placed segment, first under the lower bound (source) of the conflicting interval then, in case of failure under the upper bound (target).
Referenced by Segment\+Fsm\+::desaturate().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a9c0fa6a9067b6e027e24f38330f627dc}\label{classKite_1_1SegmentFsm_a9c0fa6a9067b6e027e24f38330f627dc}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!conflict\+Solve\+By\+Placeds@{conflict\+Solve\+By\+Placeds}}
\index{conflict\+Solve\+By\+Placeds@{conflict\+Solve\+By\+Placeds}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{conflict\+Solve\+By\+Placeds()}{conflictSolveByPlaceds()}}
{\footnotesize\ttfamily bool conflict\+Solve\+By\+Placeds (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
{\bfseries Returns\+:} {\bfseries true} if a suitable dogleg has been created in the segment {\itshape or} a dislodger has been moved up.
This methods achieve the same goal as \hyperlink{classKite_1_1SegmentFsm_a0d9a9926ae67cc7998799347f135e28a}{Segment\+Fsm\+::conflict\+Solve\+By\+History()} but uses a different strategy.
Instead of looking through the history to find dislodgers it analyses the placed segments in all the candidates tracks for the to be placed segment. Unlike it\textquotesingle{}s sibling method, which creates only one dogleg, as it uses the \hyperlink{classKite_1_1Manipulator_a8b5b69fd5762d5a0cbc4ceea4d1b68c1}{Manipulator\+::relax()} method, it may creates up to two doglegs.
{\bfseries Synthetic Description}
\begin{DoxyEnumerate}
\item For each track, find the dislodgers, merge the overlaps into one interval and store the length of the longuest overlap (aka conflict).
\item Sort the tracks according to decreasing longuest overlap/confict.
\item For each track in the sorted list, look for a dislodger under the middle of the to be placed segment. If no dislodger is present at this place go to the next track. Otherwise\+:
\begin{DoxyItemize}
\item {\itshape The dislodger is local}, then try to relax the to placed segment around the dislodger.
\item {\itshape The dislodger is global}, try to move it up, if it is not possible, fallback to the relax approach.
\end{DoxyItemize}
\item Quit on the first successful move up or relax.
\item If there is no candidate tracks, this means the vertical constraints are too tight, in that case, ripup the perpandiculars (fallback plan).
\end{DoxyEnumerate}
{\bfseries Interval Accounting}
Only global conflicting segments are took into account. Local segments may be took into account if they overlap global ones (all part of the same net). All overlapping segments are merged into one big conflict interval. The whole length of a conflict interval is took into account event if it\textquotesingle{}s overlap with the to be placed segment is only partial.
{\bfseries \hyperlink{classKite_1_1Track}{Track} Ordering (lexicographic)}
\begin{DoxyEnumerate}
\item The longuest (in one interval) conflict length.
\item The longuest cumulative conflict length (all interval summed up).
\end{DoxyEnumerate}
Interval accounting and \hyperlink{classKite_1_1Track}{Track} ordering is managed through the undocumented {\ttfamily Cs1\+Candidate} class implemented in {\ttfamily Segment\+Fsm.\+cpp}.
Referenced by Segment\+Fsm\+::desaturate().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_a0b8e8be9d7c9501be9534d3c2a9dd586}\label{classKite_1_1SegmentFsm_a0b8e8be9d7c9501be9534d3c2a9dd586}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!desaturate@{desaturate}}
\index{desaturate@{desaturate}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{desaturate()}{desaturate()}}
{\footnotesize\ttfamily bool desaturate (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
Try to create a suitable empty space in a cost \hyperlink{classKite_1_1Track}{Track} by moving up \hyperlink{classKite_1_1TrackElement}{Track\+Element} in conflict. \mbox{\Hypertarget{classKite_1_1SegmentFsm_a623d68f599c0de60cdd36af3f183e6f1}\label{classKite_1_1SegmentFsm_a623d68f599c0de60cdd36af3f183e6f1}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!slacken\+Topology@{slacken\+Topology}}
\index{slacken\+Topology@{slacken\+Topology}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{slacken\+Topology()}{slackenTopology()}}
{\footnotesize\ttfamily bool slacken\+Topology (\begin{DoxyParamCaption}\item[{unsigned int}]{flags = {\ttfamily 0} }\end{DoxyParamCaption})}
Modificate the topology of the \hyperlink{classKite_1_1TrackElement}{Track\+Element} to slacken it. It is the implementation of the slakening finite state machine.
Referenced by Routing\+Event\+::process().
\mbox{\Hypertarget{classKite_1_1SegmentFsm_ab8ae818baad1d0a274a7e8c308ca3f92}\label{classKite_1_1SegmentFsm_ab8ae818baad1d0a274a7e8c308ca3f92}}
\index{Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}!solve\+Full\+Blockages@{solve\+Full\+Blockages}}
\index{solve\+Full\+Blockages@{solve\+Full\+Blockages}!Kite\+::\+Segment\+Fsm@{Kite\+::\+Segment\+Fsm}}
\paragraph{\texorpdfstring{solve\+Full\+Blockages()}{solveFullBlockages()}}
{\footnotesize\ttfamily bool solve\+Full\+Blockages (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
Try to solve a fully blocked configuration.
Referenced by Segment\+Fsm\+::desaturate().
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
Segment\+Fsm.\+h\item
Segment\+Fsm.\+cpp\item
Segment\+Fsm.\+dox\end{DoxyCompactItemize}