193 lines
14 KiB
TeX
193 lines
14 KiB
TeX
\hypertarget{classKite_1_1RoutingEventQueue}{}\subsection{Routing\+Event\+Queue Class Reference}
|
|
\label{classKite_1_1RoutingEventQueue}\index{Routing\+Event\+Queue@{Routing\+Event\+Queue}}
|
|
|
|
|
|
The priority Queue of \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}}.
|
|
|
|
|
|
\subsubsection*{Public Member Functions}
|
|
\begin{DoxyCompactItemize}
|
|
\item
|
|
\mbox{\hyperlink{classKite_1_1RoutingEventQueue_a67dd3abe4f9f4f32e91dfaa9573976ca}{Routing\+Event\+Queue}} ()
|
|
\item
|
|
\mbox{\hyperlink{classKite_1_1RoutingEventQueue_a28ed9894863ae1029f16744a86d4bfab}{$\sim$\+Routing\+Event\+Queue}} ()
|
|
\item
|
|
bool \mbox{\hyperlink{classKite_1_1RoutingEventQueue_a644718bb2fb240de962dc3c9a1fdf0dc}{empty}} () const
|
|
\item
|
|
size\+\_\+t \mbox{\hyperlink{classKite_1_1RoutingEventQueue_a259cb5a711406a8c3e5d937eb9350cca}{size}} () const
|
|
\item
|
|
unsigned int \mbox{\hyperlink{classKite_1_1RoutingEventQueue_a85befa55ce7e51c7067f4f7cb29acc0a}{get\+Top\+Event\+Level}} () const
|
|
\item
|
|
\mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} $\ast$ \mbox{\hyperlink{classKite_1_1RoutingEventQueue_af1b85d0b49565932c55ec55625cd8838}{pop}} ()
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_a7f5a051812b2925dc3c1cca8b2011237}{load}} (const vector$<$ \mbox{\hyperlink{classKite_1_1TrackElement}{Track\+Element}} $\ast$$>$ \&)
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_af0813b67c9fc72d960f7e512e9403d57}{add}} (\mbox{\hyperlink{classKite_1_1TrackElement}{Track\+Element}} $\ast$, unsigned int level)
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_ac802427673567526d06af911e94f7216}{push}} (\mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} $\ast$)
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_afd2fa6d6f5d90c472bea9befa97d955d}{repush}} (\mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} $\ast$)
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_a4fb0022d3e8f91a862b5f6438b7f8dad}{repush\+Invalidateds}} ()
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_ad55316f5135cdae6aa6c5a763f6c3473}{commit}} ()
|
|
\item
|
|
void \mbox{\hyperlink{classKite_1_1RoutingEventQueue_ac8bb3912a3ce86b15842e79d0b421204}{clear}} ()
|
|
\end{DoxyCompactItemize}
|
|
|
|
|
|
\subsubsection{Detailed Description}
|
|
The priority Queue of \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}}.
|
|
|
|
\hypertarget{classKite_1_1RoutingEventQueue_secImplRoutingEventQueue}{}\subsubsection{Implementation Details}\label{classKite_1_1RoutingEventQueue_secImplRoutingEventQueue}
|
|
The \mbox{\hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue}} is build upon a S\+TL multiset$<$$>$ and is sorted according to the \mbox{\hyperlink{classKite_1_1RoutingEvent_1_1Key}{Routing\+Event\+::\+Key}} attribute of the event. The key attribute has been designed specifically to be used with this queue. It provides the features\+:
|
|
\begin{DoxyItemize}
|
|
\item Sort the \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} according to their priority. Higher priority mainly means more constrained segment, which must be routed first.
|
|
\item The attributes of \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} may change while inserted in the queue. The key provide a cached value of those attributes ensuring a stable sorting order.
|
|
\end{DoxyItemize}
|
|
|
|
For more details about the sorting order, refer to \mbox{\hyperlink{classKite_1_1RoutingEvent_1_1Key}{Routing\+Event\+::\+Key}}.
|
|
|
|
{\bfseries Insertion, Reinsertion \& Commit}
|
|
|
|
When pushing a new event into the queue, the actual insertion into the multimap is delayed until the next call to {\ttfamily Routing\+Event\+::commit()}. The to be inserted events are stored into a request set which is processed when commit is called. At commit time, the \mbox{\hyperlink{classKite_1_1RoutingEvent_1_1Key}{Routing\+Event\+::\+Key}} cache is updated just before inserting the element.
|
|
|
|
When repushing an event, the event is immediatly withdrawn from the queue and put into the request set.
|
|
|
|
{\bfseries Mutiple Event for one Segment}
|
|
|
|
As \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} can be cloned, there may be more than one event pointing to a segment. But there must be {\itshape only one active event}, the one which is pointed to by the segment. As a result, there maybe multiple events for an unique segment in the queue, but {\itshape only one active event}, the one that will be processed.
|
|
|
|
\subsubsection{Constructor \& Destructor Documentation}
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a67dd3abe4f9f4f32e91dfaa9573976ca}\label{classKite_1_1RoutingEventQueue_a67dd3abe4f9f4f32e91dfaa9573976ca}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!Routing\+Event\+Queue@{Routing\+Event\+Queue}}
|
|
\index{Routing\+Event\+Queue@{Routing\+Event\+Queue}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{Routing\+Event\+Queue()}{RoutingEventQueue()}}
|
|
{\footnotesize\ttfamily \mbox{\hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue}} (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
|
|
|
|
Contructor, create an empty queue. \mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a28ed9894863ae1029f16744a86d4bfab}\label{classKite_1_1RoutingEventQueue_a28ed9894863ae1029f16744a86d4bfab}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!````~Routing\+Event\+Queue@{$\sim$\+Routing\+Event\+Queue}}
|
|
\index{````~Routing\+Event\+Queue@{$\sim$\+Routing\+Event\+Queue}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{$\sim$\+Routing\+Event\+Queue()}{~RoutingEventQueue()}}
|
|
{\footnotesize\ttfamily $\sim$\mbox{\hyperlink{classKite_1_1RoutingEventQueue}{Routing\+Event\+Queue}} (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
|
|
|
|
Destructor.
|
|
|
|
\begin{DoxyParagraph}{Remark\+: The destruction of the queue do not delete the}
|
|
\mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} that may still be in it (they shouldn\textquotesingle{}t an a warning is issued).
|
|
\end{DoxyParagraph}
|
|
|
|
|
|
\subsubsection{Member Function Documentation}
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a644718bb2fb240de962dc3c9a1fdf0dc}\label{classKite_1_1RoutingEventQueue_a644718bb2fb240de962dc3c9a1fdf0dc}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!empty@{empty}}
|
|
\index{empty@{empty}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{empty()}{empty()}}
|
|
{\footnotesize\ttfamily bool empty (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
|
|
|
|
{\bfseries Returns\+:} {\bfseries true} if there is the queue is empty. \mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a259cb5a711406a8c3e5d937eb9350cca}\label{classKite_1_1RoutingEventQueue_a259cb5a711406a8c3e5d937eb9350cca}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!size@{size}}
|
|
\index{size@{size}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{size()}{size()}}
|
|
{\footnotesize\ttfamily size\+\_\+t size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
|
|
|
|
{\bfseries Returns\+:} The number of events in the queue. \mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a85befa55ce7e51c7067f4f7cb29acc0a}\label{classKite_1_1RoutingEventQueue_a85befa55ce7e51c7067f4f7cb29acc0a}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!get\+Top\+Event\+Level@{get\+Top\+Event\+Level}}
|
|
\index{get\+Top\+Event\+Level@{get\+Top\+Event\+Level}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{get\+Top\+Event\+Level()}{getTopEventLevel()}}
|
|
{\footnotesize\ttfamily unsigned int get\+Top\+Event\+Level (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
|
|
|
|
{\bfseries Returns\+:} The greatest event level the queue has ever reached (always increasing, starting from zero). \mbox{\Hypertarget{classKite_1_1RoutingEventQueue_af1b85d0b49565932c55ec55625cd8838}\label{classKite_1_1RoutingEventQueue_af1b85d0b49565932c55ec55625cd8838}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!pop@{pop}}
|
|
\index{pop@{pop}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{pop()}{pop()}}
|
|
{\footnotesize\ttfamily \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} $\ast$ pop (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
|
|
|
|
Remove the top element of the queue (i.\+e. the one with the highest priority) and return it. If the queue is empty, {\ttfamily N\+U\+LL} is returned. \mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a7f5a051812b2925dc3c1cca8b2011237}\label{classKite_1_1RoutingEventQueue_a7f5a051812b2925dc3c1cca8b2011237}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!load@{load}}
|
|
\index{load@{load}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{load()}{load()}}
|
|
{\footnotesize\ttfamily void load (\begin{DoxyParamCaption}\item[{const vector$<$ \mbox{\hyperlink{classKite_1_1TrackElement}{Track\+Element}} $\ast$$>$ \&}]{segments }\end{DoxyParamCaption})}
|
|
|
|
Load a whole vector of \mbox{\hyperlink{classKite_1_1TrackElement}{Track\+Element}} into the queue, for each element\+:
|
|
\begin{DoxyItemize}
|
|
\item Create a \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} linked to the element. To be reviewed\+: replace any previous event.
|
|
\item Insert the new \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} into the queue.
|
|
\end{DoxyItemize}
|
|
|
|
{\itshape No commit is needed after this operation.} \mbox{\Hypertarget{classKite_1_1RoutingEventQueue_af0813b67c9fc72d960f7e512e9403d57}\label{classKite_1_1RoutingEventQueue_af0813b67c9fc72d960f7e512e9403d57}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!add@{add}}
|
|
\index{add@{add}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{add()}{add()}}
|
|
{\footnotesize\ttfamily void add (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKite_1_1TrackElement}{Track\+Element}} $\ast$}]{element, }\item[{unsigned int}]{level }\end{DoxyParamCaption})}
|
|
|
|
Create a new \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} in the queue with {\ttfamily level}, associated to {\ttfamily element}. A commit is needed afterwards.
|
|
|
|
To be reviewed\+: replace any previous event on element.
|
|
|
|
Referenced by Negociate\+Window\+::add\+Routing\+Event().
|
|
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_ac802427673567526d06af911e94f7216}\label{classKite_1_1RoutingEventQueue_ac802427673567526d06af911e94f7216}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!push@{push}}
|
|
\index{push@{push}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{push()}{push()}}
|
|
{\footnotesize\ttfamily void push (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} $\ast$}]{event }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
|
|
|
|
Push a \mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} in the queue. Effective only after the next commit.
|
|
|
|
Referenced by Routing\+Event\+Queue\+::add(), and Routing\+Event\+Queue\+::repush().
|
|
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_afd2fa6d6f5d90c472bea9befa97d955d}\label{classKite_1_1RoutingEventQueue_afd2fa6d6f5d90c472bea9befa97d955d}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!repush@{repush}}
|
|
\index{repush@{repush}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{repush()}{repush()}}
|
|
{\footnotesize\ttfamily void repush (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classKite_1_1RoutingEvent}{Routing\+Event}} $\ast$}]{event }\end{DoxyParamCaption})}
|
|
|
|
Force a complete queue re-\/insertion for {\ttfamily event}. The event is immediatly withdrawn from the queue and put into the insertion request set.
|
|
|
|
If the {\ttfamily event} is not already in the queue, works like \mbox{\hyperlink{classKite_1_1RoutingEventQueue_ac802427673567526d06af911e94f7216}{Routing\+Event\+Queue\+::push()}}.
|
|
|
|
Referenced by Routing\+Event\+Queue\+::repush\+Invalidateds(), and Routing\+Event\+::reschedule().
|
|
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_a4fb0022d3e8f91a862b5f6438b7f8dad}\label{classKite_1_1RoutingEventQueue_a4fb0022d3e8f91a862b5f6438b7f8dad}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!repush\+Invalidateds@{repush\+Invalidateds}}
|
|
\index{repush\+Invalidateds@{repush\+Invalidateds}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{repush\+Invalidateds()}{repushInvalidateds()}}
|
|
{\footnotesize\ttfamily void repush\+Invalidateds (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
|
|
|
|
Using the list of invalidated segments from the \mbox{\hyperlink{classKite_1_1Session}{Session}}, repush them if\+:
|
|
\begin{DoxyItemize}
|
|
\item They have an associated event.
|
|
\item The event is not {\itshape unimplemented}, {\itshape disabled} or {\itshape processed}.
|
|
\end{DoxyItemize}
|
|
|
|
Referenced by Routing\+Event\+::process().
|
|
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_ad55316f5135cdae6aa6c5a763f6c3473}\label{classKite_1_1RoutingEventQueue_ad55316f5135cdae6aa6c5a763f6c3473}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!commit@{commit}}
|
|
\index{commit@{commit}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{commit()}{commit()}}
|
|
{\footnotesize\ttfamily void commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
|
|
|
|
Process the insertion request set and actually insert it\textquotesingle{}s elements into the queue. Perform a Routing\+Event\+::key update prior to insertion.
|
|
|
|
Referenced by Routing\+Event\+::process().
|
|
|
|
\mbox{\Hypertarget{classKite_1_1RoutingEventQueue_ac8bb3912a3ce86b15842e79d0b421204}\label{classKite_1_1RoutingEventQueue_ac8bb3912a3ce86b15842e79d0b421204}}
|
|
\index{Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}!clear@{clear}}
|
|
\index{clear@{clear}!Kite\+::\+Routing\+Event\+Queue@{Kite\+::\+Routing\+Event\+Queue}}
|
|
\paragraph{\texorpdfstring{clear()}{clear()}}
|
|
{\footnotesize\ttfamily void clear (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
|
|
|
|
Empty the queue. Issue a warning if the queue is not empty (i.\+e. some events remains to be processeds).
|
|
|
|
Referenced by Routing\+Event\+Queue\+::$\sim$\+Routing\+Event\+Queue().
|
|
|
|
|
|
|
|
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
|
|
\item
|
|
Routing\+Event\+Queue.\+h\item
|
|
Routing\+Event\+Queue.\+cpp\item
|
|
Routing\+Event\+Queue.\+dox\end{DoxyCompactItemize}
|