summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/messagepassing/messagepassing.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/messagepassing/messagepassing.dtx')
-rw-r--r--macros/latex/contrib/messagepassing/messagepassing.dtx861
1 files changed, 0 insertions, 861 deletions
diff --git a/macros/latex/contrib/messagepassing/messagepassing.dtx b/macros/latex/contrib/messagepassing/messagepassing.dtx
deleted file mode 100644
index 3811f558a5..0000000000
--- a/macros/latex/contrib/messagepassing/messagepassing.dtx
+++ /dev/null
@@ -1,861 +0,0 @@
-% \iffalse meta-comment
-% Copyright (C) 2022 by Martin Vassor
-% This file may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either
-% version 1.3 of this license or (at your option) any later
-% version. The latest version of this license is in:
-%
-% http://www.latex-project.org/lppl.txt
-%
-% and version 1.3 or later is part of all distributions of
-% LaTeX version 2005/12/01 or later.
-%
-% \fi
-
-% \iffalse
-%<package> \NeedsTeXFormat{LaTeX2e}
-%<package> \ProvidesPackage{messagepassing}[2022/02/18 v1.0 A package to draw message passing diagrams]
-%<package> \RequirePackage{tikz}
-%<package> \usetikzlibrary{quotes, calc, arrows.meta}
-%<package> \RequirePackage{xparse}
-%<package> \RequirePackage{float}
-%
-
-%<*driver>
-\documentclass{ltxdoc}
-\usepackage{messagepassing}
-\usepackage[hidelinks]{hyperref}
-\usepackage{xspace}
-\usepackage[super]{nth}
-\usepackage{subcaption}
-\usepackage{listings}
-\lstset{
- language=[LaTeX]{TeX},
-}
-\EnableCrossrefs
-\CodelineIndex
-\RecordChanges
-\begin{document}
- \DocInput{messagepassing.dtx}
-\end{document}
-%</driver>
-% \fi
-
-% \CheckSum{0}
-%
-% \CharacterTable
-% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-% Digits \0\1\2\3\4\5\6\7\8\9
-% Exclamation \! Double quote \" Hash (number) \#
-% Dollar \$ Percent \% Ampersand \&
-% Acute accent \' Left paren \( Right paren \)
-% Asterisk \* Plus \+ Comma \,
-% Minus \- Point \. Solidus \/
-% Colon \: Semicolon \; Less than \<
-% Equals \= Greater than \> Question mark \?
-% Commercial at \@ Left bracket \[ Backslash \\
-% Right bracket \] Circumflex \^ Underscore \_
-% Grave accent \` Left brace \{ Vertical bar \|
-% Right brace \} Tilde \~}
-%
-%
-% \changes{v1.0}{2022/02/18}{Initial version for publication}
-%
-% \GetFileInfo{messagepassing.sty}
-%
-% \title{The \textsf{messagepassing} package\thanks{This document
-% corresponds to \textsf{messagepassing}~\fileversion,
-% dated \filedate.}}
-% \author{Martin Vassor\\ \texttt{bromind+ctan@gresille.org}}
-%
-%
-% \maketitle
-% \tableofcontents
-% \newcommand{\TikZ}{Ti\textit{k}Z\xspace}
-
-% \section{Introduction}
-% This package provides an environment and associated macros to easily draw
-% message passing diagrams. For instance, Execution.~\ref{mp:ex1} shows the capabilities offered
-% by the package.
-%
-% \begin{messagepassing}[][An example of message passing][h][mp:ex1]
-% \newprocesswithlength{p}{9}
-% \newprocesswithlength{q}{9}
-% \newprocesswithlength{r}{5}
-% \crash{r}{5}{k}
-%
-% \checkpoint{p}{0}{c_p^0}
-% \checkpoint{q}{0}{c_q^0}
-% \checkpoint{r}{0}{c_r^0}
-% \checkpoint{p}{4}{c_p^1}
-%
-% \stateinterval{p}{0}{si_p^0}
-% \stateinterval{q}{0}{si_q^0}
-% \stateinterval{r}{0}{si_r^0}
-%
-% \sendwithstateinterval{p}{1}{q}{2}{si_q^1}
-% \sendwithstateinterval{r}{3}{q}{4}{si_q^2}
-% \sendwithstateintervalandname{q}{5}{p}{6}{si_p^1}{\(m\)}
-% \sendoutofband{q}{5}{r}{6}{\(m_\mathrm{copy}\)}
-% \stateinterval{r}{6}{si_r^0}
-% \restart{r}{6}{3}
-%
-% \annotate{r}{8}{restart}
-% \annotatexplicit{p}{8}{\(1+1=2\)}{note}
-%
-% \colouredbox{p}{q}{7}{9}{Protocol}
-%
-% \drawtimeline{9}
-% \end{messagepassing}
-
-%
-% \section{Usage}
-% \subsection{Loading the package}
-% The package accepts two options: \verb+vertical+ and \verb+annotatevertical+.
-% If the former is set, executions will be drawn with time going from top to
-% bottom, instead of from left to right. Doing so, almost all
-% labels\footnote{Annotations are not rotated, unless explicitly asked.} are
-% rotated as well. If, \emph{in addition}, \verb+annotatevertical+ is set, then
-% annotations (including named of colouredboxes) are rotated as well.
-
-% \subsection{Basic usage}
-% \subsubsection{Creating a diagram.}
-
-% \DescribeEnv{messagepassing} A diagram can easily be created using the
-% |messagepassing| environment. The syntax is:
-% |\begin{messagepassing}| \oarg{tikz} \oarg{caption} \oarg{placement}
-% \oarg{label}.
-% The first optional argument (\emph{tikz}) contains arguments that are passed
-% to the underlying tikz environment. The second argument (\emph{caption}) has
-% two effect: if set, it turns the diagram into a floating figure, and the
-% content of the argument is the caption of the floating figure. The third
-% argument (\emph{placement}) is the placement option of the figure, the default
-% is |p|. Finally, the fourth option (\emph{label}) is the label used to
-% reference the figure.
-%
-% For instance, the diagram in Figure~\ref{mp:ex1} is created with the following
-% commands:
-% \begin{verbatim}
-% \begin{messagepassing}[][An example of message passing][h][mp:ex1]
-% % ...
-% \end{messagepassing}
-% \end{verbatim}
-
-% \paragraph{Setting up the diagram.}
-% When created, the diagram is empty. Before actually writing the message
-% exchanges, we have to set up a few things: set whether we want a timeline (and
-% if it is the case, of which length), and set the number of processes with
-% their names, etc.
-% \subparagraph{Creating a new process.}
-% Each process is characterised by its name.
-% \DescribeMacro{\newprocess} The simplest macro to create a new process is then
-% |\newprocess| \marg{name}, where \marg{name} is the name of the process (resp.
-% \(p\), \(q\), and \(r\) in Figure~\ref{mp:ex1}).
-%
-% In addition, we often draw a horizontal\footnote{By default, the line is vertical if
-% the option |vertical| is used.} line that represent the running process.
-% Although this line can be manually
-% added\footnote{|processlength|\marg{process}\marg{length}
-% creates a line of length \emph{length} for process \emph{process}.}, we also
-% provide a simple macro that performs both actions:
-% \DescribeMacro{\newprocesswithlength}
-% |\newprocesswithlength|\marg{name}\marg{length}.
-%
-% An other alternative is to name the state in which the process starts (in
-% Fig~\ref{mp:ex1}, we call those states \(si\) as \emph{state intervals}).
-% Again, this can be achieved using individual commands, but we also provide
-% \DescribeMacro{\newprocesswithstateinterval}
-% |\newprocesswithstateinterval|\marg{name}\marg{state name}.
-%
-% Finally, an other way to create a process is to create a process that
-% (eventually) fails, which is represented by the process' line terminating
-% early with a cross. For that, we provide \DescribeMacro{\newprocesswithcrash}
-% |\newprocesswithcrash|\marg{name}\marg{length}\marg{crash coordinate name}.
-% The first two arguments are similar to |\newprocesswithlength|, and the latter
-% one is used to provide a name for the coordinate where the crash occurs. This
-% name can later be used to place nodes.
-%
-% Of course, we can imagine other combinations (e.g. a process with a length and
-% a state interval). We do not provide individual commands for each combination,
-% but the can be easily achieved using separate commands.
-%
-% As an example, the processes of Fig.~\ref{mp:ex1} are created as follows.
-% \begin{verbatim}
-% \newprocesswithlength{p}{9}
-% \newprocesswithlength{q}{9}
-% \newprocesswithlength{r}{5}
-% \end{verbatim}
-%
-% \subparagraph{Setting up a timeline.}
-% An other setup action consists in setting up (if wanted) the timeline. Notice
-% that this can be done \emph{at any place} in the diagram. To do so, simply use
-% the command \DescribeMacro{\drawtimeline}|\drawtimeline|\marg{length}, where
-% \emph{length} is the length of the desired timeline.
-
-% \subsubsection{Populating the run.}
-% Now that we have some processes, we have to populate the diagram with some
-% actions.
-%
-% \paragraph{Basic message.}
-% The most basic action is to send a message. For that, we provide the command
-% \DescribeMacro{\send} |\send|\marg{sender}\marg{send
-% time}\marg{receiver}\marg{receive time}. The sender and receiver are
-% identified with their names, and the sending and receiving times are given
-% according to their timestamp\footnote{Notice that nothing prevents sending
-% messages in the past, simply set a receiving time before the sending time.}.
-%
-% In addition, we can label the arrow with the message that is sent with
-% \DescribeMacro{\sendwithname}
-% |\sendwithname|\marg{sender}\marg{send time}\marg{receiver}\marg{receive
-% time}\marg{label}.
-% For instance, in Figure~\ref{fig:ex_msg}, we use |\send{p}{1}{q}{2}|.
-%
-% Finally, we sometimes distinguish \emph{out-of-band} messages, e.g. messages
-% that do not carry informations, but that are for instance used for metadata,
-% etc.. We provide the macro
-% \DescribeMacro{\sendoutofband}|\sendoutofband|\marg{sender}\marg{send time}\marg{receiver}\marg{receive
-% time}\marg{label}, which behaves similarly to |\sendwithname|, but prints the
-% message in an other colour.
-%
-% \begin{figure}
-% \centering
-% \begin{minipage}{.35\textwidth}
-% \begin{messagepassing}
-% \newprocesswithlength{p}{4}
-% \newprocesswithlength{q}{4}
-% \send{p}{1}{q}{2}
-% \sendwithname{p}{2}{q}{3}{msg}
-% \end{messagepassing}
-% \end{minipage}
-% ~
-% \begin{minipage}{.60\textwidth}
-% \iffalse
-%<*example>
-% \fi
-% \begin{lstlisting}
-\begin{messagepassing}
- \newprocesswithlength{p}{4}
- \newprocesswithlength{q}{4}
- \send{p}{1}{q}{2}
- \sendwithname{p}{2}{q}{3}{msg}
-\end{messagepassing}
-\end{lstlisting}
-% \iffalse
-%</example>
-% \fi
-% \end{minipage}
-% \caption{A very simple protocol with a single message exchanged.}
-% \label{fig:ex_msg}
-% \end{figure}
-%
-%
-
-% \paragraph{Process crash and restore.}
-% The crash of a process can be represented using
-% \DescribeMacro{\crash}
-% |\crash|\marg{process name}\marg{time}\marg{crash name}. The argument \emph{process name}
-% is the name of the process that crashes, and \emph{crash name} is used to give
-% a name to the crash. Naming the crash is useful for coordinates (see below).
-% Finally, \emph{time} specifies when the crash occurs. Notice that this does
-% not modify the timeline: it simply adds a crash token at the specified
-% coordinate. This means that (i) then timeline has to stop at the crash's time;
-% and (ii) it has to be restarted after. To stop the timeline, simply take the
-% crash into account when setting the initial timeline. To restart the timeline,
-% we provide the command
-% \DescribeMacro{\restart}|\restart|\marg{name}\marg{date}\marg{duration}.
-% \emph{name} specifies which process is to be restarted; \emph{date} specifies
-% when the process should be restarted, and \emph{duration} specifies how long
-% the process shoud be alive (i.e. what is the length of the timeline) after the
-% restart.
-% \begin{figure}
-% \centering
-% \begin{minipage}{.35\textwidth}
-% \begin{messagepassing}
-% \newprocesswithlength{p}{4}
-% \newprocesswithlength{q}{2}
-% \send{p}{1}{q}{2}
-% \crash{q}{2}{crash}
-% \restart{q}{3}{1}
-% \end{messagepassing}
-% \end{minipage}
-% ~
-% \begin{minipage}{.60\textwidth}
-% \iffalse
-%<*example>
-% \fi
-% \begin{lstlisting}
- \begin{messagepassing}
- \newprocesswithlength{p}{4}
- \newprocesswithlength{q}{2}
- \send{p}{1}{q}{2}
- \crash{q}{2}{crash}
- \restart{q}{3}{1}
- \end{messagepassing}
-\end{lstlisting}
-% \iffalse
-%</example>
-% \fi
-% \end{minipage}
-% \caption{A protocol with a crashed process.}
-% \end{figure}
-%
-
-% \paragraph{Tokens on the run}
-%
-% The package also proposes two kinds of tokens that can be added on protocols'
-% lines. The first one is a \emph{checkpoint} (i.e. a state that is saved
-% somewhere) and the second is used to denote the begining of a \emph{state
-% interval} (a state interval denotes a period in which a process only performs
-% deterministic events). The former are denoted with a small black rectangle,
-% while the later is denoted with a vertical line. Although those two tokens are
-% intended for the usage mentionned above, we encourage users to use them for
-% other usages if need be.
-%
-% A checkpoint can be added with
-% \DescribeMacro{\checkpoint}|\checkpoint|\marg{process}\marg{time}\marg{name},
-% where \emph{process} is the name of the process which takes a checkpoint,
-% \emph{time} is the the time at which the checkpoint is taken, and \emph{name}
-% is the name of the checkpoint, that is printed next to it, and can be used as
-% a coordinate. Notice that the name is printed in a math environment, as we
-% expect most checkpoints names to be indexed, e.g.\(c_1\), \(c_2\), etc.
-% To have more control on the printed name, or if the proposed name is not a
-% valid coordinate name, we offer a variant
-% \DescribeMacro{\checkpointspecial}|\checkpointspecial|\marg{process}\marg{time}\marg{name}\marg{label},
-% where \emph{name} is the name of the coordinate of the checkpoint, and
-% \emph{label} is the label to be printed. Notice that, in that case, the label
-% is printed as is, i.e. not typeset as maths.
-
-%
-% A state interval can be added similarly with the command
-% \DescribeMacro{\stateinterval}|\stateinterval|
-% \marg{process}\marg{time}\marg{name}.
-%
-% For the sake of completeness, if you need the name of the coordinate and the
-% displayed label to be different (e.g. if the label can not be the name of a
-% coordinate, for whatever reason), we also provide the command
-% \DescribeMacro{\stateintervalspecial}
-% |\stateintervalspecial|\marg{process}\marg{time}\marg{name}\marg{label}, in
-% which \emph{name} is the name of the created coordinate, and \emph{label} is
-% the label attached to the state interval.
-
-% \begin{figure}
-% \centering
-% \begin{minipage}{.35\textwidth}
-% \begin{messagepassing}
-% \newprocesswithlength{q}{2}
-% \checkpoint{q}{1}{c_1}
-% \crash{q}{2}{crash}
-% \restart{q}{3}{1}
-% \end{messagepassing}
-% \end{minipage}
-% ~
-% \begin{minipage}{.60\textwidth}
-% \iffalse
-%<*example>
-% \fi
-% \begin{lstlisting}
- \begin{messagepassing}
- \newprocesswithlength{q}{2}
- \checkpoint{q}{1}{c_1}
- \crash{q}{2}{crash}
- \restart{q}{3}{1}
- \end{messagepassing}
-\end{lstlisting}
-% \iffalse
-%</example>
-% \fi
-% \end{minipage}
-% \caption{A protocol with a checkpoint.}
-% \end{figure}
-
-% \paragraph{Grey boxes}
-%
-% In Execution~\ref{mp:ex1}, we created a light-red box between processes \(p\)
-% and \(q\), from time \(7\) to \(9\), to indicate that they perform a given
-% protocol that we don't detail further. We call such boxes (which can be used for a lot
-% of other purposes) \emph{colouredboxes}, and they
-% can be added with \DescribeMacro{\colouredbox} |\colouredbox|\marg{first
-% process}\marg{second process}\marg{start time}\marg{end time}\marg{label}.
-% This creates a box that spans between \emph{first process} and \emph{second
-% process}, from \emph{start time} to \emph{end time}, with the label
-% \emph{label} printed.
-%
-% Notice that there are no technical restrictions to adding messages on top of a
-% box, typically to highlight a specific part of a larger execution.
-
-% \paragraph{Annotations}
-% Finally, it is possible to add annotations on the diagram. To do so, we
-% provide the macro
-% \DescribeMacro{\annotate}|\annotate|\marg{process}\marg{time}\marg{text} which
-% adds an annotation with \emph{text} over the timeline of the given
-% \emph{process} at time \emph{time}. This also creates a coordinate at the
-% annotation time, which name is the content of the annotation (i.e.\
-% \emph{text}). If \emph{text} is not a valid coordinate name, then the
-% alternative \DescribeMacro{\annotatexplicit}
-% |\annotatexplicit|\marg{process}\marg{time}\marg{text}\marg{name} behaves
-% similarly, except that the coordinate name is explicitly given in argument
-% \emph{name}.
-
-% \subsubsection{Combined commands}
-% The above commands are sufficient to use all primitives offered by the
-% package. In addition, we provide a lot of \emph{combined commands}, which, as
-% the name suggest, have the effect of multiple \emph{simple} commands.
-%
-% \begin{itemize}
-% \item |\newprocesswithlength|\marg{name}\marg{lifetime}: combination of
-% |\newprocess|\marg{name} and |\processlength|\marg{name}\marg{lifetime}
-% \item |\newprocesswithstateinterval|\marg{process name}\marg{state interval
-% name}: combination of |\newprocess|\marg{process name} and
-% |\stateinterval|\marg{process name}\marg{0}\marg{state interval name}
-% \item |\newprocesswithcrash|\marg{process name}\marg{crash time}\marg{crash
-% name}: creates a process \emph{process name} that runs until \emph{crash
-% time}. The crash is named \emph{crash name}.
-% \item |\sendwithstateinterval|\marg{sender}\marg{send
-% time}\marg{receiver}\marg{receive time}\marg{si name}: combines |\send| and
-% |\stateinterval|.
-% \item |\sendwithstateintervalandname|\marg{sender}\marg{send
-% time}\marg{receiver}\marg{receive time}\marg{si name}\marg{message name}:
-% combines |\sendwithname| and |\stateinterval|
-% \end{itemize}
-
-% \subsection{Advanced usage}
-% \subsubsection{Customising colours}
-%
-% Two parts of the package use colours: colouredboxes and out-of-band messages. By
-% default both are shades of red. We provide commands to change that if desired.
-%
-% \DescribeMacro{\colouredboxcolor}|\colouredboxcolor|\marg{colour} changes the colour
-% used for colouredboxes. Notice that this sets both the background colour (which is
-% a light variant of the provided colour) and the text colour (which uses the
-% provided colour).
-%
-% \DescribeMacro{\oobcolor}|\oobcolor|\marg{colour} changes the colour used for
-% out-of-band messages.
-%
-% \subsubsection{Coordinates}
-%
-% \paragraph{\TikZ coordinates.}
-% Message passing diagrams are drawn using \TikZ, which means that one can add
-% arbitrary commands to a diagram. In addition, the package defines useful
-% coordinates to refer to. Execution~\ref{mp:ex2} shows the \TikZ coordinate plan
-% overlayed on top of Execution~\ref{mp:ex1}.
-%
-% On \TikZ \(y\)-axis processes are instanciated one unit apart from each other,
-% in their declaration order.
-% To keep the coordinate system simple, processes expand in the negative (e.g.
-% the first process declared is at coordinate \((0, -1)\), the second at \((0,
-% -2)\), etc.).
-%
-% The \TikZ \(x\)-axis corresponds to the time axis of the diagram. Therefore,
-% e.g. coordinate \((3, -4)\) corresponds to the \nth{3} time step of the
-% \nth{4} process.
-%
-% \paragraph{Named coordinates.}
-% In addition to explicit coordinates explained above, the package names most of
-% the points of interest in the diagram.
-%
-% \subparagraph{Coordinates of processes.}
-% At each process declaration, a coordinate named after the name of the process
-% is created. The coordinate corresponds to the beginning of the corresponding
-% process' timeline (for instance, in Execution~\ref{mp:ex2}, we show coordinate
-% \((\texttt{q})\), that corresponds to the process \(q\)).
-%
-% \subparagraph{Coordinate of states intervals (resp. checkpoints, resp. crashes).}
-% Similarly to processes, each state interval (resp. checkpoint, resp. crashes) creates a
-% coordinate, named after the name of the state interval (resp. checkpoint,
-% resp. crashes), is created. The coordinates refers to the place of the state
-% interval (resp. checkpoint, resp. crashes). For instance, in
-% Execution~\ref{mp:ex2}, we show the coordinates \((\texttt{si\_q\^{}1})\),
-% \((\texttt{c\_p\^{}1})\) and \((\texttt{k})\), that respectively correspond to the state interval
-% \(si_q^1\), the checkpoint \(c_p^1\) and the crash\footnote{The names of
-% crashes are not printed on the figure, although they are internally defined.} \(k\).
-%
-% \subparagraph{Coordinates of annotations.}
-% When an annotation is created, a coordinate is created at the same place, on
-% the process' timeline\footnote{Notice that, using the explicit variant of |annotate|
-% (|annotatexplicit|), the name of the annotation has to be explicitly given.}
-% For instance, in Execution~\ref{mp:ex1}, the annotation \(1+1=2\) is created
-% with the explicit name ``\texttt{note}''. We show the corresponding coordinate in
-% Execution~\ref{mp:ex2}.
-%
-%
-% \begin{messagepassing}[][Showing \TikZ coordinates][h][mp:ex2]
-% \newprocesswithlength{p}{9}
-% \newprocesswithlength{q}{9}
-% \newprocesswithlength{r}{5}
-% \crash{r}{5}{k}
-%
-% \checkpoint{p}{0}{c_p^0}
-% \checkpoint{q}{0}{c_q^0}
-% \checkpoint{r}{0}{c_r^0}
-% \checkpoint{p}{4}{c_p^1}
-%
-% \stateinterval{p}{0}{si_p^0}
-% \stateinterval{q}{0}{si_q^0}
-% \stateinterval{r}{0}{si_r^0}
-%
-% \sendwithstateinterval{p}{1}{q}{2}{si_q^1}
-% \sendwithstateinterval{r}{3}{q}{4}{si_q^2}
-% \sendwithstateintervalandname{q}{5}{p}{6}{si_p^1}{\(m\)}
-% \sendoutofband{q}{5}{r}{6}{\(m_\mathrm{copy}\)}
-% \stateinterval{r}{6}{si_r^0}
-% \restart{r}{6}{3}
-%
-% \annotate{r}{8}{restart}
-% \annotatexplicit{p}{8}{\(1+1=2\)}{note}
-%
-% \colouredbox{p}{q}{7}{9}{Protocol}
-% \drawtimeline{9}
-%
-%
-% \fill[fill=white, opacity=0.8] (-1, 0) rectangle (10, -5);
-%
-% \draw[dotted, gray] (-1,0) grid (10,-5);
-% \draw[->, thick, red] (0, 0) -- (1, 0) node [anchor=south, text=black] {\((1, 0)\)};
-% \draw[->, thick, red] (0, 0) -- (0, -1) node [anchor=east, text=black] {\((0, -1)\)};
-%
-% \draw[fill] (q) circle [radius=.5mm];
-% \node[anchor=east] at (q) {\((\texttt{q})\)};
-%
-% \draw[fill] (si_q^1) circle [radius=.5mm];
-% \node[anchor=east] at (si_q^1) {\((\texttt{si\_q\^{}1})\)};
-%
-% \draw[fill] (c_p^1) circle [radius=.5mm];
-% \node[anchor=east] at (c_p^1) {\((\texttt{c\_p\^{}1})\)};
-%
-% \draw[fill] (k) circle [radius=.5mm];
-% \node[anchor=east] at (k) {\((\texttt{k})\)};
-%
-% \draw[fill] (note) circle [radius=.5mm];
-% \node[anchor=east] at (note) {\((\texttt{note})\)};
-%
-% \end{messagepassing}
-
-% \StopEventually{}
-%
-% \section{Implementation}
-
-% \begin{macrocode}
-\newcounter{processnb}
-\setcounter{processnb}{0}
-\newcounter{maxtime}
-
-\pgfdeclarelayer{background}
-\pgfsetlayers{background,main}
-
-\newfloat{float_messagepassing}{t b h p}{.mp}
-\floatname{float_messagepassing}{Execution}
-
-\newif\ifmp@vertical\mp@verticalfalse
-\DeclareOption{vertical}{
- \mp@verticaltrue
-}
-\newif\ifmp@annotatevertical\mp@annotateverticalfalse
-\DeclareOption{annotatevertical}{
- \mp@annotateverticaltrue
-}
-\ProcessOptions\relax
-
-\ifmp@vertical
- \newcommand{\mp@processnameanchor}{south}
- \newcommand{\mp@timeticksanchor}{east}
- \newcommand{\mp@messagelabelanchor}{south}
- \newcommand{\mp@stateintervalanchor}{north west}
- \newcommand{\mp@checkpointanchor}{east}
- \newcommand{\mp@verticalrotation}{270}
- \ifmp@annotatevertical
- \newcommand{\mp@annotaterotation}{270}
- \else
- \newcommand{\mp@annotaterotation}{0}
- \fi
-\else
- \newcommand{\mp@processnameanchor}{east}
- \newcommand{\mp@timeticksanchor}{north}
- \newcommand{\mp@messagelabelanchor}{west}
- \newcommand{\mp@stateintervalanchor}{south west}
- \newcommand{\mp@checkpointanchor}{north}
- \newcommand{\mp@verticalrotation}{0}
- \newcommand{\mp@annotaterotation}{0}
-\fi
-
-\newcommand{\mp@oobcolor}{red}
-\newcommand{\oobcolor}[1]{
- \renewcommand\mp@oobcolor{#1}
-}
-
-\newcommand{\mp@colouredboxcolor}{red}
-\newcommand{\colouredboxcolor}[1]{
- \renewcommand\mp@colouredboxcolor{#1}
-}
-
-\newif\iftimeline
-% \end{macrocode}
-%
-
-%\begin{environment}{messagepassing}
-% \begin{macrocode}
-\ExplSyntaxOn
-%% 1st argument: tikz arguments
-%% 2nd argument: Float caption (turns in floating)
-%% 3rd argument: Float placement (`p` by default)
-%% 4th argument: Float label
- \NewDocumentEnvironment{messagepassing} {o o o o}
- {
- \timelinefalse
- \setcounter{processnb}{0}
- \IfNoValueTF{#2} {
- }{
- \IfNoValueTF{#3}{
- \begin{float_messagepassing}[p]
- } {
- \begin{float_messagepassing}[#3]
- }
- \begin{center}
- }
- \IfNoValueTF{#1}{
- \begin{tikzpicture}[rotate=\mp@verticalrotation]
- } {
- \begin{tikzpicture}[rotate=\mp@verticalrotation, #1]
- }
- }{
- %% Draw timeline if boolean is true
- \iftimeline
- \begin{pgfonlayer}{background}
- \setcounter{maxtime}{\@maxtime}
- \addtocounter{maxtime}{-1}
- \coordinate (maxtime) at (\@maxtime, 0);
-
- \addtocounter{processnb}{1}
- \coordinate (timeline) at (0, -\value{processnb});
- \draw (timeline) node [anchor=\mp@processnameanchor] {{\it time}};
- \draw[->] (timeline) -- ($(timeline) + (maxtime)$);
- \foreach \i in {0,...,\value{maxtime}} {
- \draw ($(timeline) + (\i, 0) + (0, 0.1)$) -- ($(timeline) + (\i, 0) + (0, -0.1)$) node [anchor=\mp@timeticksanchor] {$\i$};
- }
- \end{pgfonlayer}
- \else
- \fi
- \end{tikzpicture}
- \IfNoValueTF{#2} {
- \linebreak
- } {
- \end{center}
- \caption{#2}
- \IfNoValueTF{#4} {
- }{
- \label{#4}
- }
- \end{float_messagepassing}
- }
- }
-\ExplSyntaxOff
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{macrocode}
-%% #1: name
-\newcommand{\newprocess}[1]{
- \addtocounter{processnb}{1}
- \coordinate (#1) at (0, -\value{processnb});
- \draw (#1) node[anchor=\mp@processnameanchor] {$#1$};
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: name
-%% #2: width
-\newcommand{\newprocesswithlength}[2]{
- \newprocess{#1}
- \processlength{#1}{#2}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: name
-%% #2: state interval name
-\newcommand{\newprocesswithstateinterval}[2]{
- \newprocess{#1}
- \stateinterval{#1}{0}{#2}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: name
-%% #2: width
-%% #3: crash name
-\newcommand{\newprocesswithcrash}[3]{
- \newprocess{#1}{#2}
- \crash{#1}{#2}{#3}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: sender's name
-%% #2: send date
-%% #3: receiver's name
-%% #4: receive date
-\newcommand{\send}[4]{
- \draw[->] (#1) +(#2, 0) -- ($ (#3) +(#4, 0) $);
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: sender's name
-%% #2: send date
-%% #3: receiver's name
-%% #4: receive date
-%% #5: message name
-\newcommand{\sendwithname}[5]{
- \draw[->] (#1) +(#2, 0) -- ($ (#3) +(#4, 0) $) node[anchor=\mp@messagelabelanchor, pos=0.3] {#5};
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process name
-%% #2: process width
-\newcommand{\processlength}[2]{
- \draw (#1) -- +(#2, 0);
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: sender's name
-%% #2: send date
-%% #3: receiver's name
-%% #4: receive date
-%% #5: state interval name
-\newcommand{\sendwithstateinterval}[5] {
- \send{#1}{#2}{#3}{#4}
- \stateinterval{#3}{#4}{#5}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: sender's name
-%% #2: send date
-%% #3: receiver's name
-%% #4: receive date
-%% #5: state interval name
-%% #6: message name
-\newcommand{\sendwithstateintervalandname}[6] {
- \sendwithname{#1}{#2}{#3}{#4}{#6}
- \stateinterval{#3}{#4}{#5}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: sender's name
-%% #2: send date
-%% #3: receiver's name
-%% #4: receive date
-%% #5: OoB message name
-\newcommand{\sendoutofband}[5]{
- \draw[->, color=\mp@oobcolor] (#1) +(#2, 0) -- ($ (#3) +(#4, 0) $) node[anchor=\mp@messagelabelanchor, pos=0.3] {#5};
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: state interval date
-%% #3: state interval name
-\newcommand{\stateinterval}[3] {
- \stateintervalspecial{#1}{#2}{#3}{#3}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: state interval date
-%% #3: coordinate name
-%% #4: state interval label
-\newcommand{\stateintervalspecial}[4] {
- \coordinate (#3) at ($ (#1) +(#2, 0) $);
- \draw (#3) + (0, 0.1) -- +(0, -0.1) node[anchor=\mp@stateintervalanchor] {$#4$};
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: checkpoint date
-%% #3: checkpoint name
-\newcommand{\checkpoint}[3]{
- \coordinate (#3) at ($ (#1) + (#2, 0) $);
- \fill (#3) + (-0.05, 0.1) rectangle +(0.05, -0.1);
- \draw (#3) + (0, -0.1) node[anchor=\mp@checkpointanchor] {$#3$};
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: checkpoint date
-%% #3: checkpoint coordinate name
-%% #4: checkpoint label
-\newcommand{\checkpointspecial}[4]{
- \coordinate (#3) at ($ (#1) + (#2, 0) $);
- \fill (#3) + (-0.05, 0.1) rectangle +(0.05, -0.1);
- \draw (#3) + (0, -0.1) node[anchor=\mp@checkpointanchor] {#4};
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: crash date
-%% #3: crash name
-\newcommand{\crash}[3]{
- \coordinate (#3) at ($ (#1) + (#2, 0) $);
- \draw (#3) + (-0.1, -0.1) -- +(0.1, 0.1);
- \draw (#3) + (0.1, -0.1) -- +(-0.1, 0.1);
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: restart date
-%% #3: restart length
-\newcommand{\restart}[3]{
- \draw (#1) + (#2, 0) -- ($ (#1) + (#2, 0) + (#3, 0) $);
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: first process's name
-%% #2: second process's name
-%% #3: begining of the grey box
-%% #4: end of the grey box
-%% #5: caption
-\newcommand{\colouredbox}[5]{
- \begin{pgfonlayer}{background}
- \fill[color=\mp@colouredboxcolor!20] ($(#1) + (#3, 0)$) rectangle ($(#2) + (#4, 0)$) node[midway, color = \mp@colouredboxcolor, rotate=\mp@annotaterotation]{#5};
- \end{pgfonlayer}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: Timeline length
-\newcommand{\drawtimeline}[1]{
- \timelinetrue
- \def\@maxtime{#1}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% #1: process's name
-%% #2: annotation date
-%% #3: annotation
-\newcommand{\annotate}[3]{
- \annotatexplicit{#1}{#2}{#3}{#3}
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%% Same than annotate, but with the coordinate name provided explicitly
-%% #1: process's name
-%% #2: annotation date
-%% #3: annotation
-%% #4: coordinate name
-\newcommand{\annotatexplicit}[4]{
- \coordinate (#4) at ($ (#1) +(#2, 0.1) $);
- \draw (#4) node[rotate=\mp@annotaterotation, anchor=south] {#3};
-}
-% \end{macrocode}