+\bbtkGuide[Developer's Guide]
+
+
+
+
+
+% ==========================================
+%\tableofcontents
+% ==========================================
+
+% ==========================================
+\newpage
+\hrule
+
+% ==========================================
+\section{Introduction}
+% ==========================================
+
+% ==========================================
+\section{The library architecture}
+% ==========================================
+
+% ==========================================
+\subsection{BlackBox and related classes}
+% ==========================================
+
+% ==========================================
+\subsection{Factory and Package}
+% ==========================================
+
+% ==========================================
+\subsection{Interpreter, VirtualExec, Executer and Transcriptor}
+% ==========================================
+
+% ==========================================
+\subsection{WxGUI elements}
+% ==========================================
+
+% ==========================================
+\subsection{Utilities}
+% ==========================================
+
+% ==========================================
+\section{Pipeline processing algorithm}
+% ==========================================
+
+% ==========================================
+\subsection{Input and output status}
+% ==========================================
+Each input of a black box has a Status,
+of type IOStatus (defined in bbtkConnection.h)
+which can take one of the three values:
+\begin{itemize}
+\item UPTODATE (==0): The input did not change since last processing
+\item MODIFIED (==1): [Initial value on construction] The input changed since last processing but is synchronized with the amont box output to which it is connected, if any. This status has only a NOTIFICATION purpose, to let the processing method of the box know which inputs have changed since last time. If it is connected, a MODIFIED input will not call the amont box update during pipeline execution.
+\item OUTOFDATE (==2): The input changed since last processing and is NOT synchronized with the amont box output to which it is connected. This means that the pipeline update must recurse to the amont box next time it is executed, in order to update the input value.
+\end{itemize}
+The status of an input is stored by the class BlackBoxInputConnector.
+
+Each output of a black box instance also has a Status,
+of type IOStatus but which can only take the two values:
+\begin{itemize}
+\item UPTODATE (==0): The output is up-to-date (the box does not need to be reprocessed).
+\item OUTOFDATE (==2): [Initial value on construction] The output is out-of-date (the box needs to be reprocessed).
+\end{itemize}
+The status of an output is stored by the class BlackBoxOutputConnector.
+
+If a box output 'O' is connected to another box input 'I' then there are some consistency constraints on their I/O statuses:
+
+\begin{tabular}{|l|p{10cm}|}
+\hline
+If & then \\ \hline
+'I' is UPTODATE & 'O' is necesseraly UPTODATE\\
+'I' is MODIFIED & 'O' is necesseraly UPTODATE\\
+'I' is OUTOFDATE & 'O' can be in any Status (The case 'O' is UPTODATE occurs for example when the amont box was created and executed - hence setting its outputs UPTODATE - *BEFORE* being connected to the aval box)\\ \hline
+'O' is UPTODATE & 'I' can be in any Status\\
+'O' is OUTOFDATE & 'I' is necessarly OUTOFDATE\\ \hline
+\end{tabular}
+
+The status of an input can be modified:
+\begin{itemize}
+\item By BlackBox::bbSetStatusAndPropagate which is called by:
+\begin{itemize}
+\item BlackBox::bbSetInput when a new value of an input is set.
+\item BlackBox::bbSignalOutputModification when the output which is connected to it is signaled as modified.
+\item BlackBox::bbConnectInput which is called when a Connection is connected to the input.
+\item Connection::OnOutputChange
+\end{itemize}
+\item By BlackBox::bbComputePostProcessStatus which is called after bbProcess in BlackBox::bbRecursiveExecute.
+\item By Connection::RecursiveExecute which is responsible for updating its amont box, transfering the output value to the input and updating the input status.
+\end{itemize}
+
+The status of an output can be modifed in:
+\begin{itemize}
+\item By BlackBox::bbSetStatusAndPropagate, when propagating the new input status to the outputs.
+\item By BlackBox::bbComputePostProcessStatus, which is called after bbProcess in BlackBox::bbRecursiveExecute.
+\end{itemize}