Modified: websites/staging/thrift/trunk/content/tutorial/ocaml.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/ocaml.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/ocaml.html Sat Mar 22
18:57:03 2014
@@ -87,140 +87,124 @@
</ol>
<h3 id="prerequisites">Prerequisites</h3>
<h3 id="client">Client</h3>
-<div class="codehilite"><pre> <span class="p">:::</span><span
class="n">cpp</span>
-<span class="n">open</span> <span class="n">Arg</span>
+<p><div class="codehilite"><pre><span class="n">open</span> <span
class="n">Arg</span>
<span class="n">open</span> <span class="n">Thrift</span>
<span class="n">open</span> <span class="n">Tutorial_types</span>
-<span class="n">open</span> <span class="n">Shared_types</span>
-
-<span class="n">exception</span> <span class="n">Die</span><span
class="p">;;</span>
-<span class="n">let</span> <span class="n">sod</span> <span class="p">=</span>
<span class="k">function</span>
- <span class="n">Some</span> <span class="n">v</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span> <span
class="n">v</span>
- <span class="o">|</span> <span class="n">None</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span> <span
class="n">raise</span> <span class="n">Die</span><span class="p">;;</span>
-
-<span class="n">type</span> <span class="n">connection</span> <span
class="p">=</span> <span class="p">{</span>
- <span class="n">trans</span> <span class="p">:</span> <span
class="n">Transport</span><span class="p">.</span><span class="n">t</span>
<span class="p">;</span>
- <span class="n">proto</span> <span class="p">:</span> <span
class="n">Thrift</span><span class="p">.</span><span
class="n">Protocol</span><span class="p">.</span><span class="n">t</span><span
class="p">;</span>
- <span class="n">calc</span> <span class="p">:</span> <span
class="n">Calculator</span><span class="p">.</span><span
class="n">client</span> <span class="p">;</span>
-<span class="p">}</span>
-
-<span class="n">let</span> <span class="n">connect</span> <span
class="o">~</span><span class="n">host</span> <span class="n">port</span> <span
class="p">=</span>
- <span class="n">let</span> <span class="n">tx</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">TSocket</span><span class="p">.</span><span class="n">t</span> <span
class="n">host</span> <span class="n">port</span> <span class="n">in</span>
- <span class="n">let</span> <span class="n">proto</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">TBinaryProtocol</span><span class="p">.</span><span
class="n">t</span> <span class="n">tx</span> <span class="n">in</span>
- <span class="n">let</span> <span class="n">calc</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">Calculator</span><span class="p">.</span><span
class="n">client</span> <span class="n">proto</span> <span
class="n">proto</span> <span class="n">in</span>
- <span class="n">tx</span>#<span class="n">opn</span><span
class="p">;</span>
- <span class="p">{</span> <span class="n">trans</span> <span
class="p">=</span> <span class="n">tx</span> <span class="p">;</span> <span
class="n">proto</span> <span class="p">=</span> <span
class="n">proto</span><span class="p">;</span> <span class="n">calc</span>
<span class="p">=</span> <span class="n">calc</span> <span class="p">}</span>
-<span class="p">;;</span>
-
-<span class="n">let</span> <span class="n">doclient</span> <span
class="p">()</span> <span class="p">=</span>
- <span class="n">let</span> <span class="n">cli</span> <span
class="p">=</span> <span class="n">connect</span> <span class="o">~</span><span
class="n">host</span><span class="p">:</span><span class="o">&</span><span
class="n">quot</span><span class="p">;</span>127<span class="p">.</span>0<span
class="p">.</span>0<span class="p">.</span>1<span class="o">&</span><span
class="n">quot</span><span class="p">;</span> 9090 <span class="n">in</span>
+<span class="n">open</span> <span class="n">Shared_types</span></p>
+<p><span class="n">exception</span> <span class="n">Die</span><span
class="p">;;</span>
+<span class="n">let</span> <span class="n">sod</span> <span class="o">=</span>
<span class="n">function</span>
+ <span class="n">Some</span> <span class="n">v</span> <span
class="o">-></span> <span class="n">v</span>
+ <span class="o">|</span> <span class="n">None</span> <span
class="o">-></span> <span class="n">raise</span> <span
class="n">Die</span><span class="p">;;</span></p>
+<p><span class="n">type</span> <span class="n">connection</span> <span
class="o">=</span> <span class="p">{</span>
+ <span class="n">trans</span> <span class="o">:</span> <span
class="n">Transport</span><span class="p">.</span><span class="n">t</span>
<span class="p">;</span>
+ <span class="n">proto</span> <span class="o">:</span> <span
class="n">Thrift</span><span class="p">.</span><span
class="n">Protocol</span><span class="p">.</span><span class="n">t</span><span
class="p">;</span>
+ <span class="n">calc</span> <span class="o">:</span> <span
class="n">Calculator</span><span class="p">.</span><span
class="n">client</span> <span class="p">;</span>
+<span class="p">}</span></p>
+<p><span class="n">let</span> <span class="n">connect</span> <span
class="o">~</span><span class="n">host</span> <span class="n">port</span> <span
class="o">=</span>
+ <span class="n">let</span> <span class="n">tx</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">TSocket</span><span class="p">.</span><span class="n">t</span> <span
class="n">host</span> <span class="n">port</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">proto</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">TBinaryProtocol</span><span class="p">.</span><span
class="n">t</span> <span class="n">tx</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">calc</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">Calculator</span><span class="p">.</span><span
class="n">client</span> <span class="n">proto</span> <span
class="n">proto</span> <span class="n">in</span>
+ <span class="n">tx</span><span class="err">#</span><span
class="n">opn</span><span class="p">;</span>
+ <span class="p">{</span> <span class="n">trans</span> <span
class="o">=</span> <span class="n">tx</span> <span class="p">;</span> <span
class="n">proto</span> <span class="o">=</span> <span
class="n">proto</span><span class="p">;</span> <span class="n">calc</span>
<span class="o">=</span> <span class="n">calc</span> <span class="p">}</span>
+<span class="p">;;</span></p>
+<p><span class="n">let</span> <span class="n">doclient</span> <span
class="p">()</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">cli</span> <span
class="o">=</span> <span class="n">connect</span> <span class="o">~</span><span
class="nl">host:</span><span class="s">"127.0.0.1"</span> <span
class="mi">9090</span> <span class="n">in</span>
<span class="k">try</span>
- <span class="n">cli</span><span class="p">.</span><span
class="n">calc</span>#<span class="n">ping</span> <span class="p">;</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">ping</span><span
class="p">()</span><span class="o">\</span><span class="n">n</span><span
class="o">&</span><span class="n">quot</span><span class="p">;</span> <span
class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span>
<span class="p">;</span>
- <span class="p">(</span><span class="n">let</span> <span
class="n">sum</span> <span class="p">=</span> <span class="n">cli</span><span
class="p">.</span><span class="n">calc</span>#<span class="n">add</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 1<span class="p">)</span> <span class="p">(</span><span
class="n">Int32</span><span class="p">.</span><span class="n">of_int</span>
1<span class="p">)</span> <span class="n">in</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span>1<span class="o">+</span>1<span
class="p">=</span><span class="c">%ld\n&quot; sum ;</span>
+ <span class="n">cli</span><span class="p">.</span><span
class="n">calc</span><span class="err">#</span><span class="n">ping</span>
<span class="p">;</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"ping()</span><span
class="se">\n</span><span class="s">"</span> <span class="p">;</span>
<span class="n">flush</span> <span class="n">stdout</span> <span
class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span
class="n">sum</span> <span class="o">=</span> <span class="n">cli</span><span
class="p">.</span><span class="n">calc</span><span class="err">#</span><span
class="n">add</span> <span class="p">(</span><span class="n">Int32</span><span
class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span
class="p">)</span> <span class="p">(</span><span class="n">Int32</span><span
class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span
class="p">)</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"1+1=%ld</span><span
class="se">\n</span><span class="s">"</span> <span class="n">sum</span>
<span class="p">;</span>
<span class="n">flush</span> <span class="n">stdout</span><span
class="p">)</span> <span class="p">;</span>
- <span class="p">(</span><span class="n">let</span> <span
class="n">w</span> <span class="p">=</span> <span class="n">new</span> <span
class="n">work</span> <span class="n">in</span>
- <span class="n">w</span>#<span class="n">set_op</span> <span
class="n">Operation</span><span class="p">.</span><span class="n">DIVIDE</span>
<span class="p">;</span>
- <span class="n">w</span>#<span class="n">set_num1</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 1<span class="p">)</span> <span class="p">;</span>
- <span class="n">w</span>#<span class="n">set_num2</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 0<span class="p">)</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span
class="n">w</span> <span class="o">=</span> <span class="k">new</span> <span
class="n">work</span> <span class="n">in</span>
+ <span class="n">w</span><span class="err">#</span><span
class="n">set_op</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">DIVIDE</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span
class="n">set_num1</span> <span class="p">(</span><span
class="n">Int32</span><span class="p">.</span><span class="n">of_int</span>
<span class="mi">1</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span
class="n">set_num2</span> <span class="p">(</span><span
class="n">Int32</span><span class="p">.</span><span class="n">of_int</span>
<span class="mi">0</span><span class="p">)</span> <span class="p">;</span>
<span class="k">try</span>
- <span class="n">let</span> <span class="n">quotient</span> <span
class="p">=</span> <span class="n">cli</span><span class="p">.</span><span
class="n">calc</span>#<span class="n">calculate</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 1<span class="p">)</span> <span class="n">w</span>
<span class="n">in</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">Whoa</span>? <span
class="n">We</span> <span class="n">can</span> <span class="n">divide</span>
<span class="n">by</span> <span class="n">zero</span>!<span
class="o">\</span><span class="n">n</span><span class="o">&</span><span
class="n">quot</span><span class="p">;</span> <span class="p">;</span> <span
class="n">flush</span> <span class="n">stdout</span>
- <span class="n">with</span> <span class="n">InvalidOperation</span>
<span class="n">io</span> <span class="o">-&</span><span
class="n">gt</span><span class="p">;</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span
class="n">InvalidOperation</span><span class="p">:</span> <span
class="c">%s\n&quot; io#grab_why ; flush stdout) ;</span>
- <span class="p">(</span><span class="n">let</span> <span
class="n">w</span> <span class="p">=</span> <span class="n">new</span> <span
class="n">work</span> <span class="n">in</span>
- <span class="n">w</span>#<span class="n">set_op</span> <span
class="n">Operation</span><span class="p">.</span><span
class="n">SUBTRACT</span> <span class="p">;</span>
- <span class="n">w</span>#<span class="n">set_num1</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 15<span class="p">)</span> <span class="p">;</span>
- <span class="n">w</span>#<span class="n">set_num2</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 10<span class="p">)</span> <span class="p">;</span>
- <span class="n">let</span> <span class="n">diff</span> <span
class="p">=</span> <span class="n">cli</span><span class="p">.</span><span
class="n">calc</span>#<span class="n">calculate</span> <span
class="p">(</span><span class="n">Int32</span><span class="p">.</span><span
class="n">of_int</span> 1<span class="p">)</span> <span class="n">w</span>
<span class="n">in</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span>15<span class="o">-</span>10<span
class="p">=</span><span class="c">%ld\n&quot; diff ; flush stdout) ;</span>
- <span class="p">(</span><span class="n">let</span> <span
class="n">ss</span> <span class="p">=</span> <span class="n">cli</span><span
class="p">.</span><span class="n">calc</span>#<span class="n">getStruct</span>
<span class="p">(</span><span class="n">Int32</span><span
class="p">.</span><span class="n">of_int</span> 1<span class="p">)</span> <span
class="n">in</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">Check</span> <span
class="nb">log</span><span class="p">:</span> <span class="c">%s\n&quot;
ss#grab_value ; flush stdout) ;</span>
- <span class="n">cli</span><span class="p">.</span><span
class="n">trans</span>#<span class="n">close</span>
- <span class="n">with</span> <span class="n">Transport</span><span
class="p">.</span><span class="n">E</span> <span class="p">(</span><span
class="n">_</span><span class="p">,</span><span class="n">what</span><span
class="p">)</span> <span class="o">-&</span><span class="n">gt</span><span
class="p">;</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">ERROR</span><span
class="p">:</span> <span class="c">%s\n&quot; what ; flush stdout</span>
-<span class="p">;;</span>
-
-<span class="n">doclient</span><span class="p">();;</span>
-</pre></div>
-
-
+ <span class="n">let</span> <span class="n">quotient</span> <span
class="o">=</span> <span class="n">cli</span><span class="p">.</span><span
class="n">calc</span><span class="err">#</span><span class="n">calculate</span>
<span class="p">(</span><span class="n">Int32</span><span
class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span
class="p">)</span> <span class="n">w</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"Whoa? We can divide by
zero!</span><span class="se">\n</span><span class="s">"</span> <span
class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span>
+ <span class="n">with</span> <span class="n">InvalidOperation</span>
<span class="n">io</span> <span class="o">-></span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"InvalidOperation: %s</span><span
class="se">\n</span><span class="s">"</span> <span
class="n">io</span><span class="err">#</span><span class="n">grab_why</span>
<span class="p">;</span> <span class="n">flush</span> <span
class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span
class="n">w</span> <span class="o">=</span> <span class="k">new</span> <span
class="n">work</span> <span class="n">in</span>
+ <span class="n">w</span><span class="err">#</span><span
class="n">set_op</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">SUBTRACT</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span
class="n">set_num1</span> <span class="p">(</span><span
class="n">Int32</span><span class="p">.</span><span class="n">of_int</span>
<span class="mi">15</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span
class="n">set_num2</span> <span class="p">(</span><span
class="n">Int32</span><span class="p">.</span><span class="n">of_int</span>
<span class="mi">10</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">let</span> <span class="n">diff</span> <span
class="o">=</span> <span class="n">cli</span><span class="p">.</span><span
class="n">calc</span><span class="err">#</span><span class="n">calculate</span>
<span class="p">(</span><span class="n">Int32</span><span
class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span
class="p">)</span> <span class="n">w</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"15-10=%ld</span><span
class="se">\n</span><span class="s">"</span> <span class="n">diff</span>
<span class="p">;</span> <span class="n">flush</span> <span
class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span
class="n">ss</span> <span class="o">=</span> <span class="n">cli</span><span
class="p">.</span><span class="n">calc</span><span class="err">#</span><span
class="n">getStruct</span> <span class="p">(</span><span
class="n">Int32</span><span class="p">.</span><span class="n">of_int</span>
<span class="mi">1</span><span class="p">)</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"Check log: %s</span><span
class="se">\n</span><span class="s">"</span> <span
class="n">ss</span><span class="err">#</span><span class="n">grab_value</span>
<span class="p">;</span> <span class="n">flush</span> <span
class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">cli</span><span class="p">.</span><span
class="n">trans</span><span class="err">#</span><span class="n">close</span>
+ <span class="n">with</span> <span class="n">Transport</span><span
class="p">.</span><span class="n">E</span> <span class="p">(</span><span
class="n">_</span><span class="p">,</span><span class="n">what</span><span
class="p">)</span> <span class="o">-></span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"ERROR: %s</span><span
class="se">\n</span><span class="s">"</span> <span class="n">what</span>
<span class="p">;</span> <span class="n">flush</span> <span
class="n">stdout</span>
+<span class="p">;;</span></p>
+<p><span class="n">doclient</span><span class="p">();;</span>
+</pre></div></p>
<h3 id="server">Server</h3>
-<div class="codehilite"><pre> <span class="p">:::</span><span
class="n">cpp</span>
-<span class="n">open</span> <span class="n">Arg</span>
+<p><div class="codehilite"><pre><span class="n">open</span> <span
class="n">Arg</span>
<span class="n">open</span> <span class="n">Thrift</span>
<span class="n">open</span> <span class="n">Tutorial_types</span>
-<span class="n">open</span> <span class="n">Shared_types</span>
-
-<span class="n">exception</span> <span class="n">Die</span><span
class="p">;;</span>
-<span class="n">let</span> <span class="n">sod</span> <span class="p">=</span>
<span class="k">function</span>
- <span class="n">Some</span> <span class="n">v</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span> <span
class="n">v</span>
- <span class="o">|</span> <span class="n">None</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span> <span
class="n">raise</span> <span class="n">Die</span><span class="p">;;</span>
-
-<span class="n">class</span> <span class="n">calc_handler</span> <span
class="p">=</span>
+<span class="n">open</span> <span class="n">Shared_types</span></p>
+<p><span class="n">exception</span> <span class="n">Die</span><span
class="p">;;</span>
+<span class="n">let</span> <span class="n">sod</span> <span class="o">=</span>
<span class="n">function</span>
+ <span class="n">Some</span> <span class="n">v</span> <span
class="o">-></span> <span class="n">v</span>
+ <span class="o">|</span> <span class="n">None</span> <span
class="o">-></span> <span class="n">raise</span> <span
class="n">Die</span><span class="p">;;</span></p>
+<p><span class="k">class</span> <span class="nc">calc_handler</span> <span
class="o">=</span>
<span class="n">object</span> <span class="p">(</span><span
class="n">self</span><span class="p">)</span>
<span class="n">inherit</span> <span class="n">Calculator</span><span
class="p">.</span><span class="n">iface</span>
- <span class="n">val</span> <span class="nb">log</span> <span
class="p">=</span> <span class="n">Hashtbl</span><span class="p">.</span><span
class="n">create</span> 23
- <span class="n">method</span> <span class="n">ping</span> <span
class="p">=</span> <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">ping</span><span
class="p">()</span><span class="o">\</span><span class="n">n</span><span
class="o">&</span><span class="n">quot</span><span class="p">;</span> <span
class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span>
- <span class="n">method</span> <span class="n">add</span> <span
class="n">a</span> <span class="n">b</span> <span class="p">=</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span><span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">add</span><span
class="p">(</span><span class="c">%ld,%ld)\n&quot; (sod a) (sod b); flush
stdout ;</span>
+ <span class="n">val</span> <span class="n">log</span> <span
class="o">=</span> <span class="n">Hashtbl</span><span class="p">.</span><span
class="n">create</span> <span class="mi">23</span>
+ <span class="n">method</span> <span class="n">ping</span> <span
class="o">=</span> <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"ping()</span><span
class="se">\n</span><span class="s">"</span> <span class="p">;</span>
<span class="n">flush</span> <span class="n">stdout</span>
+ <span class="n">method</span> <span class="n">add</span> <span
class="n">a</span> <span class="n">b</span> <span class="o">=</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span><span class="s">"add(%ld,%ld)</span><span
class="se">\n</span><span class="s">"</span> <span class="p">(</span><span
class="n">sod</span> <span class="n">a</span><span class="p">)</span> <span
class="p">(</span><span class="n">sod</span> <span class="n">b</span><span
class="p">);</span> <span class="n">flush</span> <span class="n">stdout</span>
<span class="p">;</span>
<span class="n">Int32</span><span class="p">.</span><span
class="n">add</span> <span class="p">(</span><span class="n">sod</span> <span
class="n">a</span><span class="p">)</span> <span class="p">(</span><span
class="n">sod</span> <span class="n">b</span><span class="p">)</span>
- <span class="n">method</span> <span class="n">calculate</span> <span
class="n">logid</span> <span class="n">w</span> <span class="p">=</span>
- <span class="n">let</span> <span class="n">w</span> <span
class="p">=</span> <span class="n">sod</span> <span class="n">w</span> <span
class="n">in</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span
class="n">calculate</span><span class="p">(</span><span
class="c">%ld,{%ld,%ld,%ld})\n&quot; (sod logid) (Operation.to_i w#grab_op)
w#grab_num1 w#grab_num2; flush stdout ;</span>
- <span class="n">let</span> <span class="n">rv</span> <span
class="p">=</span>
- <span class="n">match</span> <span class="n">w</span>#<span
class="n">grab_op</span> <span class="n">with</span>
- <span class="n">Operation</span><span class="p">.</span><span
class="n">ADD</span> <span class="o">-&</span><span
class="n">gt</span><span class="p">;</span>
- <span class="n">Int32</span><span class="p">.</span><span
class="n">add</span> <span class="n">w</span>#<span class="n">grab_num1</span>
<span class="n">w</span>#<span class="n">grab_num2</span>
- <span class="o">|</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">SUBTRACT</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span>
- <span class="n">Int32</span><span class="p">.</span><span
class="n">sub</span> <span class="n">w</span>#<span class="n">grab_num1</span>
<span class="n">w</span>#<span class="n">grab_num2</span>
- <span class="o">|</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">MULTIPLY</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span>
- <span class="n">Int32</span><span class="p">.</span><span
class="n">mul</span> <span class="n">w</span>#<span class="n">grab_num1</span>
<span class="n">w</span>#<span class="n">grab_num2</span>
- <span class="o">|</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">DIVIDE</span> <span
class="o">-&</span><span class="n">gt</span><span class="p">;</span>
- <span class="k">if</span> <span class="n">w</span>#<span
class="n">grab_num2</span> <span class="p">=</span> <span
class="n">Int32</span><span class="p">.</span><span class="n">zero</span> <span
class="n">then</span>
- <span class="n">let</span> <span class="n">io</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">invalidOperation</span> <span class="n">in</span>
- <span class="n">io</span>#<span class="n">set_what</span> <span
class="p">(</span><span class="n">Operation</span><span class="p">.</span><span
class="n">to_i</span> <span class="n">w</span>#<span
class="n">grab_op</span><span class="p">)</span> <span class="p">;</span>
- <span class="n">io</span>#<span class="n">set_why</span> <span
class="o">&</span><span class="n">quot</span><span class="p">;</span><span
class="n">Cannot</span> <span class="n">divide</span> <span class="n">by</span>
0<span class="o">&</span><span class="n">quot</span><span
class="p">;</span> <span class="p">;</span>
+ <span class="n">method</span> <span class="n">calculate</span> <span
class="n">logid</span> <span class="n">w</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">w</span> <span
class="o">=</span> <span class="n">sod</span> <span class="n">w</span> <span
class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span
class="s">"calculate(%ld,{%ld,%ld,%ld})</span><span
class="se">\n</span><span class="s">"</span> <span class="p">(</span><span
class="n">sod</span> <span class="n">logid</span><span class="p">)</span> <span
class="p">(</span><span class="n">Operation</span><span class="p">.</span><span
class="n">to_i</span> <span class="n">w</span><span class="err">#</span><span
class="n">grab_op</span><span class="p">)</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_num1</span> <span
class="n">w</span><span class="err">#</span><span
class="n">grab_num2</span><span class="p">;</span> <span class="n">flush</span>
<span class="n">stdout</span> <span class="p">;</span>
+ <span class="n">let</span> <span class="n">rv</span> <span
class="o">=</span>
+ <span class="n">match</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_op</span> <span class="n">with</span>
+ <span class="n">Operation</span><span class="p">.</span><span
class="n">ADD</span> <span class="o">-></span>
+ <span class="n">Int32</span><span class="p">.</span><span
class="n">add</span> <span class="n">w</span><span class="err">#</span><span
class="n">grab_num1</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_num2</span>
+ <span class="o">|</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">SUBTRACT</span> <span class="o">-></span>
+ <span class="n">Int32</span><span class="p">.</span><span
class="n">sub</span> <span class="n">w</span><span class="err">#</span><span
class="n">grab_num1</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_num2</span>
+ <span class="o">|</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">MULTIPLY</span> <span class="o">-></span>
+ <span class="n">Int32</span><span class="p">.</span><span
class="n">mul</span> <span class="n">w</span><span class="err">#</span><span
class="n">grab_num1</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_num2</span>
+ <span class="o">|</span> <span class="n">Operation</span><span
class="p">.</span><span class="n">DIVIDE</span> <span class="o">-></span>
+ <span class="k">if</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_num2</span> <span class="o">=</span>
<span class="n">Int32</span><span class="p">.</span><span class="n">zero</span>
<span class="n">then</span>
+ <span class="n">let</span> <span class="n">io</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">invalidOperation</span> <span class="n">in</span>
+ <span class="n">io</span><span class="err">#</span><span
class="n">set_what</span> <span class="p">(</span><span
class="n">Operation</span><span class="p">.</span><span class="n">to_i</span>
<span class="n">w</span><span class="err">#</span><span
class="n">grab_op</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">io</span><span class="err">#</span><span
class="n">set_why</span> <span class="s">"Cannot divide by 0"</span>
<span class="p">;</span>
<span class="n">raise</span> <span class="p">(</span><span
class="n">InvalidOperation</span> <span class="n">io</span><span
class="p">)</span>
<span class="k">else</span>
- <span class="n">Int32</span><span class="p">.</span><span
class="n">div</span> <span class="n">w</span>#<span class="n">grab_num1</span>
<span class="n">w</span>#<span class="n">grab_num2</span> <span
class="n">in</span>
-
- <span class="n">let</span> <span class="n">ss</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">sharedStruct</span> <span class="n">in</span>
- <span class="n">ss</span>#<span class="n">set_key</span> <span
class="p">(</span><span class="n">sod</span> <span class="n">logid</span><span
class="p">)</span> <span class="p">;</span>
- <span class="n">let</span> <span class="n">buffer</span> <span
class="p">=</span> <span class="n">Int32</span><span class="p">.</span><span
class="n">to_string</span> <span class="n">rv</span> <span class="n">in</span>
- <span class="n">ss</span>#<span class="n">set_value</span> <span
class="n">buffer</span> <span class="p">;</span>
- <span class="n">Hashtbl</span><span class="p">.</span><span
class="n">add</span> <span class="nb">log</span> <span class="p">(</span><span
class="n">sod</span> <span class="n">logid</span><span class="p">)</span> <span
class="n">ss</span> <span class="p">;</span>
- <span class="n">rv</span>
-
- <span class="n">method</span> <span class="n">zip</span> <span
class="p">=</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span class="n">zip</span><span
class="p">()</span><span class="o">\</span><span class="n">n</span><span
class="o">&</span><span class="n">quot</span><span class="p">;;</span>
<span class="n">flush</span> <span class="n">stdout</span>
-
- <span class="n">method</span> <span class="n">getStruct</span> <span
class="n">logid</span> <span class="p">=</span>
- <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="o">&</span><span
class="n">quot</span><span class="p">;</span><span
class="n">getStruct</span><span class="p">(</span><span
class="c">%ld)\n&quot; (sod logid) ; flush stdout ;</span>
- <span class="n">Hashtbl</span><span class="p">.</span><span
class="nb">find</span> <span class="nb">log</span> <span
class="p">(</span><span class="n">sod</span> <span class="n">logid</span><span
class="p">)</span>
+ <span class="n">Int32</span><span class="p">.</span><span
class="n">div</span> <span class="n">w</span><span class="err">#</span><span
class="n">grab_num1</span> <span class="n">w</span><span
class="err">#</span><span class="n">grab_num2</span> <span
class="n">in</span></p>
+<div class="codehilite"><pre><span class="nt"><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>let<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>ss<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"o"</span><span
class="nt">></span>=<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"k"</span><span class="nt">></span>new<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>sharedStruct<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></
span>in<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>ss<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"err"</span><span class="nt">></span>#<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>set_key<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"p"</span><span
class="nt">></span>(<span class="nt"></span><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>sod<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>logid<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"
;p"</span><span class="nt">></span>)<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"p"</span><span
class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>let<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>buffer<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"o"</span><span class="nt">></span>=<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>Int32<span class="nt"></span><span</span> <span
class="na">class=</span><span class="s">"p"</span><span
class="nt">></span>.<span class="nt"></span><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>to_string<span class="nt"></span></span> <span
class="nt"><span</span>
<span class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>rv<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>in<span
class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>ss<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"err"</span><span class="nt">></span>#<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>set_value<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>buffer<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"p"</span><span class="nt">></span>;<span
class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>Hashtbl<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"p"</span><span class="nt">></span>.<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>add<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"n"</span><span
class="nt">></span>log<span class="nt"></span></span> <span
class="nt"><span</span> <span class="na">class=</span><span
class="s">"p"</span><span class="nt">></span>(<span
class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>sod<span
class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span
><span class="s">"n"</span><span class="nt">></span>logid<span
>class="nt"></span><span</span> <span class="na">class=</span><span
>class="s">"p"</span><span class="nt">></span>)<span
>class="nt"></span></span> <span class="nt"><span</span> <span
>class="na">class=</span><span class="s">"n"</span><span
>class="nt">></span>ss<span class="nt"></span></span> <span
>class="nt"><span</span> <span class="na">class=</span><span
>class="s">"p"</span><span class="nt">></span>;<span
>class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span
class="s">"n"</span><span class="nt">></span>rv<span
class="nt"></span></span>
+</pre></div>
-<span class="k">end</span>
-<span class="n">let</span> <span class="n">doserver</span> <span
class="p">()</span> <span class="p">=</span>
- <span class="n">let</span> <span class="n">h</span> <span class="p">=</span>
<span class="n">new</span> <span class="n">calc_handler</span> <span
class="n">in</span>
- <span class="n">let</span> <span class="n">proc</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">Calculator</span><span class="p">.</span><span
class="n">processor</span> <span class="n">h</span> <span class="n">in</span>
- <span class="n">let</span> <span class="n">port</span> <span
class="p">=</span> 9090 <span class="n">in</span>
- <span class="n">let</span> <span class="n">pf</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">TBinaryProtocol</span><span class="p">.</span><span
class="n">factory</span> <span class="n">in</span>
- <span class="n">let</span> <span class="n">server</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">TThreadedServer</span><span class="p">.</span><span class="n">t</span>
+<p><span class="n">method</span> <span class="n">zip</span> <span
class="o">=</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"zip()</span><span
class="se">\n</span><span class="s">"</span><span class="p">;</span> <span
class="n">flush</span> <span class="n">stdout</span></p>
+<p><span class="n">method</span> <span class="n">getStruct</span> <span
class="n">logid</span> <span class="o">=</span>
+ <span class="n">Printf</span><span class="p">.</span><span
class="n">printf</span> <span class="s">"getStruct(%ld)</span><span
class="se">\n</span><span class="s">"</span> <span class="p">(</span><span
class="n">sod</span> <span class="n">logid</span><span class="p">)</span> <span
class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span>
<span class="p">;</span>
+ <span class="n">Hashtbl</span><span class="p">.</span><span
class="n">find</span> <span class="n">log</span> <span class="p">(</span><span
class="n">sod</span> <span class="n">logid</span><span class="p">)</span></p>
+<p><span class="n">end</span></p>
+<p><span class="n">let</span> <span class="n">doserver</span> <span
class="p">()</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">h</span> <span class="o">=</span>
<span class="k">new</span> <span class="n">calc_handler</span> <span
class="n">in</span>
+ <span class="n">let</span> <span class="n">proc</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">Calculator</span><span class="p">.</span><span
class="n">processor</span> <span class="n">h</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">port</span> <span
class="o">=</span> <span class="mi">9090</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">pf</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">TBinaryProtocol</span><span class="p">.</span><span
class="n">factory</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">server</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">TThreadedServer</span><span class="p">.</span><span class="n">t</span>
<span class="n">proc</span>
- <span class="p">(</span><span class="n">new</span> <span
class="n">TServerSocket</span><span class="p">.</span><span class="n">t</span>
<span class="n">port</span><span class="p">)</span>
- <span class="p">(</span><span class="n">new</span> <span
class="n">Transport</span><span class="p">.</span><span
class="n">factory</span><span class="p">)</span>
+ <span class="p">(</span><span class="k">new</span> <span
class="n">TServerSocket</span><span class="p">.</span><span class="n">t</span>
<span class="n">port</span><span class="p">)</span>
+ <span class="p">(</span><span class="k">new</span> <span
class="n">Transport</span><span class="p">.</span><span
class="n">factory</span><span class="p">)</span>
<span class="n">pf</span>
<span class="n">pf</span>
<span class="n">in</span>
- <span class="n">server</span>#<span class="n">serve</span>
-<span class="p">;;</span>
-
-<span class="n">doserver</span><span class="p">();;</span>
-</pre></div>
-
-
+ <span class="n">server</span><span class="err">#</span><span
class="n">serve</span>
+<span class="p">;;</span></p>
+<p><span class="n">doserver</span><span class="p">();;</span>
+</pre></div></p>
<h2 id="additional-information">Additional Information</h2>
</div>