Browse Source

rebuilt edoc info using edown

Ulf Wiger 14 years ago
parent
commit
fcdd5ac166
17 changed files with 1022 additions and 848 deletions
  1. 0 446
      doc/gproc.html
  2. 614 0
      doc/gproc.md
  3. 0 43
      doc/gproc_app.html
  4. 44 0
      doc/gproc_app.md
  5. 0 178
      doc/gproc_dist.html
  6. 225 0
      doc/gproc_dist.md
  7. 0 36
      doc/gproc_init.html
  8. 35 0
      doc/gproc_init.md
  9. 0 23
      doc/gproc_lib.html
  10. 16 0
      doc/gproc_lib.md
  11. 0 37
      doc/gproc_sup.html
  12. 37 0
      doc/gproc_sup.md
  13. 0 17
      doc/index.html
  14. 51 0
      doc/index.md
  15. 0 17
      doc/modules-frame.html
  16. 0 40
      doc/overview-summary.html
  17. 0 11
      doc/packages-frame.html

+ 0 - 446
doc/gproc.html

@@ -1,446 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>Module gproc</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<hr>
-
-<h1>Module gproc</h1>
-<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>Extended process registry.
-
-<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</p>
-<p><b>Authors:</b> Ulf Wiger (<a href="mailto:ulf.wiger@erlang-consulting.com"><tt>ulf.wiger@erlang-consulting.com</tt></a>).</p>
-
-<h2><a name="description">Description</a></h2>Extended process registry
-  <p>This module implements an extended process registry</p>
-  <p>For a detailed description, see
-  <a href="erlang07-wiger.pdf">erlang07-wiger.pdf</a>.</p>
- 
-<h2><a name="types">Data Types</a></h2>
-
-<h3 class="typedecl"><a name="type-context">context()</a></h3>
-<p><tt>context() = {<a href="#type-scope">scope()</a>, <a href="#type-type">type()</a>} | <a href="#type-type">type()</a></tt></p>
-<p>Local scope is the default</p>
-
-<h3 class="typedecl"><a name="type-headpat">headpat()</a></h3>
-<p><tt>headpat() = {<a href="#type-keypat">keypat()</a>, <a href="#type-pidpat">pidpat()</a>, ValPat}</tt></p>
-
-
-<h3 class="typedecl"><a name="type-key">key()</a></h3>
-<p><tt>key() = {<a href="#type-type">type()</a>, <a href="#type-scope">scope()</a>, any()}</tt></p>
-
-
-<h3 class="typedecl"><a name="type-keypat">keypat()</a></h3>
-<p><tt>keypat() = {<a href="#type-sel_type">sel_type()</a> | <a href="#type-sel_var">sel_var()</a>, l | g | <a href="#type-sel_var">sel_var()</a>, any()}</tt></p>
-
-
-<h3 class="typedecl"><a name="type-pidpat">pidpat()</a></h3>
-<p><tt>pidpat() = pid() | <a href="#type-sel_var">sel_var()</a></tt></p>
-<p>sel_var() = DollarVar | '_'.</p>
-
-<h3 class="typedecl"><a name="type-scope">scope()</a></h3>
-<p><tt>scope() = l | g</tt></p>
-<p>l = local registration; g = global registration</p>
-
-<h3 class="typedecl"><a name="type-sel_pattern">sel_pattern()</a></h3>
-<p><tt>sel_pattern() = [{<a href="#type-headpat">headpat()</a>, Guards, Prod}]</tt></p>
-
-
-<h3 class="typedecl"><a name="type-sel_type">sel_type()</a></h3>
-<p><tt>sel_type() = n | p | c | a | names | props | counters | aggr_counters</tt></p>
-
-
-<h3 class="typedecl"><a name="type-type">type()</a></h3>
-<p><tt>type() = n | p | c | a</tt></p>
-<p>n = name; p = property; c = counter;
-                                 a = aggregate_counter</p>
-
-<h2><a name="index">Function Index</a></h2>
-<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#add_global_aggr_counter-1">add_global_aggr_counter/1</a></td><td>Registers a global (unique) aggregated counter.</td></tr>
-<tr><td valign="top"><a href="#add_global_counter-2">add_global_counter/2</a></td><td>Registers a global (non-unique) counter.</td></tr>
-<tr><td valign="top"><a href="#add_global_name-1">add_global_name/1</a></td><td>Registers a global (unique) name.</td></tr>
-<tr><td valign="top"><a href="#add_global_property-2">add_global_property/2</a></td><td>Registers a global (non-unique) property.</td></tr>
-<tr><td valign="top"><a href="#add_local_aggr_counter-1">add_local_aggr_counter/1</a></td><td>Registers a local (unique) aggregated counter.</td></tr>
-<tr><td valign="top"><a href="#add_local_counter-2">add_local_counter/2</a></td><td>Registers a local (non-unique) counter.</td></tr>
-<tr><td valign="top"><a href="#add_local_name-1">add_local_name/1</a></td><td>Registers a local (unique) name.</td></tr>
-<tr><td valign="top"><a href="#add_local_property-2">add_local_property/2</a></td><td>Registers a local (non-unique) property.</td></tr>
-<tr><td valign="top"><a href="#audit_process-1">audit_process/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#await-1">await/1</a></td><td>Equivalent to <a href="#await-2"><tt>await(Key, infinity)</tt></a>.
-</td></tr>
-<tr><td valign="top"><a href="#await-2">await/2</a></td><td>Wait for a local name to be registered.</td></tr>
-<tr><td valign="top"><a href="#cancel_wait-2">cancel_wait/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#default-1">default/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#first-1">first/1</a></td><td>Behaves as ets:first(Tab) for a given type of registration object.</td></tr>
-<tr><td valign="top"><a href="#get_value-1">get_value/1</a></td><td>Read the value stored with a key registered to the current process.</td></tr>
-<tr><td valign="top"><a href="#info-1">info/1</a></td><td>Similar to <code>process_info(Pid)</code> but with additional gproc info.</td></tr>
-<tr><td valign="top"><a href="#info-2">info/2</a></td><td>Similar to process_info(Pid, Item), but with additional gproc info.</td></tr>
-<tr><td valign="top"><a href="#last-1">last/1</a></td><td>Behaves as ets:last(Tab) for a given type of registration object.</td></tr>
-<tr><td valign="top"><a href="#lookup_global_aggr_counter-1">lookup_global_aggr_counter/1</a></td><td>Lookup a global (unique) aggregated counter and returns its value.</td></tr>
-<tr><td valign="top"><a href="#lookup_global_counters-1">lookup_global_counters/1</a></td><td>Look up all global (non-unique) instances of a given Counter.</td></tr>
-<tr><td valign="top"><a href="#lookup_global_name-1">lookup_global_name/1</a></td><td>Lookup a global unique name.</td></tr>
-<tr><td valign="top"><a href="#lookup_global_properties-1">lookup_global_properties/1</a></td><td>Look up all global (non-unique) instances of a given Property.</td></tr>
-<tr><td valign="top"><a href="#lookup_local_aggr_counter-1">lookup_local_aggr_counter/1</a></td><td>Lookup a local (unique) aggregated counter and returns its value.</td></tr>
-<tr><td valign="top"><a href="#lookup_local_counters-1">lookup_local_counters/1</a></td><td>Look up all local (non-unique) instances of a given Counter.</td></tr>
-<tr><td valign="top"><a href="#lookup_local_name-1">lookup_local_name/1</a></td><td>Lookup a local unique name.</td></tr>
-<tr><td valign="top"><a href="#lookup_local_properties-1">lookup_local_properties/1</a></td><td>Look up all local (non-unique) instances of a given Property.</td></tr>
-<tr><td valign="top"><a href="#lookup_pid-1">lookup_pid/1</a></td><td>Lookup the Pid stored with a key.</td></tr>
-<tr><td valign="top"><a href="#lookup_pids-1">lookup_pids/1</a></td><td>Returns a list of pids with the published key Key.</td></tr>
-<tr><td valign="top"><a href="#lookup_values-1">lookup_values/1</a></td><td>Retrieve the <code>{Pid,Value}</code> pairs corresponding to Key.</td></tr>
-<tr><td valign="top"><a href="#mreg-3">mreg/3</a></td><td>Register multiple {Key,Value} pairs of a given type and scope.</td></tr>
-<tr><td valign="top"><a href="#nb_wait-1">nb_wait/1</a></td><td>Wait for a local name to be registered.</td></tr>
-<tr><td valign="top"><a href="#next-2">next/2</a></td><td>Behaves as ets:next(Tab,Key) for a given type of registration object.</td></tr>
-<tr><td valign="top"><a href="#prev-2">prev/2</a></td><td>Behaves as ets:prev(Tab,Key) for a given type of registration object.</td></tr>
-<tr><td valign="top"><a href="#reg-1">reg/1</a></td><td>Equivalent to <a href="#reg-2"><tt>reg(Key, default(Key))</tt></a>.
-</td></tr>
-<tr><td valign="top"><a href="#reg-2">reg/2</a></td><td>Register a name or property for the current process.</td></tr>
-<tr><td valign="top"><a href="#select-1">select/1</a></td><td>Equivalent to <a href="#select-2"><tt>select(all, Pat)</tt></a>.
-</td></tr>
-<tr><td valign="top"><a href="#select-2">select/2</a></td><td>Perform a select operation on the process registry.</td></tr>
-<tr><td valign="top"><a href="#select-3">select/3</a></td><td>Like <a href="#select-2"><code>select/2</code></a> but returns Limit objects at a time.</td></tr>
-<tr><td valign="top"><a href="#send-2">send/2</a></td><td>Sends a message to the process, or processes, corresponding to Key.</td></tr>
-<tr><td valign="top"><a href="#set_value-2">set_value/2</a></td><td>Sets the value of the registeration entry given by Key.</td></tr>
-<tr><td valign="top"><a href="#start_link-0">start_link/0</a></td><td>Starts the gproc server.</td></tr>
-<tr><td valign="top"><a href="#table-1">table/1</a></td><td>Equivalent to <a href="#table-2"><tt>table(Context, [])</tt></a>.
-</td></tr>
-<tr><td valign="top"><a href="#table-2">table/2</a></td><td>QLC table generator for the gproc registry.</td></tr>
-<tr><td valign="top"><a href="#unreg-1">unreg/1</a></td><td>Unregister a name or property.</td></tr>
-<tr><td valign="top"><a href="#update_counter-2">update_counter/2</a></td><td>Updates the counter registered as Key for the current process.</td></tr>
-<tr><td valign="top"><a href="#where-1">where/1</a></td><td>Returns the pid registered as Key.</td></tr>
-</table>
-
-<h2><a name="functions">Function Details</a></h2>
-
-<h3 class="function"><a name="add_global_aggr_counter-1">add_global_aggr_counter/1</a></h3>
-<div class="spec">
-<p><tt>add_global_aggr_counter(Name) -&gt; any()</tt></p>
-</div><p>Equivalent to <a href="#reg-1"><tt>reg({a, g, Name})</tt></a>.</p>
-<p>Registers a global (unique) aggregated counter.</p>
-
-<h3 class="function"><a name="add_global_counter-2">add_global_counter/2</a></h3>
-<div class="spec">
-<p><tt>add_global_counter(Name, Initial) -&gt; any()</tt></p>
-</div><p>Registers a global (non-unique) counter. @equiv reg({c,g,Name},Value)</p>
-
-<h3 class="function"><a name="add_global_name-1">add_global_name/1</a></h3>
-<div class="spec">
-<p><tt>add_global_name(Name) -&gt; any()</tt></p>
-</div><p>Registers a global (unique) name. @equiv reg({n,g,Name})</p>
-
-<h3 class="function"><a name="add_global_property-2">add_global_property/2</a></h3>
-<div class="spec">
-<p><tt>add_global_property(Name, Value) -&gt; any()</tt></p>
-</div><p>Registers a global (non-unique) property. @equiv reg({p,g,Name},Value)</p>
-
-<h3 class="function"><a name="add_local_aggr_counter-1">add_local_aggr_counter/1</a></h3>
-<div class="spec">
-<p><tt>add_local_aggr_counter(Name) -&gt; any()</tt></p>
-</div><p>Equivalent to <a href="#reg-1"><tt>reg({a, l, Name})</tt></a>.</p>
-<p>Registers a local (unique) aggregated counter.</p>
-
-<h3 class="function"><a name="add_local_counter-2">add_local_counter/2</a></h3>
-<div class="spec">
-<p><tt>add_local_counter(Name, Initial) -&gt; any()</tt></p>
-</div><p>Registers a local (non-unique) counter. @equiv reg({c,l,Name},Value)</p>
-
-<h3 class="function"><a name="add_local_name-1">add_local_name/1</a></h3>
-<div class="spec">
-<p><tt>add_local_name(Name) -&gt; any()</tt></p>
-</div><p>Registers a local (unique) name. @equiv reg({n,l,Name})</p>
-
-<h3 class="function"><a name="add_local_property-2">add_local_property/2</a></h3>
-<div class="spec">
-<p><tt>add_local_property(Name, Value) -&gt; any()</tt></p>
-</div><p>Registers a local (non-unique) property. @equiv reg({p,l,Name},Value)</p>
-
-<h3 class="function"><a name="audit_process-1">audit_process/1</a></h3>
-<div class="spec">
-<p><tt>audit_process(Pid) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="await-1">await/1</a></h3>
-<div class="spec">
-<p><tt>await(Key::<a href="#type-key">key()</a>) -&gt; {pid(), Value}</tt></p>
-</div><p>Equivalent to <a href="#await-2"><tt>await(Key, infinity)</tt></a>.</p>
-
-
-<h3 class="function"><a name="await-2">await/2</a></h3>
-<div class="spec">
-<p><tt>await(Key::<a href="#type-key">key()</a>, Timeout) -&gt; {pid(), Value}</tt>
-<ul class="definitions"><li><tt>Timeout = integer() | infinity</tt></li>
-</ul></p>
-</div><p>Wait for a local name to be registered.
-  The function raises an exception if the timeout expires. Timeout must be
-  either an interger &gt; 0 or 'infinity'.
-  A small optimization: we first perform a lookup, to see if the name
-  is already registered. This way, the cost of the operation will be
-  roughly the same as of where/1 in the case where the name is already
-  registered (the difference: await/2 also returns the value).</p>
-
-<h3 class="function"><a name="cancel_wait-2">cancel_wait/2</a></h3>
-<div class="spec">
-<p><tt>cancel_wait(Key, Ref) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="default-1">default/1</a></h3>
-<div class="spec">
-<p><tt>default(X1) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="first-1">first/1</a></h3>
-<div class="spec">
-<p><tt>first(Type::<a href="#type-type">type()</a>) -&gt; <a href="#type-key">key()</a> | '$end_of_table'</tt></p>
-</div><p><p>Behaves as ets:first(Tab) for a given type of registration object.</p>
- 
-  See <a href="http://www.erlang.org/doc/man/ets.html#first-1" target="_top"><tt>http://www.erlang.org/doc/man/ets.html#first-1</tt></a>.
-   The registry behaves as an ordered_set table.</p>
-
-<h3 class="function"><a name="get_value-1">get_value/1</a></h3>
-<div class="spec">
-<p><tt>get_value(Key) -&gt; Value</tt></p>
-</div><p><p>Read the value stored with a key registered to the current process.</p>
- 
-  If no such key is registered to the current process, this function exits.</p>
-
-<h3 class="function"><a name="info-1">info/1</a></h3>
-<div class="spec">
-<p><tt>info(Pid::pid()) -&gt; ProcessInfo</tt>
-<ul class="definitions"><li><tt>ProcessInfo = [{gproc, [{Key, Value}]} | ProcessInfo]</tt></li>
-</ul></p>
-</div><p><p>Similar to <code>process_info(Pid)</code> but with additional gproc info.</p>
- 
-  Returns the same information as process_info(Pid), but with the
-  addition of a <code>gproc</code> information item, containing the <code>{Key,Value}</code>
-  pairs registered to the process.</p>
-
-<h3 class="function"><a name="info-2">info/2</a></h3>
-<div class="spec">
-<p><tt>info(Pid::pid(), Item::atom()) -&gt; {Item, Info}</tt></p>
-</div><p><p>Similar to process_info(Pid, Item), but with additional gproc info.</p>
- 
-  For <code>Item = gproc</code>, this function returns a list of <code>{Key, Value}</code> pairs
-  registered to the process Pid. For other values of Item, it returns the
-  same as <a href="http://www.erlang.org/doc/man/erlang.html#process_info-2" target="_top"><tt>http://www.erlang.org/doc/man/erlang.html#process_info-2</tt></a>.</p>
-
-<h3 class="function"><a name="last-1">last/1</a></h3>
-<div class="spec">
-<p><tt>last(Context::<a href="#type-context">context()</a>) -&gt; <a href="#type-key">key()</a> | '$end_of_table'</tt></p>
-</div><p><p>Behaves as ets:last(Tab) for a given type of registration object.</p>
- 
-  See <a href="http://www.erlang.org/doc/man/ets.html#last-1" target="_top"><tt>http://www.erlang.org/doc/man/ets.html#last-1</tt></a>.
-  The registry behaves as an ordered_set table.</p>
-
-<h3 class="function"><a name="lookup_global_aggr_counter-1">lookup_global_aggr_counter/1</a></h3>
-<div class="spec">
-<p><tt>lookup_global_aggr_counter(Name::any()) -&gt; integer()</tt></p>
-</div><p>Equivalent to <a href="#where-1"><tt>where({a, g, Name})</tt></a>.</p>
-<p>Lookup a global (unique) aggregated counter and returns its value.
-  Fails if there is no such object.</p>
-
-<h3 class="function"><a name="lookup_global_counters-1">lookup_global_counters/1</a></h3>
-<div class="spec">
-<p><tt>lookup_global_counters(Counter::any()) -&gt; [{pid(), Value::integer()}]</tt></p>
-</div><p>Equivalent to <a href="#lookup_values-1"><tt>lookup_values({c, g, Counter})</tt></a>.</p>
-<p>Look up all global (non-unique) instances of a given Counter.
-  Returns a list of {Pid, Value} tuples for all matching objects.</p>
-
-<h3 class="function"><a name="lookup_global_name-1">lookup_global_name/1</a></h3>
-<div class="spec">
-<p><tt>lookup_global_name(Name::any()) -&gt; pid()</tt></p>
-</div><p>Equivalent to <a href="#where-1"><tt>where({n, g, Name})</tt></a>.</p>
-<p>Lookup a global unique name. Fails if there is no such name.</p>
-
-<h3 class="function"><a name="lookup_global_properties-1">lookup_global_properties/1</a></h3>
-<div class="spec">
-<p><tt>lookup_global_properties(Property::any()) -&gt; [{pid(), Value}]</tt></p>
-</div><p>Equivalent to <a href="#lookup_values-1"><tt>lookup_values({p, g, Property})</tt></a>.</p>
-<p>Look up all global (non-unique) instances of a given Property.
-  Returns a list of {Pid, Value} tuples for all matching objects.</p>
-
-<h3 class="function"><a name="lookup_local_aggr_counter-1">lookup_local_aggr_counter/1</a></h3>
-<div class="spec">
-<p><tt>lookup_local_aggr_counter(Name::any()) -&gt; integer()</tt></p>
-</div><p>Equivalent to <a href="#where-1"><tt>where({a, l, Name})</tt></a>.</p>
-<p>Lookup a local (unique) aggregated counter and returns its value.
-  Fails if there is no such object.</p>
-
-<h3 class="function"><a name="lookup_local_counters-1">lookup_local_counters/1</a></h3>
-<div class="spec">
-<p><tt>lookup_local_counters(Counter::any()) -&gt; [{pid(), Value::integer()}]</tt></p>
-</div><p>Equivalent to <a href="#lookup_values-1"><tt>lookup_values({c, l, Counter})</tt></a>.</p>
-<p>Look up all local (non-unique) instances of a given Counter.
-  Returns a list of {Pid, Value} tuples for all matching objects.</p>
-
-<h3 class="function"><a name="lookup_local_name-1">lookup_local_name/1</a></h3>
-<div class="spec">
-<p><tt>lookup_local_name(Name::any()) -&gt; pid()</tt></p>
-</div><p>Equivalent to <a href="#where-1"><tt>where({n, l, Name})</tt></a>.</p>
-<p>Lookup a local unique name. Fails if there is no such name.</p>
-
-<h3 class="function"><a name="lookup_local_properties-1">lookup_local_properties/1</a></h3>
-<div class="spec">
-<p><tt>lookup_local_properties(Property::any()) -&gt; [{pid(), Value}]</tt></p>
-</div><p>Equivalent to <a href="#lookup_values-1"><tt>lookup_values({p, l, Property})</tt></a>.</p>
-<p>Look up all local (non-unique) instances of a given Property.
-  Returns a list of {Pid, Value} tuples for all matching objects.</p>
-
-<h3 class="function"><a name="lookup_pid-1">lookup_pid/1</a></h3>
-<div class="spec">
-<p><tt>lookup_pid(Key) -&gt; Pid</tt></p>
-</div><p>Lookup the Pid stored with a key.
- </p>
-
-<h3 class="function"><a name="lookup_pids-1">lookup_pids/1</a></h3>
-<div class="spec">
-<p><tt>lookup_pids(Key::<a href="#type-key">key()</a>) -&gt; [pid()]</tt></p>
-</div><p><p>Returns a list of pids with the published key Key</p>
- 
-  If the type of registration entry is either name or aggregated counter,
-  this function will return either an empty list, or a list of one pid.
-  For non-unique types, the return value can be a list of any length.</p>
-
-<h3 class="function"><a name="lookup_values-1">lookup_values/1</a></h3>
-<div class="spec">
-<p><tt>lookup_values(Key::<a href="#type-key">key()</a>) -&gt; [{pid(), Value}]</tt></p>
-</div><p><p>Retrieve the <code>{Pid,Value}</code> pairs corresponding to Key.</p>
- 
-  Key refer to any type of registry object. If it refers to a unique
-  object, the list will be of length 0 or 1. If it refers to a non-unique
-  object, the return value can be a list of any length.</p>
-
-<h3 class="function"><a name="mreg-3">mreg/3</a></h3>
-<div class="spec">
-<p><tt>mreg(T::<a href="#type-type">type()</a>, X2::<a href="#type-scope">scope()</a>, KVL::[{Key::any(), Value::any()}]) -&gt; true</tt></p>
-</div><p><p>Register multiple {Key,Value} pairs of a given type and scope.</p>
- 
-  This function is more efficient than calling <a href="#reg-2"><code>reg/2</code></a> repeatedly.</p>
-
-<h3 class="function"><a name="nb_wait-1">nb_wait/1</a></h3>
-<div class="spec">
-<p><tt>nb_wait(Key::<a href="#type-key">key()</a>) -&gt; Ref</tt></p>
-</div><p>Wait for a local name to be registered.
-  The caller can expect to receive a message,
-  {gproc, Ref, registered, {Key, Pid, Value}}, once the name is registered.</p>
-
-<h3 class="function"><a name="next-2">next/2</a></h3>
-<div class="spec">
-<p><tt>next(Context::<a href="#type-context">context()</a>, Key::<a href="#type-key">key()</a>) -&gt; <a href="#type-key">key()</a> | '$end_of_table'</tt></p>
-</div><p><p>Behaves as ets:next(Tab,Key) for a given type of registration object.</p>
- 
-  See <a href="http://www.erlang.org/doc/man/ets.html#next-2" target="_top"><tt>http://www.erlang.org/doc/man/ets.html#next-2</tt></a>.
-  The registry behaves as an ordered_set table.</p>
-
-<h3 class="function"><a name="prev-2">prev/2</a></h3>
-<div class="spec">
-<p><tt>prev(Context::<a href="#type-context">context()</a>, Key::<a href="#type-key">key()</a>) -&gt; <a href="#type-key">key()</a> | '$end_of_table'</tt></p>
-</div><p><p>Behaves as ets:prev(Tab,Key) for a given type of registration object.</p>
- 
-  See <a href="http://www.erlang.org/doc/man/ets.html#prev-2" target="_top"><tt>http://www.erlang.org/doc/man/ets.html#prev-2</tt></a>.
-  The registry behaves as an ordered_set table.</p>
-
-<h3 class="function"><a name="reg-1">reg/1</a></h3>
-<div class="spec">
-<p><tt>reg(Key::<a href="#type-key">key()</a>) -&gt; true</tt></p>
-</div><p>Equivalent to <a href="#reg-2"><tt>reg(Key, default(Key))</tt></a>.</p>
-
-
-<h3 class="function"><a name="reg-2">reg/2</a></h3>
-<div class="spec">
-<p><tt>reg(Key::<a href="#type-key">key()</a>, Value) -&gt; true</tt></p>
-</div><p><p>Register a name or property for the current process</p>
- 
- </p>
-
-<h3 class="function"><a name="select-1">select/1</a></h3>
-<div class="spec">
-<p><tt>select(Pat::<a href="#type-select_pattern">select_pattern()</a>) -&gt; list(<a href="#type-sel_object">sel_object()</a>)</tt></p>
-</div><p>Equivalent to <a href="#select-2"><tt>select(all, Pat)</tt></a>.</p>
-
-
-<h3 class="function"><a name="select-2">select/2</a></h3>
-<div class="spec">
-<p><tt>select(Type::<a href="#type-sel_type">sel_type()</a>, Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -&gt; [{Key, Pid, Value}]</tt></p>
-</div><p><p>Perform a select operation on the process registry.</p>
- 
-  The physical representation in the registry may differ from the above,
-  but the select patterns are transformed appropriately.</p>
-
-<h3 class="function"><a name="select-3">select/3</a></h3>
-<div class="spec">
-<p><tt>select(Type::<a href="#type-sel_type">sel_type()</a>, Pat::<a href="#type-sel_patten">sel_patten()</a>, Limit::integer()) -&gt; [{Key, Pid, Value}]</tt></p>
-</div><p><p>Like <a href="#select-2"><code>select/2</code></a> but returns Limit objects at a time.</p>
- 
-  See <a href="http://www.erlang.org/doc/man/ets.html#select-3" target="_top"><tt>http://www.erlang.org/doc/man/ets.html#select-3</tt></a>.</p>
-
-<h3 class="function"><a name="send-2">send/2</a></h3>
-<div class="spec">
-<p><tt>send(Key::<a href="#type-key">key()</a>, Msg::any()) -&gt; Msg</tt></p>
-</div><p><p>Sends a message to the process, or processes, corresponding to Key.</p>
- 
-  If Key belongs to a unique object (name or aggregated counter), this
-  function will send a message to the corresponding process, or fail if there
-  is no such process. If Key is for a non-unique object type (counter or
-  property), Msg will be send to all processes that have such an object.</p>
-
-<h3 class="function"><a name="set_value-2">set_value/2</a></h3>
-<div class="spec">
-<p><tt>set_value(Key::<a href="#type-key">key()</a>, Value) -&gt; true</tt></p>
-</div><p><p>Sets the value of the registeration entry given by Key</p>
- 
-  <p>Key is assumed to exist and belong to the calling process.  
-If it doesn't, this function will exit.</p>
- 
-  Value can be any term, unless the object is a counter, in which case
-  it must be an integer.</p>
-
-<h3 class="function"><a name="start_link-0">start_link/0</a></h3>
-<div class="spec">
-<p><tt>start_link() -&gt; {ok, pid()}</tt></p>
-</div><p><p>Starts the gproc server.</p>
- 
-  This function is intended to be called from gproc_sup, as part of
-  starting the gproc application.</p>
-
-<h3 class="function"><a name="table-1">table/1</a></h3>
-<div class="spec">
-<p><tt>table(Context::<a href="#type-context">context()</a>) -&gt; any()</tt></p>
-</div><p>Equivalent to <a href="#table-2"><tt>table(Context, [])</tt></a>.</p>
-
-
-<h3 class="function"><a name="table-2">table/2</a></h3>
-<div class="spec">
-<p><tt>table(Context::<a href="#type-context">context()</a>, Opts) -&gt; any()</tt></p>
-</div><p>QLC table generator for the gproc registry.
-  Context specifies which subset of the registry should be queried.
-  See <a href="http://www.erlang.org/doc/man/qlc.html" target="_top"><tt>http://www.erlang.org/doc/man/qlc.html</tt></a>.</p>
-
-<h3 class="function"><a name="unreg-1">unreg/1</a></h3>
-<div class="spec">
-<p><tt>unreg(Key::<a href="#type-key">key()</a>) -&gt; true</tt></p>
-</div><p>Unregister a name or property.</p>
-
-<h3 class="function"><a name="update_counter-2">update_counter/2</a></h3>
-<div class="spec">
-<p><tt>update_counter(Key::<a href="#type-key">key()</a>, Incr::integer()) -&gt; integer()</tt></p>
-</div><p><p>Updates the counter registered as Key for the current process.</p>
- 
-  This function works like ets:update_counter/3
-  (see <a href="http://www.erlang.org/doc/man/ets.html#update_counter-3" target="_top"><tt>http://www.erlang.org/doc/man/ets.html#update_counter-3</tt></a>), but
-  will fail if the type of object referred to by Key is not a counter.</p>
-
-<h3 class="function"><a name="where-1">where/1</a></h3>
-<div class="spec">
-<p><tt>where(Key::<a href="#type-key">key()</a>) -&gt; pid()</tt></p>
-</div><p><p>Returns the pid registered as Key</p>
- 
-  The type of registration entry must be either name or aggregated counter.
-  Otherwise this function will exit. Use <a href="#lookup_pids-1"><code>lookup_pids/1</code></a> in these
-  cases.</p>
-<hr>
-
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 614 - 0
doc/gproc.md

@@ -0,0 +1,614 @@
+Module gproc
+============
+
+
+#Module gproc#
+* [Description](#description)
+* [Data Types](#types)
+* [Function Index](#index)
+* [Function Details](#functions)
+Extended process registry.
+__Behaviours:__ [`gen_server`](gen_server.html).
+__Authors:__ Ulf Wiger ([`ulf.wiger@erlang-consulting.com`](mailto:ulf.wiger@erlang-consulting.com)).
+
+##<a name="description">Description</a>##
+Extended process registry
+  
+This module implements an extended process registry
+  
+For a detailed description, see
+  [erlang07-wiger.pdf](erlang07-wiger.pdf).
+ 
+
+##<a name="types">Data Types</a>##
+
+<a name="type-context"></a>
+
+
+###context()##
+
+`context() = {[scope()](#type-scope), [type()](#type-type)} | [type()](#type-type)`
+Local scope is the default
+<a name="type-headpat"></a>
+
+
+###headpat()##
+
+`headpat() = {[keypat()](#type-keypat), [pidpat()](#type-pidpat), ValPat}`
+<a name="type-key"></a>
+
+
+###key()##
+
+`key() = {[type()](#type-type), [scope()](#type-scope), any()}`
+<a name="type-keypat"></a>
+
+
+###keypat()##
+
+`keypat() = {[sel_type()](#type-sel_type) | [sel_var()](#type-sel_var), l | g | [sel_var()](#type-sel_var), any()}`
+<a name="type-pidpat"></a>
+
+
+###pidpat()##
+
+`pidpat() = pid() | [sel_var()](#type-sel_var)`
+sel_var() = DollarVar | '_'.
+<a name="type-scope"></a>
+
+
+###scope()##
+
+`scope() = l | g`
+l = local registration; g = global registration
+<a name="type-sel_pattern"></a>
+
+
+###sel_pattern()##
+
+`sel_pattern() = [{[headpat()](#type-headpat), Guards, Prod}]`
+<a name="type-sel_type"></a>
+
+
+###sel_type()##
+
+`sel_type() = n | p | c | a | names | props | counters | aggr_counters`
+<a name="type-type"></a>
+
+
+###type()##
+
+`type() = n | p | c | a`
+n = name; p = property; c = counter;
+                                 a = aggregate_counter
+
+##<a name="index">Function Index</a>##
+
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#add_global_aggr_counter-1">add_global_aggr_counter/1</a></td><td>Registers a global (unique) aggregated counter.</td></tr><tr><td valign="top"><a href="#add_global_counter-2">add_global_counter/2</a></td><td>Registers a global (non-unique) counter.</td></tr><tr><td valign="top"><a href="#add_global_name-1">add_global_name/1</a></td><td>Registers a global (unique) name.</td></tr><tr><td valign="top"><a href="#add_global_property-2">add_global_property/2</a></td><td>Registers a global (non-unique) property.</td></tr><tr><td valign="top"><a href="#add_local_aggr_counter-1">add_local_aggr_counter/1</a></td><td>Registers a local (unique) aggregated counter.</td></tr><tr><td valign="top"><a href="#add_local_counter-2">add_local_counter/2</a></td><td>Registers a local (non-unique) counter.</td></tr><tr><td valign="top"><a href="#add_local_name-1">add_local_name/1</a></td><td>Registers a local (unique) name.</td></tr><tr><td valign="top"><a href="#add_local_property-2">add_local_property/2</a></td><td>Registers a local (non-unique) property.</td></tr><tr><td valign="top"><a href="#audit_process-1">audit_process/1</a></td><td></td></tr><tr><td valign="top"><a href="#await-1">await/1</a></td><td>Equivalent to <a href="#await-2"><tt>await(Key, infinity)</tt></a>.</td></tr><tr><td valign="top"><a href="#await-2">await/2</a></td><td>Wait for a local name to be registered.</td></tr><tr><td valign="top"><a href="#cancel_wait-2">cancel_wait/2</a></td><td></td></tr><tr><td valign="top"><a href="#default-1">default/1</a></td><td></td></tr><tr><td valign="top"><a href="#first-1">first/1</a></td><td>Behaves as ets:first(Tab) for a given type of registration object.</td></tr><tr><td valign="top"><a href="#get_value-1">get_value/1</a></td><td>Read the value stored with a key registered to the current process.</td></tr><tr><td valign="top"><a href="#info-1">info/1</a></td><td>Similar to <code>process_info(Pid)</code> but with additional gproc info.</td></tr><tr><td valign="top"><a href="#info-2">info/2</a></td><td>Similar to process_info(Pid, Item), but with additional gproc info.</td></tr><tr><td valign="top"><a href="#last-1">last/1</a></td><td>Behaves as ets:last(Tab) for a given type of registration object.</td></tr><tr><td valign="top"><a href="#lookup_global_aggr_counter-1">lookup_global_aggr_counter/1</a></td><td>Lookup a global (unique) aggregated counter and returns its value.</td></tr><tr><td valign="top"><a href="#lookup_global_counters-1">lookup_global_counters/1</a></td><td>Look up all global (non-unique) instances of a given Counter.</td></tr><tr><td valign="top"><a href="#lookup_global_name-1">lookup_global_name/1</a></td><td>Lookup a global unique name.</td></tr><tr><td valign="top"><a href="#lookup_global_properties-1">lookup_global_properties/1</a></td><td>Look up all global (non-unique) instances of a given Property.</td></tr><tr><td valign="top"><a href="#lookup_local_aggr_counter-1">lookup_local_aggr_counter/1</a></td><td>Lookup a local (unique) aggregated counter and returns its value.</td></tr><tr><td valign="top"><a href="#lookup_local_counters-1">lookup_local_counters/1</a></td><td>Look up all local (non-unique) instances of a given Counter.</td></tr><tr><td valign="top"><a href="#lookup_local_name-1">lookup_local_name/1</a></td><td>Lookup a local unique name.</td></tr><tr><td valign="top"><a href="#lookup_local_properties-1">lookup_local_properties/1</a></td><td>Look up all local (non-unique) instances of a given Property.</td></tr><tr><td valign="top"><a href="#lookup_pid-1">lookup_pid/1</a></td><td>Lookup the Pid stored with a key.</td></tr><tr><td valign="top"><a href="#lookup_pids-1">lookup_pids/1</a></td><td>Returns a list of pids with the published key Key.</td></tr><tr><td valign="top"><a href="#lookup_values-1">lookup_values/1</a></td><td>Retrieve the <code>{Pid,Value}</code> pairs corresponding to Key.</td></tr><tr><td valign="top"><a href="#mreg-3">mreg/3</a></td><td>Register multiple {Key,Value} pairs of a given type and scope.</td></tr><tr><td valign="top"><a href="#nb_wait-1">nb_wait/1</a></td><td>Wait for a local name to be registered.</td></tr><tr><td valign="top"><a href="#next-2">next/2</a></td><td>Behaves as ets:next(Tab,Key) for a given type of registration object.</td></tr><tr><td valign="top"><a href="#prev-2">prev/2</a></td><td>Behaves as ets:prev(Tab,Key) for a given type of registration object.</td></tr><tr><td valign="top"><a href="#reg-1">reg/1</a></td><td>Equivalent to <a href="#reg-2"><tt>reg(Key, default(Key))</tt></a>.</td></tr><tr><td valign="top"><a href="#reg-2">reg/2</a></td><td>Register a name or property for the current process.</td></tr><tr><td valign="top"><a href="#select-1">select/1</a></td><td>Equivalent to <a href="#select-2"><tt>select(all, Pat)</tt></a>.</td></tr><tr><td valign="top"><a href="#select-2">select/2</a></td><td>Perform a select operation on the process registry.</td></tr><tr><td valign="top"><a href="#select-3">select/3</a></td><td>Like <a href="#select-2"><code>select/2</code></a> but returns Limit objects at a time.</td></tr><tr><td valign="top"><a href="#send-2">send/2</a></td><td>Sends a message to the process, or processes, corresponding to Key.</td></tr><tr><td valign="top"><a href="#set_value-2">set_value/2</a></td><td>Sets the value of the registeration entry given by Key.</td></tr><tr><td valign="top"><a href="#start_link-0">start_link/0</a></td><td>Starts the gproc server.</td></tr><tr><td valign="top"><a href="#table-1">table/1</a></td><td>Equivalent to <a href="#table-2"><tt>table(Context, [])</tt></a>.</td></tr><tr><td valign="top"><a href="#table-2">table/2</a></td><td>QLC table generator for the gproc registry.</td></tr><tr><td valign="top"><a href="#unreg-1">unreg/1</a></td><td>Unregister a name or property.</td></tr><tr><td valign="top"><a href="#update_counter-2">update_counter/2</a></td><td>Updates the counter registered as Key for the current process.</td></tr><tr><td valign="top"><a href="#where-1">where/1</a></td><td>Returns the pid registered as Key.</td></tr></table>
+
+<a name="functions"></a>
+
+
+##Function Details##
+
+<a name="add_global_aggr_counter-1"></a>
+
+
+###add_global_aggr_counter/1##
+
+
+`add_global_aggr_counter(Name) -> any()`
+
+Equivalent to [`reg({a, g, Name})`](#reg-1).
+Registers a global (unique) aggregated counter.
+<a name="add_global_counter-2"></a>
+
+
+###add_global_counter/2##
+
+
+`add_global_counter(Name, Initial) -> any()`
+
+Registers a global (non-unique) counter. @equiv reg({c,g,Name},Value)
+<a name="add_global_name-1"></a>
+
+
+###add_global_name/1##
+
+
+`add_global_name(Name) -> any()`
+
+Registers a global (unique) name. @equiv reg({n,g,Name})
+<a name="add_global_property-2"></a>
+
+
+###add_global_property/2##
+
+
+`add_global_property(Name, Value) -> any()`
+
+Registers a global (non-unique) property. @equiv reg({p,g,Name},Value)
+<a name="add_local_aggr_counter-1"></a>
+
+
+###add_local_aggr_counter/1##
+
+
+`add_local_aggr_counter(Name) -> any()`
+
+Equivalent to [`reg({a, l, Name})`](#reg-1).
+Registers a local (unique) aggregated counter.
+<a name="add_local_counter-2"></a>
+
+
+###add_local_counter/2##
+
+
+`add_local_counter(Name, Initial) -> any()`
+
+Registers a local (non-unique) counter. @equiv reg({c,l,Name},Value)
+<a name="add_local_name-1"></a>
+
+
+###add_local_name/1##
+
+
+`add_local_name(Name) -> any()`
+
+Registers a local (unique) name. @equiv reg({n,l,Name})
+<a name="add_local_property-2"></a>
+
+
+###add_local_property/2##
+
+
+`add_local_property(Name, Value) -> any()`
+
+Registers a local (non-unique) property. @equiv reg({p,l,Name},Value)
+<a name="audit_process-1"></a>
+
+
+###audit_process/1##
+
+
+`audit_process(Pid) -> any()`
+
+<a name="await-1"></a>
+
+
+###await/1##
+
+
+`await(Key::[key()](#type-key)) -> {pid(), Value}`
+
+Equivalent to [`await(Key, infinity)`](#await-2).
+<a name="await-2"></a>
+
+
+###await/2##
+
+
+`await(Key::[key()](#type-key), Timeout) -> {pid(), Value}`* `Timeout = integer() | infinity`
+
+
+Wait for a local name to be registered.
+  The function raises an exception if the timeout expires. Timeout must be
+  either an interger > 0 or 'infinity'.
+  A small optimization: we first perform a lookup, to see if the name
+  is already registered. This way, the cost of the operation will be
+  roughly the same as of where/1 in the case where the name is already
+  registered (the difference: await/2 also returns the value).
+<a name="cancel_wait-2"></a>
+
+
+###cancel_wait/2##
+
+
+`cancel_wait(Key, Ref) -> any()`
+
+<a name="default-1"></a>
+
+
+###default/1##
+
+
+`default(X1) -> any()`
+
+<a name="first-1"></a>
+
+
+###first/1##
+
+
+`first(Type::[type()](#type-type)) -> [key()](#type-key) | '$end_of_table'`
+
+
+Behaves as ets:first(Tab) for a given type of registration object.
+ 
+  See [`http://www.erlang.org/doc/man/ets.html#first-1`](http://www.erlang.org/doc/man/ets.html#first-1).
+   The registry behaves as an ordered_set table.
+<a name="get_value-1"></a>
+
+
+###get_value/1##
+
+
+`get_value(Key) -> Value`
+
+
+Read the value stored with a key registered to the current process.
+ 
+  If no such key is registered to the current process, this function exits.
+<a name="info-1"></a>
+
+
+###info/1##
+
+
+`info(Pid::pid()) -> ProcessInfo`* `ProcessInfo = [{gproc, [{Key, Value}]} | ProcessInfo]`
+
+
+
+Similar to `process_info(Pid)` but with additional gproc info.
+ 
+  Returns the same information as process_info(Pid), but with the
+  addition of a `gproc` information item, containing the `{Key,Value}`
+  pairs registered to the process.
+<a name="info-2"></a>
+
+
+###info/2##
+
+
+`info(Pid::pid(), Item::atom()) -> {Item, Info}`
+
+
+Similar to process_info(Pid, Item), but with additional gproc info.
+ 
+  For `Item = gproc`, this function returns a list of `{Key, Value}` pairs
+  registered to the process Pid. For other values of Item, it returns the
+  same as [`http://www.erlang.org/doc/man/erlang.html#process_info-2`](http://www.erlang.org/doc/man/erlang.html#process_info-2).
+<a name="last-1"></a>
+
+
+###last/1##
+
+
+`last(Context::[context()](#type-context)) -> [key()](#type-key) | '$end_of_table'`
+
+
+Behaves as ets:last(Tab) for a given type of registration object.
+ 
+  See [`http://www.erlang.org/doc/man/ets.html#last-1`](http://www.erlang.org/doc/man/ets.html#last-1).
+  The registry behaves as an ordered_set table.
+<a name="lookup_global_aggr_counter-1"></a>
+
+
+###lookup_global_aggr_counter/1##
+
+
+`lookup_global_aggr_counter(Name::any()) -> integer()`
+
+Equivalent to [`where({a, g, Name})`](#where-1).
+Lookup a global (unique) aggregated counter and returns its value.
+  Fails if there is no such object.
+<a name="lookup_global_counters-1"></a>
+
+
+###lookup_global_counters/1##
+
+
+`lookup_global_counters(Counter::any()) -> [{pid(), Value::integer()}]`
+
+Equivalent to [`lookup_values({c, g, Counter})`](#lookup_values-1).
+Look up all global (non-unique) instances of a given Counter.
+  Returns a list of {Pid, Value} tuples for all matching objects.
+<a name="lookup_global_name-1"></a>
+
+
+###lookup_global_name/1##
+
+
+`lookup_global_name(Name::any()) -> pid()`
+
+Equivalent to [`where({n, g, Name})`](#where-1).
+Lookup a global unique name. Fails if there is no such name.
+<a name="lookup_global_properties-1"></a>
+
+
+###lookup_global_properties/1##
+
+
+`lookup_global_properties(Property::any()) -> [{pid(), Value}]`
+
+Equivalent to [`lookup_values({p, g, Property})`](#lookup_values-1).
+Look up all global (non-unique) instances of a given Property.
+  Returns a list of {Pid, Value} tuples for all matching objects.
+<a name="lookup_local_aggr_counter-1"></a>
+
+
+###lookup_local_aggr_counter/1##
+
+
+`lookup_local_aggr_counter(Name::any()) -> integer()`
+
+Equivalent to [`where({a, l, Name})`](#where-1).
+Lookup a local (unique) aggregated counter and returns its value.
+  Fails if there is no such object.
+<a name="lookup_local_counters-1"></a>
+
+
+###lookup_local_counters/1##
+
+
+`lookup_local_counters(Counter::any()) -> [{pid(), Value::integer()}]`
+
+Equivalent to [`lookup_values({c, l, Counter})`](#lookup_values-1).
+Look up all local (non-unique) instances of a given Counter.
+  Returns a list of {Pid, Value} tuples for all matching objects.
+<a name="lookup_local_name-1"></a>
+
+
+###lookup_local_name/1##
+
+
+`lookup_local_name(Name::any()) -> pid()`
+
+Equivalent to [`where({n, l, Name})`](#where-1).
+Lookup a local unique name. Fails if there is no such name.
+<a name="lookup_local_properties-1"></a>
+
+
+###lookup_local_properties/1##
+
+
+`lookup_local_properties(Property::any()) -> [{pid(), Value}]`
+
+Equivalent to [`lookup_values({p, l, Property})`](#lookup_values-1).
+Look up all local (non-unique) instances of a given Property.
+  Returns a list of {Pid, Value} tuples for all matching objects.
+<a name="lookup_pid-1"></a>
+
+
+###lookup_pid/1##
+
+
+`lookup_pid(Key) -> Pid`
+
+Lookup the Pid stored with a key.
+ 
+<a name="lookup_pids-1"></a>
+
+
+###lookup_pids/1##
+
+
+`lookup_pids(Key::[key()](#type-key)) -> [pid()]`
+
+
+Returns a list of pids with the published key Key
+ 
+  If the type of registration entry is either name or aggregated counter,
+  this function will return either an empty list, or a list of one pid.
+  For non-unique types, the return value can be a list of any length.
+<a name="lookup_values-1"></a>
+
+
+###lookup_values/1##
+
+
+`lookup_values(Key::[key()](#type-key)) -> [{pid(), Value}]`
+
+
+Retrieve the `{Pid,Value}` pairs corresponding to Key.
+ 
+  Key refer to any type of registry object. If it refers to a unique
+  object, the list will be of length 0 or 1. If it refers to a non-unique
+  object, the return value can be a list of any length.
+<a name="mreg-3"></a>
+
+
+###mreg/3##
+
+
+`mreg(T::[type()](#type-type), X2::[scope()](#type-scope), KVL::[{Key::any(), Value::any()}]) -> true`
+
+
+Register multiple {Key,Value} pairs of a given type and scope.
+ 
+  This function is more efficient than calling [`reg/2`](#reg-2) repeatedly.
+<a name="nb_wait-1"></a>
+
+
+###nb_wait/1##
+
+
+`nb_wait(Key::[key()](#type-key)) -> Ref`
+
+Wait for a local name to be registered.
+  The caller can expect to receive a message,
+  {gproc, Ref, registered, {Key, Pid, Value}}, once the name is registered.
+<a name="next-2"></a>
+
+
+###next/2##
+
+
+`next(Context::[context()](#type-context), Key::[key()](#type-key)) -> [key()](#type-key) | '$end_of_table'`
+
+
+Behaves as ets:next(Tab,Key) for a given type of registration object.
+ 
+  See [`http://www.erlang.org/doc/man/ets.html#next-2`](http://www.erlang.org/doc/man/ets.html#next-2).
+  The registry behaves as an ordered_set table.
+<a name="prev-2"></a>
+
+
+###prev/2##
+
+
+`prev(Context::[context()](#type-context), Key::[key()](#type-key)) -> [key()](#type-key) | '$end_of_table'`
+
+
+Behaves as ets:prev(Tab,Key) for a given type of registration object.
+ 
+  See [`http://www.erlang.org/doc/man/ets.html#prev-2`](http://www.erlang.org/doc/man/ets.html#prev-2).
+  The registry behaves as an ordered_set table.
+<a name="reg-1"></a>
+
+
+###reg/1##
+
+
+`reg(Key::[key()](#type-key)) -> true`
+
+Equivalent to [`reg(Key, default(Key))`](#reg-2).
+<a name="reg-2"></a>
+
+
+###reg/2##
+
+
+`reg(Key::[key()](#type-key), Value) -> true`
+
+
+Register a name or property for the current process
+ 
+ 
+<a name="select-1"></a>
+
+
+###select/1##
+
+
+`select(Pat::[select_pattern()](#type-select_pattern)) -> list([sel_object()](#type-sel_object))`
+
+Equivalent to [`select(all, Pat)`](#select-2).
+<a name="select-2"></a>
+
+
+###select/2##
+
+
+`select(Type::[sel_type()](#type-sel_type), Pat::[sel_pattern()](#type-sel_pattern)) -> [{Key, Pid, Value}]`
+
+
+Perform a select operation on the process registry.
+ 
+  The physical representation in the registry may differ from the above,
+  but the select patterns are transformed appropriately.
+<a name="select-3"></a>
+
+
+###select/3##
+
+
+`select(Type::[sel_type()](#type-sel_type), Pat::[sel_patten()](#type-sel_patten), Limit::integer()) -> [{Key, Pid, Value}]`
+
+
+Like [`select/2`](#select-2) but returns Limit objects at a time.
+ 
+  See [`http://www.erlang.org/doc/man/ets.html#select-3`](http://www.erlang.org/doc/man/ets.html#select-3).
+<a name="send-2"></a>
+
+
+###send/2##
+
+
+`send(Key::[key()](#type-key), Msg::any()) -> Msg`
+
+
+Sends a message to the process, or processes, corresponding to Key.
+ 
+  If Key belongs to a unique object (name or aggregated counter), this
+  function will send a message to the corresponding process, or fail if there
+  is no such process. If Key is for a non-unique object type (counter or
+  property), Msg will be send to all processes that have such an object.
+<a name="set_value-2"></a>
+
+
+###set_value/2##
+
+
+`set_value(Key::[key()](#type-key), Value) -> true`
+
+
+Sets the value of the registeration entry given by Key
+ 
+  
+Key is assumed to exist and belong to the calling process.  
+If it doesn't, this function will exit.
+ 
+  Value can be any term, unless the object is a counter, in which case
+  it must be an integer.
+<a name="start_link-0"></a>
+
+
+###start_link/0##
+
+
+`start_link() -> {ok, pid()}`
+
+
+Starts the gproc server.
+ 
+  This function is intended to be called from gproc_sup, as part of
+  starting the gproc application.
+<a name="table-1"></a>
+
+
+###table/1##
+
+
+`table(Context::[context()](#type-context)) -> any()`
+
+Equivalent to [`table(Context, [])`](#table-2).
+<a name="table-2"></a>
+
+
+###table/2##
+
+
+`table(Context::[context()](#type-context), Opts) -> any()`
+
+QLC table generator for the gproc registry.
+  Context specifies which subset of the registry should be queried.
+  See [`http://www.erlang.org/doc/man/qlc.html`](http://www.erlang.org/doc/man/qlc.html).
+<a name="unreg-1"></a>
+
+
+###unreg/1##
+
+
+`unreg(Key::[key()](#type-key)) -> true`
+
+Unregister a name or property.
+<a name="update_counter-2"></a>
+
+
+###update_counter/2##
+
+
+`update_counter(Key::[key()](#type-key), Incr::integer()) -> integer()`
+
+
+Updates the counter registered as Key for the current process.
+ 
+  This function works like ets:update_counter/3
+  (see [`http://www.erlang.org/doc/man/ets.html#update_counter-3`](http://www.erlang.org/doc/man/ets.html#update_counter-3)), but
+  will fail if the type of object referred to by Key is not a counter.
+<a name="where-1"></a>
+
+
+###where/1##
+
+
+`where(Key::[key()](#type-key)) -> pid()`
+
+
+Returns the pid registered as Key
+ 
+  The type of registration entry must be either name or aggregated counter.
+  Otherwise this function will exit. Use [`lookup_pids/1`](#lookup_pids-1) in these
+  cases.
+_Generated by EDoc, Oct 22 2010, 18:51:39._

+ 0 - 43
doc/gproc_app.html

@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>Module gproc_app</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<hr>
-
-<h1>Module gproc_app</h1>
-<ul class="index"><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
-
-<p><b>Behaviours:</b> <a href="application.html"><tt>application</tt></a>.</p>
-
-<h2><a name="index">Function Index</a></h2>
-<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#start-0">start/0</a></td><td></td></tr>
-<tr><td valign="top"><a href="#start-2">start/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#stop-1">stop/1</a></td><td></td></tr>
-</table>
-
-<h2><a name="functions">Function Details</a></h2>
-
-<h3 class="function"><a name="start-0">start/0</a></h3>
-<div class="spec">
-<p><tt>start() -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="start-2">start/2</a></h3>
-<div class="spec">
-<p><tt>start(Type, StartArgs) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="stop-1">stop/1</a></h3>
-<div class="spec">
-<p><tt>stop(State) -&gt; any()</tt></p>
-</div>
-<hr>
-
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 44 - 0
doc/gproc_app.md

@@ -0,0 +1,44 @@
+Module gproc_app
+================
+
+
+#Module gproc_app#
+* [Function Index](#index)
+* [Function Details](#functions)
+
+__Behaviours:__ [`application`](application.html).
+
+##<a name="index">Function Index</a>##
+
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#start-0">start/0</a></td><td></td></tr><tr><td valign="top"><a href="#start-2">start/2</a></td><td></td></tr><tr><td valign="top"><a href="#stop-1">stop/1</a></td><td></td></tr></table>
+
+<a name="functions"></a>
+
+
+##Function Details##
+
+<a name="start-0"></a>
+
+
+###start/0##
+
+
+`start() -> any()`
+
+<a name="start-2"></a>
+
+
+###start/2##
+
+
+`start(Type, StartArgs) -> any()`
+
+<a name="stop-1"></a>
+
+
+###stop/1##
+
+
+`stop(State) -> any()`
+
+_Generated by EDoc, Oct 22 2010, 18:51:39._

+ 0 - 178
doc/gproc_dist.html

@@ -1,178 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>Module gproc_dist</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<hr>
-
-<h1>Module gproc_dist</h1>
-<ul class="index"><li><a href="#description">Description</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>Extended process registry.
-
-<p><b>Behaviours:</b> <a href="gen_leader.html"><tt>gen_leader</tt></a>.</p>
-<p><b>Authors:</b> Ulf Wiger (<a href="mailto:ulf.wiger@ericsson.com"><tt>ulf.wiger@ericsson.com</tt></a>).</p>
-
-<h2><a name="description">Description</a></h2>Extended process registry
-  <p>This module implements an extended process registry</p>
-  <p>For a detailed description, see gproc/doc/erlang07-wiger.pdf.</p>
-<h2><a name="index">Function Index</a></h2>
-<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#code_change-4">code_change/4</a></td><td></td></tr>
-<tr><td valign="top"><a href="#elected-2">elected/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#elected-3">elected/3</a></td><td></td></tr>
-<tr><td valign="top"><a href="#from_leader-3">from_leader/3</a></td><td></td></tr>
-<tr><td valign="top"><a href="#handle_DOWN-3">handle_DOWN/3</a></td><td></td></tr>
-<tr><td valign="top"><a href="#handle_call-4">handle_call/4</a></td><td></td></tr>
-<tr><td valign="top"><a href="#handle_cast-3">handle_cast/3</a></td><td></td></tr>
-<tr><td valign="top"><a href="#handle_info-2">handle_info/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#handle_leader_call-4">handle_leader_call/4</a></td><td></td></tr>
-<tr><td valign="top"><a href="#handle_leader_cast-3">handle_leader_cast/3</a></td><td></td></tr>
-<tr><td valign="top"><a href="#init-1">init/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#leader_call-1">leader_call/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#leader_cast-1">leader_cast/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#mreg-2">mreg/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#reg-1">reg/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#reg-2">reg/2</a></td><td>
-      Class = n  - unique name
-            | p  - non-unique property
-            | c  - counter
-            | a  - aggregated counter
-      Scope = l | g (global or local).</td></tr>
-<tr><td valign="top"><a href="#set_value-2">set_value/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#start_link-0">start_link/0</a></td><td></td></tr>
-<tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#surrendered-3">surrendered/3</a></td><td></td></tr>
-<tr><td valign="top"><a href="#terminate-2">terminate/2</a></td><td></td></tr>
-<tr><td valign="top"><a href="#unreg-1">unreg/1</a></td><td></td></tr>
-<tr><td valign="top"><a href="#update_counter-2">update_counter/2</a></td><td></td></tr>
-</table>
-
-<h2><a name="functions">Function Details</a></h2>
-
-<h3 class="function"><a name="code_change-4">code_change/4</a></h3>
-<div class="spec">
-<p><tt>code_change(FromVsn, S, Extra, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="elected-2">elected/2</a></h3>
-<div class="spec">
-<p><tt>elected(S, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="elected-3">elected/3</a></h3>
-<div class="spec">
-<p><tt>elected(S, E, Node) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="from_leader-3">from_leader/3</a></h3>
-<div class="spec">
-<p><tt>from_leader(Ops, S, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="handle_DOWN-3">handle_DOWN/3</a></h3>
-<div class="spec">
-<p><tt>handle_DOWN(Node, S, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="handle_call-4">handle_call/4</a></h3>
-<div class="spec">
-<p><tt>handle_call(X1, X2, S, X4) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="handle_cast-3">handle_cast/3</a></h3>
-<div class="spec">
-<p><tt>handle_cast(Msg, S, X3) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="handle_info-2">handle_info/2</a></h3>
-<div class="spec">
-<p><tt>handle_info(X1, S) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="handle_leader_call-4">handle_leader_call/4</a></h3>
-<div class="spec">
-<p><tt>handle_leader_call(X1, From, S, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="handle_leader_cast-3">handle_leader_cast/3</a></h3>
-<div class="spec">
-<p><tt>handle_leader_cast(X1, S, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="init-1">init/1</a></h3>
-<div class="spec">
-<p><tt>init(Opts) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="leader_call-1">leader_call/1</a></h3>
-<div class="spec">
-<p><tt>leader_call(Req) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="leader_cast-1">leader_cast/1</a></h3>
-<div class="spec">
-<p><tt>leader_cast(Msg) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="mreg-2">mreg/2</a></h3>
-<div class="spec">
-<p><tt>mreg(T, KVL) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="reg-1">reg/1</a></h3>
-<div class="spec">
-<p><tt>reg(Key) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="reg-2">reg/2</a></h3>
-<div class="spec">
-<p><tt>reg(Key, Value) -&gt; any()</tt></p>
-</div><p>
-      Class = n  - unique name
-            | p  - non-unique property
-            | c  - counter
-            | a  - aggregated counter
-      Scope = l | g (global or local)
-  </p>
-
-<h3 class="function"><a name="set_value-2">set_value/2</a></h3>
-<div class="spec">
-<p><tt>set_value(Key, Value) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="start_link-0">start_link/0</a></h3>
-<div class="spec">
-<p><tt>start_link() -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="start_link-1">start_link/1</a></h3>
-<div class="spec">
-<p><tt>start_link(Nodes) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="surrendered-3">surrendered/3</a></h3>
-<div class="spec">
-<p><tt>surrendered(S, X2, E) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="terminate-2">terminate/2</a></h3>
-<div class="spec">
-<p><tt>terminate(Reason, S) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="unreg-1">unreg/1</a></h3>
-<div class="spec">
-<p><tt>unreg(Key) -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="update_counter-2">update_counter/2</a></h3>
-<div class="spec">
-<p><tt>update_counter(Key, Incr) -&gt; any()</tt></p>
-</div>
-<hr>
-
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 225 - 0
doc/gproc_dist.md

@@ -0,0 +1,225 @@
+Module gproc_dist
+=================
+
+
+#Module gproc_dist#
+* [Description](#description)
+* [Function Index](#index)
+* [Function Details](#functions)
+Extended process registry.
+__Behaviours:__ [`gen_leader`](gen_leader.html).
+__Authors:__ Ulf Wiger ([`ulf.wiger@ericsson.com`](mailto:ulf.wiger@ericsson.com)).
+
+##<a name="description">Description</a>##
+Extended process registry
+  
+This module implements an extended process registry
+  
+For a detailed description, see gproc/doc/erlang07-wiger.pdf.
+
+##<a name="index">Function Index</a>##
+
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#code_change-4">code_change/4</a></td><td></td></tr><tr><td valign="top"><a href="#elected-2">elected/2</a></td><td></td></tr><tr><td valign="top"><a href="#elected-3">elected/3</a></td><td></td></tr><tr><td valign="top"><a href="#from_leader-3">from_leader/3</a></td><td></td></tr><tr><td valign="top"><a href="#handle_DOWN-3">handle_DOWN/3</a></td><td></td></tr><tr><td valign="top"><a href="#handle_call-4">handle_call/4</a></td><td></td></tr><tr><td valign="top"><a href="#handle_cast-3">handle_cast/3</a></td><td></td></tr><tr><td valign="top"><a href="#handle_info-2">handle_info/2</a></td><td></td></tr><tr><td valign="top"><a href="#handle_leader_call-4">handle_leader_call/4</a></td><td></td></tr><tr><td valign="top"><a href="#handle_leader_cast-3">handle_leader_cast/3</a></td><td></td></tr><tr><td valign="top"><a href="#init-1">init/1</a></td><td></td></tr><tr><td valign="top"><a href="#leader_call-1">leader_call/1</a></td><td></td></tr><tr><td valign="top"><a href="#leader_cast-1">leader_cast/1</a></td><td></td></tr><tr><td valign="top"><a href="#mreg-2">mreg/2</a></td><td></td></tr><tr><td valign="top"><a href="#reg-1">reg/1</a></td><td></td></tr><tr><td valign="top"><a href="#reg-2">reg/2</a></td><td>
+      Class = n  - unique name
+            | p  - non-unique property
+            | c  - counter
+            | a  - aggregated counter
+      Scope = l | g (global or local).</td></tr><tr><td valign="top"><a href="#set_value-2">set_value/2</a></td><td></td></tr><tr><td valign="top"><a href="#start_link-0">start_link/0</a></td><td></td></tr><tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td></td></tr><tr><td valign="top"><a href="#surrendered-3">surrendered/3</a></td><td></td></tr><tr><td valign="top"><a href="#terminate-2">terminate/2</a></td><td></td></tr><tr><td valign="top"><a href="#unreg-1">unreg/1</a></td><td></td></tr><tr><td valign="top"><a href="#update_counter-2">update_counter/2</a></td><td></td></tr></table>
+
+<a name="functions"></a>
+
+
+##Function Details##
+
+<a name="code_change-4"></a>
+
+
+###code_change/4##
+
+
+`code_change(FromVsn, S, Extra, E) -> any()`
+
+<a name="elected-2"></a>
+
+
+###elected/2##
+
+
+`elected(S, E) -> any()`
+
+<a name="elected-3"></a>
+
+
+###elected/3##
+
+
+`elected(S, E, Node) -> any()`
+
+<a name="from_leader-3"></a>
+
+
+###from_leader/3##
+
+
+`from_leader(Ops, S, E) -> any()`
+
+<a name="handle_DOWN-3"></a>
+
+
+###handle_DOWN/3##
+
+
+`handle_DOWN(Node, S, E) -> any()`
+
+<a name="handle_call-4"></a>
+
+
+###handle_call/4##
+
+
+`handle_call(X1, X2, S, X4) -> any()`
+
+<a name="handle_cast-3"></a>
+
+
+###handle_cast/3##
+
+
+`handle_cast(Msg, S, X3) -> any()`
+
+<a name="handle_info-2"></a>
+
+
+###handle_info/2##
+
+
+`handle_info(X1, S) -> any()`
+
+<a name="handle_leader_call-4"></a>
+
+
+###handle_leader_call/4##
+
+
+`handle_leader_call(X1, From, S, E) -> any()`
+
+<a name="handle_leader_cast-3"></a>
+
+
+###handle_leader_cast/3##
+
+
+`handle_leader_cast(X1, S, E) -> any()`
+
+<a name="init-1"></a>
+
+
+###init/1##
+
+
+`init(Opts) -> any()`
+
+<a name="leader_call-1"></a>
+
+
+###leader_call/1##
+
+
+`leader_call(Req) -> any()`
+
+<a name="leader_cast-1"></a>
+
+
+###leader_cast/1##
+
+
+`leader_cast(Msg) -> any()`
+
+<a name="mreg-2"></a>
+
+
+###mreg/2##
+
+
+`mreg(T, KVL) -> any()`
+
+<a name="reg-1"></a>
+
+
+###reg/1##
+
+
+`reg(Key) -> any()`
+
+<a name="reg-2"></a>
+
+
+###reg/2##
+
+
+`reg(Key, Value) -> any()`
+
+
+      Class = n  - unique name
+            | p  - non-unique property
+            | c  - counter
+            | a  - aggregated counter
+      Scope = l | g (global or local)
+  
+<a name="set_value-2"></a>
+
+
+###set_value/2##
+
+
+`set_value(Key, Value) -> any()`
+
+<a name="start_link-0"></a>
+
+
+###start_link/0##
+
+
+`start_link() -> any()`
+
+<a name="start_link-1"></a>
+
+
+###start_link/1##
+
+
+`start_link(Nodes) -> any()`
+
+<a name="surrendered-3"></a>
+
+
+###surrendered/3##
+
+
+`surrendered(S, X2, E) -> any()`
+
+<a name="terminate-2"></a>
+
+
+###terminate/2##
+
+
+`terminate(Reason, S) -> any()`
+
+<a name="unreg-1"></a>
+
+
+###unreg/1##
+
+
+`unreg(Key) -> any()`
+
+<a name="update_counter-2"></a>
+
+
+###update_counter/2##
+
+
+`update_counter(Key, Incr) -> any()`
+
+_Generated by EDoc, Oct 22 2010, 18:51:39._

+ 0 - 36
doc/gproc_init.html

@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>Module gproc_init</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<hr>
-
-<h1>Module gproc_init</h1>
-<ul class="index"><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
-
-
-<h2><a name="index">Function Index</a></h2>
-<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#hard_reset-0">hard_reset/0</a></td><td></td></tr>
-<tr><td valign="top"><a href="#soft_reset-0">soft_reset/0</a></td><td></td></tr>
-</table>
-
-<h2><a name="functions">Function Details</a></h2>
-
-<h3 class="function"><a name="hard_reset-0">hard_reset/0</a></h3>
-<div class="spec">
-<p><tt>hard_reset() -&gt; any()</tt></p>
-</div>
-
-<h3 class="function"><a name="soft_reset-0">soft_reset/0</a></h3>
-<div class="spec">
-<p><tt>soft_reset() -&gt; any()</tt></p>
-</div>
-<hr>
-
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 35 - 0
doc/gproc_init.md

@@ -0,0 +1,35 @@
+Module gproc_init
+=================
+
+
+#Module gproc_init#
+* [Function Index](#index)
+* [Function Details](#functions)
+
+
+##<a name="index">Function Index</a>##
+
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#hard_reset-0">hard_reset/0</a></td><td></td></tr><tr><td valign="top"><a href="#soft_reset-0">soft_reset/0</a></td><td></td></tr></table>
+
+<a name="functions"></a>
+
+
+##Function Details##
+
+<a name="hard_reset-0"></a>
+
+
+###hard_reset/0##
+
+
+`hard_reset() -> any()`
+
+<a name="soft_reset-0"></a>
+
+
+###soft_reset/0##
+
+
+`soft_reset() -> any()`
+
+_Generated by EDoc, Oct 22 2010, 18:51:39._

+ 0 - 23
doc/gproc_lib.html

@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>Module gproc_lib</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<hr>
-
-<h1>Module gproc_lib</h1>
-<ul class="index"><li><a href="#description">Description</a></li></ul>Extended process registry.
-
-<p><b>Authors:</b> Ulf Wiger (<a href="mailto:ulf.wiger@ericsson.com"><tt>ulf.wiger@ericsson.com</tt></a>).</p>
-
-<h2><a name="description">Description</a></h2>Extended process registry
-  <p>This module implements an extended process registry</p>
-  <p>For a detailed description, see gproc/doc/erlang07-wiger.pdf.</p><hr>
-
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 16 - 0
doc/gproc_lib.md

@@ -0,0 +1,16 @@
+Module gproc_lib
+================
+
+
+#Module gproc_lib#
+* [Description](#description)
+Extended process registry.
+__Authors:__ Ulf Wiger ([`ulf.wiger@ericsson.com`](mailto:ulf.wiger@ericsson.com)).
+
+##<a name="description">Description</a>##
+Extended process registry
+  
+This module implements an extended process registry
+  
+For a detailed description, see gproc/doc/erlang07-wiger.pdf.
+_Generated by EDoc, Oct 22 2010, 18:51:39._

+ 0 - 37
doc/gproc_sup.html

@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>Module gproc_sup</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<hr>
-
-<h1>Module gproc_sup</h1>
-<ul class="index"><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
-
-<p><b>Behaviours:</b> <a href="supervisor.html"><tt>supervisor</tt></a>.</p>
-
-<h2><a name="index">Function Index</a></h2>
-<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#init-1">init/1</a></td><td>The main GPROC supervisor.</td></tr>
-<tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td></td></tr>
-</table>
-
-<h2><a name="functions">Function Details</a></h2>
-
-<h3 class="function"><a name="init-1">init/1</a></h3>
-<div class="spec">
-<p><tt>init(Args) -&gt; any()</tt></p>
-</div><p>The main GPROC supervisor.</p>
-
-<h3 class="function"><a name="start_link-1">start_link/1</a></h3>
-<div class="spec">
-<p><tt>start_link(Args) -&gt; any()</tt></p>
-</div>
-<hr>
-
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 37 - 0
doc/gproc_sup.md

@@ -0,0 +1,37 @@
+Module gproc_sup
+================
+
+
+#Module gproc_sup#
+* [Function Index](#index)
+* [Function Details](#functions)
+
+__Behaviours:__ [`supervisor`](supervisor.html).
+
+##<a name="index">Function Index</a>##
+
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#init-1">init/1</a></td><td>The main GPROC supervisor.</td></tr><tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td></td></tr></table>
+
+<a name="functions"></a>
+
+
+##Function Details##
+
+<a name="init-1"></a>
+
+
+###init/1##
+
+
+`init(Args) -> any()`
+
+The main GPROC supervisor.
+<a name="start_link-1"></a>
+
+
+###start_link/1##
+
+
+`start_link(Args) -> any()`
+
+_Generated by EDoc, Oct 22 2010, 18:51:39._

+ 0 - 17
doc/index.html

@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>The gproc application</title>
-</head>
-<frameset cols="20%,80%">
-<frame src="modules-frame.html" name="modulesFrame" title="">
-
-<frame src="overview-summary.html" name="overviewFrame" title="">
-<noframes>
-<h2>This page uses frames</h2>
-<p>Your browser does not accept frames.
-<br>You should go to the <a href="overview-summary.html">non-frame version</a> instead.
-</p>
-</noframes>
-</frameset>
-</html>

+ 51 - 0
doc/index.md

@@ -0,0 +1,51 @@
+
+
+#The gproc application#
+The gproc application
+=====================
+Extended process dictionary
+
+
+##Introduction##
+.
+__Authors:__ Ulf Wiger ([`ulf.wiger@erlang-consulting.com`](mailto:ulf.wiger@erlang-consulting.com)), Joseph Wayne Norton ([`norton@geminimobile.com`](mailto:norton@geminimobile.com)).Extended process dictionary
+
+
+##Introduction##
+
+
+
+Gproc was first introduced at the ACM SIGPLAN Erlang Workshop in
+Freiburg 2007 ([Paper available here](erlang07-wiger.pdf)).
+
+
+This application was designed to meet the following requirements:
+
+
+
+<li>
+  A process can register itself using any term.
+  A process can register more than one name
+  A process can publish non-unique {Key,Value} 'properties' 
+  The registry must be efficiently searchable
+</li>
+
+
+
+As additional features, the registry was designed to allow global
+registration, and a special {Key,Value} property called a counter.
+It is also possible to create an 'aggregate counter', which will
+continuously reflect the sum of all counters with the same name.
+
+_In its current state, the global registration facility is brokenand should not be used. It will be migrated over to a new version of gen_leader. This work will be done with low priority unless peopleexpress a strong urge to use this functionality._
+
+
+##Modules##
+
+<table width="100%" border="0" summary="list of modules">
+<tr><td><a href="gproc.md" class="module">gproc</a></td></tr>
+<tr><td><a href="gproc_app.md" class="module">gproc_app</a></td></tr>
+<tr><td><a href="gproc_dist.md" class="module">gproc_dist</a></td></tr>
+<tr><td><a href="gproc_init.md" class="module">gproc_init</a></td></tr>
+<tr><td><a href="gproc_lib.md" class="module">gproc_lib</a></td></tr>
+<tr><td><a href="gproc_sup.md" class="module">gproc_sup</a></td></tr></table>

+ 0 - 17
doc/modules-frame.html

@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>The gproc application</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<h2 class="indextitle">Modules</h2>
-<table width="100%" border="0" summary="list of modules">
-<tr><td><a href="gproc.html" target="overviewFrame" class="module">gproc</a></td></tr>
-<tr><td><a href="gproc_app.html" target="overviewFrame" class="module">gproc_app</a></td></tr>
-<tr><td><a href="gproc_dist.html" target="overviewFrame" class="module">gproc_dist</a></td></tr>
-<tr><td><a href="gproc_init.html" target="overviewFrame" class="module">gproc_init</a></td></tr>
-<tr><td><a href="gproc_lib.html" target="overviewFrame" class="module">gproc_lib</a></td></tr>
-<tr><td><a href="gproc_sup.html" target="overviewFrame" class="module">gproc_sup</a></td></tr></table>
-</body>
-</html>

+ 0 - 40
doc/overview-summary.html

@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>The gproc application</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<h1>The gproc application</h1>
-<p><b>Authors:</b> Ulf Wiger (<a href="mailto:ulf.wiger@erlang-consulting.com"><tt>ulf.wiger@erlang-consulting.com</tt></a>), Joseph Wayne Norton (<a href="mailto:norton@geminimobile.com"><tt>norton@geminimobile.com</tt></a>).</p>
-Extended process dictionary
-<h2>Introduction</h2>
-
-<p>Gproc was first introduced at the ACM SIGPLAN Erlang Workshop in
-Freiburg 2007 (<a href="erlang07-wiger.pdf">Paper available here</a>).</p>
-
-<p>This application was designed to meet the following requirements:</p>
-
-<p><li>
-  <ul>A process can register itself using any term.</ul>
-  <ul>A process can register more than one name</ul>
-  <ul>A process can publish non-unique {Key,Value} 'properties' </ul>
-  <ul>The registry must be efficiently searchable</ul>
-</li></p>
-
-<p>As additional features, the registry was designed to allow global
-registration, and a special {Key,Value} property called a counter.
-It is also possible to create an 'aggregate counter', which will
-continuously reflect the sum of all counters with the same name.</p>
-
-<em>In its current state, the global registration facility is broken
-and should not be used. It will be migrated over to a new version of 
-gen_leader. This work will be done with low priority unless people
-express a strong urge to use this functionality.</em>
-
-<hr>
-<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
-<p><i>Generated by EDoc, Sep 11 2010, 18:22:25.</i></p>
-</body>
-</html>

+ 0 - 11
doc/packages-frame.html

@@ -1,11 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>The gproc application</title>
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
-</head>
-<body bgcolor="white">
-<h2 class="indextitle">Packages</h2>
-<table width="100%" border="0" summary="list of packages"></table>
-</body>
-</html>