Backup of today's work. Still awaiting a couple more editorial inputs.
[dwarf-doc.git] / dwarf5 / latexdoc / encodingdecoding.tex
index 8e19a52..131053a 100644 (file)
@@ -7,8 +7,19 @@ Here are algorithms expressed in a C-like pseudo-code to
 encode and decode signed and unsigned numbers in LEB128
 representation.
 
-\begin{figure}[ht]
-\begin{lstlisting}
+The encode and decode algorithms given here do not take account of C/C++ rules
+that mean that in \texttt{E1}$ << $\texttt{E2} the type of \texttt{E1} should be
+a sufficiently large unsigned type to hold the correct mathematical result.
+The decode algorithms do not take account of
+or protect from possibly invalid LEB values, such as values
+that are too large to fit in the target type or that
+lack a proper terminator byte.
+Implementation languages may have additional or different rules.
+
+\vspace{2cm}
+
+\begin{figure}[hb]
+\begin{nlnlisting}
 do
 {
     byte = low order 7 bits of value;
@@ -17,13 +28,13 @@ do
         set high order bit of byte;
     emit byte;
 } while (value != 0);
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Algorithm to encode an unsigned integer}
 \addtoindexx{LEB128!unsigned, encoding as}
 \end{figure}
 
 \begin{figure}[ht]
-\begin{lstlisting}
+\begin{nlnlisting}
 more = 1;
 negative = (value < 0);
 size = no. of bits in signed integer;
@@ -46,13 +57,13 @@ while(more)
         set high order bit of byte;
     emit byte;
 }
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Algorithm to encode a signed integer}
 \addtoindexx{LEB128!signed, encoding as}
 \end{figure}
 
 \begin{figure}[ht]
-\begin{lstlisting}
+\begin{nlnlisting}
 result = 0;
 shift = 0;
 while(true)
@@ -63,13 +74,13 @@ while(true)
         break;
     shift += 7;
 }
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Algorithm to decode an unsigned LEB128 integer}
 \addtoindexx{LEB128!unsigned, decoding of}
 \end{figure}
 
 \begin{figure}[ht]
-\begin{lstlisting}
+\begin{nlnlisting}
 result = 0;
 shift = 0;
 size = number of bits in signed integer;
@@ -85,7 +96,7 @@ while(true)
 if ((shift <size) && (sign bit of byte is set))
     /* sign extend */
     result |= - (1 << shift);
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Algorithm to decode a signed LEB128 integer}
 \addtoindexx{LEB128!signed, decoding of}
 \end{figure}