+bbUpdateInputs iterates the InputConnectorMap of the box and
+calls RecursiveExecute on each BlackBoxInputConnector.
+It returns the max of the final status of the input connectors:
+\bigskip\hrule\begin{verbatim}
+IOStatus BlackBox::bbUpdateInputs()
+{
+ IOStatus s = UPTODATE;
+ InputConnectorMapType::iterator i;
+ for ( i = bbGetInputConnectorMap().begin();
+ i!= bbGetInputConnectorMap().end(); ++i)
+ {
+ i->second->RecursiveExecute();
+ IOStatus t = i->second->GetStatus();
+ if (t > s) s = t;
+ }
+ return s;
+}
+\end{verbatim}\hrule\bigskip
+
+bbComputPostProcessStatus computes the new status of inputs and outputs
+after box processing.
+
+The input status update rules are simple:
+
+\begin{tabular}{|lll|}
+\hline
+UPTODATE & remains & UPTODATE\\ \hline
+MODIFIED & becomes & UPTODATE\\ \hline
+OUTOFDATE & remains & OUTOFDATE\\ \hline
+\end{tabular}
+
+The new output status is:
+
+\begin{tabular}{|ll|}
+\hline
+OUTOFDATE & if any input is OUTOFDATE\\
+& or bbBoxProcessModeIsAlways() is true\\ \hline
+UPTODATE & in any other case\\ \hline
+\end{tabular}
+
+\bigskip\hrule\begin{verbatim}
+void BlackBox::bbComputePostProcessStatus()
+{
+ // A priori, the new output status is UPTODATE
+ // except if the BoxProcessMode is always
+ IOStatus new_output_status = UPTODATE;
+ if (bbBoxProcessModeIsAlways()) new_output_status = OUTOFDATE;
+
+ // Update the input statuses
+ InputConnectorMapType::iterator i;
+ for ( i = bbGetInputConnectorMap().begin();
+ i!= bbGetInputConnectorMap().end(); ++i)
+ {
+ IOStatus t = i->second->GetStatus();
+ // If any input is OUTOFDATE then the outputs also are
+ if (t == OUTOFDATE) new_output_status = OUTOFDATE;
+ // A previously MODIFIED status turns to UPTODATE
+ if (t==MODIFIED) i->second->SetStatus(UPTODATE);
+ }
+
+ // Update the output statuses
+ OutputConnectorMapType::iterator o;
+ for ( o = bbGetOutputConnectorMap().begin();
+ o!= bbGetOutputConnectorMap().end(); ++o)
+ {
+ o->second->SetStatus(new_output_status);
+ }
+}
+\end{verbatim}\hrule\bigskip
+
+
+BlackBox::bbUpdateInputs may calls BlackBoxInputConnector::RecursiveExecute
+which is responsible for recursive update of the input value.
+If it is connected and its status is OUTOFDATE then it calls
+RecursiveExecute on the Connection which is plugged into:
+\bigskip\hrule\begin{verbatim}
+void BlackBoxInputConnector::RecursiveExecute()
+{
+ // If connected and OUTOFDATE : recursive update
+ // Post-update status is updated by the connection
+ // (either MODIFIED or OUTOFDATE)
+ if ( mConnection && (mStatus == OUTOFDATE) )
+ {
+ mConnection->RecursiveExecute();
+ }
+}
+\end{verbatim}\hrule\bigskip
+
+Connection::RecursiveExecute does:
+\begin{enumerate}
+\item Call bbRecursiveExecute on the initial box of the connection
+\item Transfer the data from the initial box output to the final box input, adpating it if needed (add crossref).
+\item Update the final box input status. It sets it to:
+
+\begin{tabular}{lll}
+MODIFIED & If the initial box output is & UPTODATE \\
+OUTOFDATE & If the initial box output is & OUTOFDATE
+\end{tabular}
+\end{enumerate}
+
+\bigskip\hrule\begin{verbatim}
+void Connection::RecursiveExecute()
+{
+ // Calls bbRecursiveExecute on the initial box
+ mFrom->bbRecursiveExecute(GetThisPointer<Connection>());
+ // Transfers the data from the initial box output to the
+ // final box input adapting it if necessary
+ TransferData();
+ // Updates the status of the final box input
+ IOStatus s = MODIFIED;
+ if ( mFrom->bbGetOutputConnector(mOutput).GetStatus() == OUTOFDATE)
+ s = OUTOFDATE;
+ mTo->bbGetInputConnector(mInput).SetStatus(s);
+}
+\end{verbatim}\hrule\bigskip
+
+% ==========================================
+\subsection{The main processing method (bbProcess) overloads}
+% ==========================================
+
+BlackBox::bbProcess
+
+
+
+
+% ==========================================
+\section{Misc}
+% ==========================================
+
+\subsection{Displaying messages}
+
+\begin{verbatim}
+bbtkMessage("Kind",level,"message "<<"to "<<" display : i="<<i<<std::endl);
+bbtkDebugMessage("Kind",level,"message "<<"to "<<" display : i="<<i<<std::endl);
+\end{verbatim}