Multiton: Difference between revisions
Content added Content deleted
(julia example) |
|||
Line 71: | Line 71: | ||
Multiton is Multiton{Float64}(1.0) |
Multiton is Multiton{Float64}(1.0) |
||
ERROR: LoadError: Cannot find a Multiton in registry with instance reference number 5 |
ERROR: LoadError: Cannot find a Multiton in registry with instance reference number 5 |
||
</pre> |
|||
=={{header|Phix}}== |
|||
{{libheader|Phix/Class}} |
|||
No attempt is made for thread safety, since multiple threads accessing these would need |
|||
their own locking anyway, not that it is difficult to invoke enter_cs() and leave_cs().<br> |
|||
I thought about adding a get_multiton() function to avoid calling new() all the time, but it would (probably/almost certainly) just invoke new() itself anyway.<br> |
|||
Put this in a separate file, to keep allowed and instances private. Classes are not [yet] supported under pwa/p2js. |
|||
<!--<lang Phix>(notonline)--> |
|||
<span style="color: #008080;">without</span> <span style="color: #008080;">javascript_semantics</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">allowed</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"zero"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"one"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"two"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #000000;">instances</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">,</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">,</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">}</span> |
|||
<span style="color: #008080;">public</span> <span style="color: #008080;">class</span> <span style="color: #000000;">Multiton</span> |
|||
<span style="color: #008080;">public</span> <span style="color: #004080;">string</span> <span style="color: #000000;">id</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">Multiton</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">id</span><span style="color: #0000FF;">,</span><span style="color: #000000;">allowed</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"not allowed"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">instances</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">NULL</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #7060A8;">this</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">&</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"_%d"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">999</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #000000;">instances</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">this</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">instances</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">class</span> |
|||
<span style="color: #000000;">Multiton</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"zero"</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000000;">b</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"one"</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"two"</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"zero"</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000080;font-style:italic;">-- e = new(), -- crashes |
|||
-- f = new({"three"}) -- crashes</span> |
|||
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"one"</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000000;">f</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"two"</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">a</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">b</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">c</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">d</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">e</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">f</span><span style="color: #0000FF;">.</span><span style="color: #000000;">id</span> |
|||
<!--</lang>--> |
|||
{{out}} |
|||
<pre> |
|||
"zero_651" |
|||
"one_111" |
|||
"two_544" |
|||
"zero_651" |
|||
"one_111" |
|||
"two_544" |
|||
</pre> |
</pre> |
||