Adding helper functions for server part; cleaning up
[iotcloud.git] / doc / iotcloud.tex
index 78fee74f444fd8ad26aaffa443a92eea2c71cbfd..79525458af929316271ceaa4b1fc6de003ced8b1 100644 (file)
@@ -52,7 +52,7 @@ client's last entry from the queue. This is kept in the slot until
 the entry owner inserts a newer update into the queue.}\r
 \item Queue state entry: Includes queue size \newline {The purpose \r
 of this is for the client to tell if the server lies about the number \r
-of slots in the queue, e.g. if there are 2 queue state entry in the queue, \r
+of slots in the queue, e.g. if there are 2 queue state entries in the queue, \r
 e.g. 50 and 70, the client knows that when it sees 50, it should expect \r
 at most 50 slots in the queue and after it sees 70, it should expect \r
 50 slots before that queue state entry slot 50 and at most 70 slots. \r
@@ -127,38 +127,45 @@ Client can make a request to resize the queue. This is done as a write that comb
 \subsection{Server Algorithm}\r
 $s \in SN$ is a sequence number\\\r
 $sv \in SV$ is a slot's value\\\r
-$slot_s = \tuple{s, sv} \in Q \subseteq SN \times SV$ \\\r
+$slot_s = \tuple{s, sv} \in SL \subseteq SN \times SV$ \\\r
 \r
 \textbf{State} \\\r
-\textit{Q = set of live slots on server} \\\r
+\textit{SL = set of live slots on server} \\\r
 \textit{max = maximum number of slots (input only for resize message)} \\\r
-\textit{n = number of slots} \\\r
+\textit{n = number of slots} \\ \\\r
+\textbf{Helper Function} \\\r
+$MaxSlot(SL')= \langle s, sv \rangle \mid \langle s, sv \rangle \r
+\in SL' \wedge \forall \langle s', sv' \rangle \in SL', s \geq s'$ \\\r
+$MinSlot(SL')= \langle s, sv \rangle \mid \langle s, sv \rangle \r
+\in SL' \wedge \forall \langle s', sv' \rangle \in SL', s \leq s'$ \\\r
+$SeqN(\langle s, sv \rangle)=s$ \\\r
+$SlotVal(\langle s, sv \rangle)=sv$ \\\r
 \r
 \begin{algorithmic}[1]\r
-\Function{GetSlot}{$s'$}\r
-\State \Return{$\{\tuple{s, sv} \in Q \mid s \geq s'\}$}\r
+\Function{GetSlot}{$s_g$}\r
+\State \Return{$\{\tuple{s, sv} \in SL \mid s \geq s_g\}$}\r
 \EndFunction\r
 \end{algorithmic}\r
 \r
 \begin{algorithmic}[1]\r
-\Function{PutSlot}{$s',sv',max'$}\r
-\If{$(max' \neq \emptyset) \land (max' > max)$}\Comment{Resize}\r
-       \State $Q' \gets new\:queue\:of\:\langle s,sv \rangle\:with\r
-    \:size\:max'$\r
-       \State $Q \gets Q' \cup Q$\r
-    \State $max \gets max'$\r
+\Function{PutSlot}{$s_p,sv_p,max'$}\r
+\If{$(max' \neq \emptyset)$}\Comment{Resize}\r
+\State $max \gets max'$\r
 \EndIf\r
-\If{$(s' = s_n + d)$}\r
+\State $\langle s_n,sv_n \rangle \gets MaxSlot(SL)$\Comment{Last sv}\r
+\State $s_n \gets SeqN(\langle s_n,sv_n \rangle)$\r
+\If{$(s_p = s_n + 1)$}\r
        \If{$n = max$}\r
-               \State $Q \gets Q - \{\langle s_n,sv_n \rangle\}$\r
+       \State $\langle s_m,sv_m \rangle \gets MinSlot(SL)$\Comment{First sv}\r
+               \State $SL \gets SL - \{\langle s_m,sv_m \rangle\}$\r
        \Else \Comment{$n < max$}\r
                \State $n \gets n + 1$\r
        \EndIf\r
-    \State $Q \gets Q \cup \{\langle s',sv' \rangle\}$\r
+    \State $SL \gets SL \cup \{\langle s_p,sv_p \rangle\}$\r
        \State \Return{$true$}\r
 \Else\r
-       \State \Return{$(false,\{\langle i,sv_i \rangle \in Q \mid \r
-    s' \leq i \leq s_n\})$}\r
+       \State \Return{$(false,\{\langle s,sv \rangle \in SL \mid \r
+    s \geq s_p\})$}\r
 \EndIf\r
 \EndFunction\r
 \end{algorithmic}\r