Browse Source

docs rebuilt with new edown

Ulf Wiger 13 years ago
parent
commit
d220c61af4
9 changed files with 171 additions and 497 deletions
  1. 115 291
      doc/gproc.md
  2. 0 10
      doc/gproc_app.md
  3. 3 73
      doc/gproc_dist.md
  4. 0 6
      doc/gproc_info.md
  5. 0 6
      doc/gproc_init.md
  6. 0 40
      doc/gproc_lib.md
  7. 6 14
      doc/gproc_monitor.md
  8. 47 47
      doc/gproc_ps.md
  9. 0 10
      doc/gproc_sup.md

+ 115 - 291
doc/gproc.md

@@ -10,8 +10,6 @@
 Extended process registry
 Extended process registry
 This module implements an extended process registry.
 This module implements an extended process registry.
 
 
-
-
 __Behaviours:__ [`gen_server`](gen_server.md).
 __Behaviours:__ [`gen_server`](gen_server.md).
 
 
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
@@ -19,17 +17,25 @@ __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="descri
 ##Description##
 ##Description##
 
 
 
 
+
+
 For a detailed description, see
 For a detailed description, see
 [erlang07-wiger.pdf](erlang07-wiger.pdf).
 [erlang07-wiger.pdf](erlang07-wiger.pdf).
 
 
+
+
 ##Tuning Gproc performance##
 ##Tuning Gproc performance##
 
 
 
 
+
+
 Gproc relies on a central server and an ordered-set ets table.
 Gproc relies on a central server and an ordered-set ets table.
 Effort is made to perform as much work as possible in the client without
 Effort is made to perform as much work as possible in the client without
 sacrificing consistency. A few things can be tuned by setting the following
 sacrificing consistency. A few things can be tuned by setting the following
 application environment variables in the top application of `gproc`
 application environment variables in the top application of `gproc`
-(usually `gproc`):* `{ets_options, list()}` - Currently, the options `{write_concurrency, F}`
+(usually `gproc`):
+
+* `{ets_options, list()}` - Currently, the options `{write_concurrency, F}`
 and `{read_concurrency, F}` are allowed. The default is
 and `{read_concurrency, F}` are allowed. The default is
 `[{write_concurrency, true}, {read_concurrency, true}]`
 `[{write_concurrency, true}, {read_concurrency, true}]`
 * `{server_options, list()}` - These will be passed as spawn options when
 * `{server_options, list()}` - These will be passed as spawn options when
@@ -218,12 +224,8 @@ a unique name registered via gproc.</td></tr><tr><td valign="top"><a href="#mreg
 ###add_global_aggr_counter/1##
 ###add_global_aggr_counter/1##
 
 
 
 
-
-
 `add_global_aggr_counter(Name) -> any()`
 `add_global_aggr_counter(Name) -> any()`
 
 
-
-
 Equivalent to [`reg({a, g, Name})`](#reg-1).
 Equivalent to [`reg({a, g, Name})`](#reg-1).
 
 
 Registers a global (unique) aggregated counter.<a name="add_global_counter-2"></a>
 Registers a global (unique) aggregated counter.<a name="add_global_counter-2"></a>
@@ -231,45 +233,29 @@ Registers a global (unique) aggregated counter.<a name="add_global_counter-2"></
 ###add_global_counter/2##
 ###add_global_counter/2##
 
 
 
 
-
-
 `add_global_counter(Name, Initial) -> any()`
 `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>
 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/1##
 
 
 
 
-
-
 `add_global_name(Name) -> any()`
 `add_global_name(Name) -> any()`
 
 
-
-
 Registers a global (unique) name. @equiv reg({n,g,Name})<a name="add_global_property-2"></a>
 Registers a global (unique) name. @equiv reg({n,g,Name})<a name="add_global_property-2"></a>
 
 
 ###add_global_property/2##
 ###add_global_property/2##
 
 
 
 
-
-
 `add_global_property(Name, Value) -> any()`
 `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>
 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/1##
 
 
 
 
-
-
 `add_local_aggr_counter(Name) -> any()`
 `add_local_aggr_counter(Name) -> any()`
 
 
-
-
 Equivalent to [`reg({a, l, Name})`](#reg-1).
 Equivalent to [`reg({a, l, Name})`](#reg-1).
 
 
 Registers a local (unique) aggregated counter.<a name="add_local_counter-2"></a>
 Registers a local (unique) aggregated counter.<a name="add_local_counter-2"></a>
@@ -277,45 +263,29 @@ Registers a local (unique) aggregated counter.<a name="add_local_counter-2"></a>
 ###add_local_counter/2##
 ###add_local_counter/2##
 
 
 
 
-
-
 `add_local_counter(Name, Initial) -> any()`
 `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>
 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/1##
 
 
 
 
-
-
 `add_local_name(Name) -> any()`
 `add_local_name(Name) -> any()`
 
 
-
-
 Registers a local (unique) name. @equiv reg({n,l,Name})<a name="add_local_property-2"></a>
 Registers a local (unique) name. @equiv reg({n,l,Name})<a name="add_local_property-2"></a>
 
 
 ###add_local_property/2##
 ###add_local_property/2##
 
 
 
 
-
-
 `add_local_property(Name, Value) -> any()`
 `add_local_property(Name, Value) -> any()`
 
 
-
-
 Registers a local (non-unique) property. @equiv reg({p,l,Name},Value)<a name="add_shared_local_counter-2"></a>
 Registers a local (non-unique) property. @equiv reg({p,l,Name},Value)<a name="add_shared_local_counter-2"></a>
 
 
 ###add_shared_local_counter/2##
 ###add_shared_local_counter/2##
 
 
 
 
-
-
 `add_shared_local_counter(Name, Initial) -> any()`
 `add_shared_local_counter(Name, Initial) -> any()`
 
 
-
-
 Equivalent to [`reg_shared({c, l, Name}, Value)`](#reg_shared-2).
 Equivalent to [`reg_shared({c, l, Name}, Value)`](#reg_shared-2).
 
 
 Registers a local shared (unique) counter.<a name="audit_process-1"></a>
 Registers a local shared (unique) counter.<a name="audit_process-1"></a>
@@ -323,8 +293,6 @@ Registers a local shared (unique) counter.<a name="audit_process-1"></a>
 ###audit_process/1##
 ###audit_process/1##
 
 
 
 
-
-
 <pre>audit_process(Pid::pid()) -&gt; ok</pre>
 <pre>audit_process(Pid::pid()) -&gt; ok</pre>
 <br></br>
 <br></br>
 
 
@@ -334,26 +302,18 @@ Registers a local shared (unique) counter.<a name="audit_process-1"></a>
 ###await/1##
 ###await/1##
 
 
 
 
-
-
 <pre>await(Key::<a href="#type-key">key()</a>) -> {pid(), Value}</pre>
 <pre>await(Key::<a href="#type-key">key()</a>) -> {pid(), Value}</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`await(Key, infinity)`](#await-2).<a name="await-2"></a>
 Equivalent to [`await(Key, infinity)`](#await-2).<a name="await-2"></a>
 
 
 ###await/2##
 ###await/2##
 
 
 
 
-
-
 <pre>await(Key::<a href="#type-key">key()</a>, Timeout) -> {pid(), Value}</pre>
 <pre>await(Key::<a href="#type-key">key()</a>, Timeout) -> {pid(), Value}</pre>
 <ul class="definitions"><li><pre>Timeout = integer() | infinity</pre></li></ul>
 <ul class="definitions"><li><pre>Timeout = integer() | infinity</pre></li></ul>
 
 
-
-
 Wait for a local name to be registered.
 Wait for a local name to be registered.
 The function raises an exception if the timeout expires. Timeout must be
 The function raises an exception if the timeout expires. Timeout must be
 either an interger > 0 or 'infinity'.
 either an interger > 0 or 'infinity'.
@@ -365,23 +325,19 @@ registered (the difference: await/2 also returns the value).<a name="cancel_wait
 ###cancel_wait/2##
 ###cancel_wait/2##
 
 
 
 
-
-
 <pre>cancel_wait(Key::<a href="#type-key">key()</a>, Ref) -> ok</pre>
 <pre>cancel_wait(Key::<a href="#type-key">key()</a>, Ref) -> ok</pre>
 <ul class="definitions"><li><pre>Ref = all | reference()</pre></li></ul>
 <ul class="definitions"><li><pre>Ref = all | reference()</pre></li></ul>
 
 
 
 
 
 
+Cancels a previous call to nb_wait/1
 
 
-
-Cancels a previous call to nb_wait/1If `Ref = all`, all wait requests on `Key` from the calling process
+If `Ref = all`, all wait requests on `Key` from the calling process
 are canceled.<a name="cancel_wait_or_monitor-1"></a>
 are canceled.<a name="cancel_wait_or_monitor-1"></a>
 
 
 ###cancel_wait_or_monitor/1##
 ###cancel_wait_or_monitor/1##
 
 
 
 
-
-
 `cancel_wait_or_monitor(Key) -> any()`
 `cancel_wait_or_monitor(Key) -> any()`
 
 
 <a name="default-1"></a>
 <a name="default-1"></a>
@@ -389,8 +345,6 @@ are canceled.<a name="cancel_wait_or_monitor-1"></a>
 ###default/1##
 ###default/1##
 
 
 
 
-
-
 `default(X1) -> any()`
 `default(X1) -> any()`
 
 
 <a name="demonitor-2"></a>
 <a name="demonitor-2"></a>
@@ -398,14 +352,10 @@ are canceled.<a name="cancel_wait_or_monitor-1"></a>
 ###demonitor/2##
 ###demonitor/2##
 
 
 
 
-
-
 <pre>demonitor(Key::<a href="#type-key">key()</a>, Ref::reference()) -> ok</pre>
 <pre>demonitor(Key::<a href="#type-key">key()</a>, Ref::reference()) -> ok</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Remove a monitor on a registered name
 Remove a monitor on a registered name
 This function is the reverse of monitor/1. It removes a monitor previously
 This function is the reverse of monitor/1. It removes a monitor previously
 set on a unique name. This function always succeeds given legal input.<a name="first-1"></a>
 set on a unique name. This function always succeeds given legal input.<a name="first-1"></a>
@@ -413,51 +363,45 @@ set on a unique name. This function always succeeds given legal input.<a name="f
 ###first/1##
 ###first/1##
 
 
 
 
-
-
 <pre>first(Context::<a href="#type-context">context()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <pre>first(Context::<a href="#type-context">context()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Behaves as ets:first(Tab) for a given type of registration object.
 
 
-
-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).
+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_env-3"></a>
 The registry behaves as an ordered_set table.<a name="get_env-3"></a>
 
 
 ###get_env/3##
 ###get_env/3##
 
 
 
 
-
-
 <pre>get_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom()) -> term()</pre>
 <pre>get_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom()) -> term()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`get_env(Scope, App, Key, [app_env])`](#get_env-4).<a name="get_env-4"></a>
 Equivalent to [`get_env(Scope, App, Key, [app_env])`](#get_env-4).<a name="get_env-4"></a>
 
 
 ###get_env/4##
 ###get_env/4##
 
 
 
 
-
-
 <pre>get_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom(), Strategy) -> term()</pre>
 <pre>get_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom(), Strategy) -> term()</pre>
 <ul class="definitions"><li><pre>Strategy = [Alternative]</pre></li><li><pre>Alternative = app_env | os_env | inherit | {inherit, pid()} | {inherit, <a href="#type-unique_id">unique_id()</a>} | init_arg | {mnesia, ActivityType, Oid, Pos} | {default, term()} | error</pre></li></ul>
 <ul class="definitions"><li><pre>Strategy = [Alternative]</pre></li><li><pre>Alternative = app_env | os_env | inherit | {inherit, pid()} | {inherit, <a href="#type-unique_id">unique_id()</a>} | init_arg | {mnesia, ActivityType, Oid, Pos} | {default, term()} | error</pre></li></ul>
 
 
 
 
 
 
+Read an environment value, potentially cached as a `gproc_env` property.
 
 
 
 
-Read an environment value, potentially cached as a `gproc_env` property.
 
 
 This function first tries to read the value of a cached property,
 This function first tries to read the value of a cached property,
 `{p, Scope, {gproc_env, App, Key}}`. If this fails, it will try the provided
 `{p, Scope, {gproc_env, App, Key}}`. If this fails, it will try the provided
 alternative strategy. `Strategy` is a list of alternatives, tried in order.
 alternative strategy. `Strategy` is a list of alternatives, tried in order.
 Each alternative can be one of:
 Each alternative can be one of:
 
 
+
+
 * `app_env` - try `application:get_env(App, Key)`
 * `app_env` - try `application:get_env(App, Key)`
 * `os_env` - try `os:getenv(ENV)`, where `ENV` is `Key` converted into an
 * `os_env` - try `os:getenv(ENV)`, where `ENV` is `Key` converted into an
 uppercase string
 uppercase string
@@ -474,15 +418,23 @@ the value in position `Pos` if object found.
 been exhausted; if not set, `undefined` will be returned.
 been exhausted; if not set, `undefined` will be returned.
 * `error` - raise an exception, `erlang:error(gproc_env, [App, Key, Scope])`.
 * `error` - raise an exception, `erlang:error(gproc_env, [App, Key, Scope])`.
 
 
+
+
 While any alternative can occur more than once, the only one that might make
 While any alternative can occur more than once, the only one that might make
 sense to use multiple times is `{default, Value}`.
 sense to use multiple times is `{default, Value}`.
 
 
+
+
 The return value will be one of:
 The return value will be one of:
 
 
+
+
 * The value of the first matching alternative, or `error` eception,
 * The value of the first matching alternative, or `error` eception,
 whichever comes first
 whichever comes first
 * The last instance of `{default, Value}`, or `undefined`, if there is no
 * The last instance of `{default, Value}`, or `undefined`, if there is no
-matching alternative, default or `error` entry in the list.The `error` option can be used to assert that a value has been previously
+matching alternative, default or `error` entry in the list.
+
+The `error` option can be used to assert that a value has been previously
 cached. Alternatively, it can be used to assert that a value is either cached
 cached. Alternatively, it can be used to assert that a value is either cached
 or at least defined somewhere,
 or at least defined somewhere,
 e.g. `get_env(l, mnesia, dir, [app_env, error])`.<a name="get_set_env-3"></a>
 e.g. `get_env(l, mnesia, dir, [app_env, error])`.<a name="get_set_env-3"></a>
@@ -490,30 +442,24 @@ e.g. `get_env(l, mnesia, dir, [app_env, error])`.<a name="get_set_env-3"></a>
 ###get_set_env/3##
 ###get_set_env/3##
 
 
 
 
-
-
 <pre>get_set_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom()) -> term()</pre>
 <pre>get_set_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom()) -> term()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`get_set_env(Scope, App, Key, [app_env])`](#get_set_env-4).<a name="get_set_env-4"></a>
 Equivalent to [`get_set_env(Scope, App, Key, [app_env])`](#get_set_env-4).<a name="get_set_env-4"></a>
 
 
 ###get_set_env/4##
 ###get_set_env/4##
 
 
 
 
-
-
 <pre>get_set_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom(), Strategy) -> Value</pre>
 <pre>get_set_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom(), Strategy) -> Value</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Fetch and cache an environment value, if not already cached.
 
 
-
-Fetch and cache an environment value, if not already cached.This function does the same thing as [`get_env/4`](#get_env-4), but also updates the
+This function does the same thing as [`get_env/4`](#get_env-4), but also updates the
 cache. Note that the cache will be updated even if the result of the lookup
 cache. Note that the cache will be updated even if the result of the lookup
 is `undefined`.
 is `undefined`.
 
 
@@ -523,152 +469,136 @@ __See also:__ [get_env/4](#get_env-4).<a name="get_value-1"></a>
 ###get_value/1##
 ###get_value/1##
 
 
 
 
-
-
 <pre>get_value(Key) -&gt; Value</pre>
 <pre>get_value(Key) -&gt; Value</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Reads the value stored with a key registered to the current process.
 
 
-
-Reads 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="get_value-2"></a>
+If no such key is registered to the current process, this function exits.<a name="get_value-2"></a>
 
 
 ###get_value/2##
 ###get_value/2##
 
 
 
 
-
-
 <pre>get_value(Key, Pid) -&gt; Value</pre>
 <pre>get_value(Key, Pid) -&gt; Value</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Reads the value stored with a key registered to the process Pid.
 
 
-
-Reads the value stored with a key registered to the process Pid.If `Pid == shared`, the value of a shared key (see [`reg_shared/1`](#reg_shared-1))
+If `Pid == shared`, the value of a shared key (see [`reg_shared/1`](#reg_shared-1))
 will be read.<a name="give_away-2"></a>
 will be read.<a name="give_away-2"></a>
 
 
 ###give_away/2##
 ###give_away/2##
 
 
 
 
-
-
 <pre>give_away(From::<a href="#type-key">key()</a>, To::pid() | <a href="#type-key">key()</a>) -> undefined | pid()</pre>
 <pre>give_away(From::<a href="#type-key">key()</a>, To::pid() | <a href="#type-key">key()</a>) -> undefined | pid()</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Atomically transfers the key `From` to the process identified by `To`.
 
 
 
 
-Atomically transfers the key `From` to the process identified by `To`.
 
 
 This function transfers any gproc key (name, property, counter, aggr counter)
 This function transfers any gproc key (name, property, counter, aggr counter)
 from one process to another, and returns the pid of the new owner.
 from one process to another, and returns the pid of the new owner.
 
 
+
+
 `To` must be either a pid or a unique name (name or aggregated counter), but
 `To` must be either a pid or a unique name (name or aggregated counter), but
 does not necessarily have to resolve to an existing process. If there is
 does not necessarily have to resolve to an existing process. If there is
 no process registered with the `To` key, `give_away/2` returns `undefined`,
 no process registered with the `To` key, `give_away/2` returns `undefined`,
 and the `From` key is effectively unregistered.
 and the `From` key is effectively unregistered.
 
 
+
+
 It is allowed to give away a key to oneself, but of course, this operation
 It is allowed to give away a key to oneself, but of course, this operation
-will have no effect.Fails with `badarg` if the calling process does not have a `From` key
+will have no effect.
+
+Fails with `badarg` if the calling process does not have a `From` key
 registered.<a name="goodbye-0"></a>
 registered.<a name="goodbye-0"></a>
 
 
 ###goodbye/0##
 ###goodbye/0##
 
 
 
 
-
-
 <pre>goodbye() -&gt; ok</pre>
 <pre>goodbye() -&gt; ok</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
-
-
 Unregister all items of the calling process and inform gproc
 Unregister all items of the calling process and inform gproc
-to forget about the calling process.This function is more efficient than letting gproc perform these
+to forget about the calling process.
+
+This function is more efficient than letting gproc perform these
 cleanup operations.<a name="i-0"></a>
 cleanup operations.<a name="i-0"></a>
 
 
 ###i/0##
 ###i/0##
 
 
 
 
-
-
 <pre>i() -&gt; ok</pre>
 <pre>i() -&gt; ok</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Similar to the built-in shell command `i()` but inserts information
 Similar to the built-in shell command `i()` but inserts information
 about names and properties registered in Gproc, where applicable.<a name="info-1"></a>
 about names and properties registered in Gproc, where applicable.<a name="info-1"></a>
 
 
 ###info/1##
 ###info/1##
 
 
 
 
-
-
 <pre>info(Pid::pid()) -&gt; ProcessInfo</pre>
 <pre>info(Pid::pid()) -&gt; ProcessInfo</pre>
 <ul class="definitions"><li><pre>ProcessInfo = [{gproc, [{Key, Value}]} | ProcessInfo]</pre></li></ul>
 <ul class="definitions"><li><pre>ProcessInfo = [{gproc, [{Key, Value}]} | ProcessInfo]</pre></li></ul>
 
 
 
 
 
 
+Similar to `process_info(Pid)` but with additional gproc info.
 
 
-
-Similar to `process_info(Pid)` but with additional gproc info.Returns the same information as process_info(Pid), but with the
+Returns the same information as process_info(Pid), but with the
 addition of a `gproc` information item, containing the `{Key,Value}`
 addition of a `gproc` information item, containing the `{Key,Value}`
 pairs registered to the process.<a name="info-2"></a>
 pairs registered to the process.<a name="info-2"></a>
 
 
 ###info/2##
 ###info/2##
 
 
 
 
-
-
 <pre>info(Pid::pid(), Item::atom()) -&gt; {Item, Info}</pre>
 <pre>info(Pid::pid(), Item::atom()) -&gt; {Item, Info}</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Similar to process_info(Pid, Item), but with additional gproc info.
 
 
-
-Similar to process_info(Pid, Item), but with additional gproc info.For `Item = gproc`, this function returns a list of `{Key, Value}` pairs
+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
 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>
 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/1##
 
 
 
 
-
-
 <pre>last(Context::<a href="#type-context">context()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <pre>last(Context::<a href="#type-context">context()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Behaves as ets:last(Tab) for a given type of registration object.
 
 
-
-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).
+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>
 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/1##
 
 
 
 
-
-
 <pre>lookup_global_aggr_counter(Name::any()) -&gt; integer()</pre>
 <pre>lookup_global_aggr_counter(Name::any()) -&gt; integer()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`where({a, g, Name})`](#where-1).
 Equivalent to [`where({a, g, Name})`](#where-1).
 
 
 Lookup a global (unique) aggregated counter and returns its value.
 Lookup a global (unique) aggregated counter and returns its value.
@@ -677,14 +607,10 @@ Fails if there is no such object.<a name="lookup_global_counters-1"></a>
 ###lookup_global_counters/1##
 ###lookup_global_counters/1##
 
 
 
 
-
-
 <pre>lookup_global_counters(Counter::any()) -&gt; [{pid(), Value::integer()}]</pre>
 <pre>lookup_global_counters(Counter::any()) -&gt; [{pid(), Value::integer()}]</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`lookup_values({c, g, Counter})`](#lookup_values-1).
 Equivalent to [`lookup_values({c, g, Counter})`](#lookup_values-1).
 
 
 Look up all global (non-unique) instances of a given Counter.
 Look up all global (non-unique) instances of a given Counter.
@@ -693,14 +619,10 @@ Returns a list of {Pid, Value} tuples for all matching objects.<a name="lookup_g
 ###lookup_global_name/1##
 ###lookup_global_name/1##
 
 
 
 
-
-
 <pre>lookup_global_name(Name::any()) -&gt; pid()</pre>
 <pre>lookup_global_name(Name::any()) -&gt; pid()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`where({n, g, Name})`](#where-1).
 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 a global unique name. Fails if there is no such name.<a name="lookup_global_properties-1"></a>
@@ -708,14 +630,10 @@ Lookup a global unique name. Fails if there is no such name.<a name="lookup_glob
 ###lookup_global_properties/1##
 ###lookup_global_properties/1##
 
 
 
 
-
-
 <pre>lookup_global_properties(Property::any()) -&gt; [{pid(), Value}]</pre>
 <pre>lookup_global_properties(Property::any()) -&gt; [{pid(), Value}]</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`lookup_values({p, g, Property})`](#lookup_values-1).
 Equivalent to [`lookup_values({p, g, Property})`](#lookup_values-1).
 
 
 Look up all global (non-unique) instances of a given Property.
 Look up all global (non-unique) instances of a given Property.
@@ -724,14 +642,10 @@ Returns a list of {Pid, Value} tuples for all matching objects.<a name="lookup_l
 ###lookup_local_aggr_counter/1##
 ###lookup_local_aggr_counter/1##
 
 
 
 
-
-
 <pre>lookup_local_aggr_counter(Name::any()) -&gt; integer()</pre>
 <pre>lookup_local_aggr_counter(Name::any()) -&gt; integer()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`where({a, l, Name})`](#where-1).
 Equivalent to [`where({a, l, Name})`](#where-1).
 
 
 Lookup a local (unique) aggregated counter and returns its value.
 Lookup a local (unique) aggregated counter and returns its value.
@@ -740,14 +654,10 @@ Fails if there is no such object.<a name="lookup_local_counters-1"></a>
 ###lookup_local_counters/1##
 ###lookup_local_counters/1##
 
 
 
 
-
-
 <pre>lookup_local_counters(Counter::any()) -&gt; [{pid(), Value::integer()}]</pre>
 <pre>lookup_local_counters(Counter::any()) -&gt; [{pid(), Value::integer()}]</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`lookup_values({c, l, Counter})`](#lookup_values-1).
 Equivalent to [`lookup_values({c, l, Counter})`](#lookup_values-1).
 
 
 Look up all local (non-unique) instances of a given Counter.
 Look up all local (non-unique) instances of a given Counter.
@@ -756,14 +666,10 @@ Returns a list of {Pid, Value} tuples for all matching objects.<a name="lookup_l
 ###lookup_local_name/1##
 ###lookup_local_name/1##
 
 
 
 
-
-
 <pre>lookup_local_name(Name::any()) -&gt; pid()</pre>
 <pre>lookup_local_name(Name::any()) -&gt; pid()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`where({n, l, Name})`](#where-1).
 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 a local unique name. Fails if there is no such name.<a name="lookup_local_properties-1"></a>
@@ -771,14 +677,10 @@ Lookup a local unique name. Fails if there is no such name.<a name="lookup_local
 ###lookup_local_properties/1##
 ###lookup_local_properties/1##
 
 
 
 
-
-
 <pre>lookup_local_properties(Property::any()) -&gt; [{pid(), Value}]</pre>
 <pre>lookup_local_properties(Property::any()) -&gt; [{pid(), Value}]</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`lookup_values({p, l, Property})`](#lookup_values-1).
 Equivalent to [`lookup_values({p, l, Property})`](#lookup_values-1).
 
 
 Look up all local (non-unique) instances of a given Property.
 Look up all local (non-unique) instances of a given Property.
@@ -787,87 +689,71 @@ Returns a list of {Pid, Value} tuples for all matching objects.<a name="lookup_p
 ###lookup_pid/1##
 ###lookup_pid/1##
 
 
 
 
-
-
 <pre>lookup_pid(Key) -&gt; Pid</pre>
 <pre>lookup_pid(Key) -&gt; Pid</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Lookup the Pid stored with a key.
 Lookup the Pid stored with a key.
 <a name="lookup_pids-1"></a>
 <a name="lookup_pids-1"></a>
 
 
 ###lookup_pids/1##
 ###lookup_pids/1##
 
 
 
 
-
-
 <pre>lookup_pids(Key::<a href="#type-key">key()</a>) -> [pid()]</pre>
 <pre>lookup_pids(Key::<a href="#type-key">key()</a>) -> [pid()]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Returns a list of pids with the published key Key
 
 
-
-Returns a list of pids with the published key KeyIf the type of registration entry is either name or aggregated counter,
+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.
 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_value-1"></a>
 For non-unique types, the return value can be a list of any length.<a name="lookup_value-1"></a>
 
 
 ###lookup_value/1##
 ###lookup_value/1##
 
 
 
 
-
-
 <pre>lookup_value(Key) -&gt; Value</pre>
 <pre>lookup_value(Key) -&gt; Value</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Lookup the value stored with a key.
 Lookup the value stored with a key.
 <a name="lookup_values-1"></a>
 <a name="lookup_values-1"></a>
 
 
 ###lookup_values/1##
 ###lookup_values/1##
 
 
 
 
-
-
 <pre>lookup_values(Key::<a href="#type-key">key()</a>) -> [{pid(), Value}]</pre>
 <pre>lookup_values(Key::<a href="#type-key">key()</a>) -> [{pid(), Value}]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Retrieve the `{Pid,Value}` pairs corresponding to Key.
 
 
-
-Retrieve the `{Pid,Value}` pairs corresponding to Key.Key refer to any type of registry object. If it refers to a unique
+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 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="monitor-1"></a>
 object, the return value can be a list of any length.<a name="monitor-1"></a>
 
 
 ###monitor/1##
 ###monitor/1##
 
 
 
 
-
-
 <pre>monitor(Key::<a href="#type-key">key()</a>) -> reference()</pre>
 <pre>monitor(Key::<a href="#type-key">key()</a>) -> reference()</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
-
-
 monitor a registered name
 monitor a registered name
 This function works much like erlang:monitor(process, Pid), but monitors
 This function works much like erlang:monitor(process, Pid), but monitors
 a unique name registered via gproc. A message, `{gproc, unreg, Ref, Key}`
 a unique name registered via gproc. A message, `{gproc, unreg, Ref, Key}`
 will be sent to the requesting process, if the name is unregistered or
 will be sent to the requesting process, if the name is unregistered or
-the registered process dies.If the name is not yet registered, the same message is sent immediately.<a name="mreg-3"></a>
-
-###mreg/3##
+the registered process dies.
 
 
+If the name is not yet registered, the same message is sent immediately.<a name="mreg-3"></a>
 
 
+###mreg/3##
 
 
 
 
 <pre>mreg(T::<a href="#type-type">type()</a>, C::<a href="#type-scope">scope()</a>, KVL::[{Key::any(), Value::any()}]) -> true</pre>
 <pre>mreg(T::<a href="#type-type">type()</a>, C::<a href="#type-scope">scope()</a>, KVL::[{Key::any(), Value::any()}]) -> true</pre>
@@ -876,39 +762,33 @@ the registered process dies.If the name is not yet registered, the same message
 
 
 
 
 
 
+Register multiple {Key,Value} pairs of a given type and scope.
 
 
-
-Register multiple {Key,Value} pairs of a given type and scope.This function is more efficient than calling [`reg/2`](#reg-2) repeatedly.
+This function is more efficient than calling [`reg/2`](#reg-2) repeatedly.
 It is also atomic in regard to unique names; either all names are registered
 It is also atomic in regard to unique names; either all names are registered
 or none are.<a name="munreg-3"></a>
 or none are.<a name="munreg-3"></a>
 
 
 ###munreg/3##
 ###munreg/3##
 
 
 
 
-
-
 <pre>munreg(T::<a href="#type-type">type()</a>, C::<a href="#type-scope">scope()</a>, L::[Key::any()]) -> true</pre>
 <pre>munreg(T::<a href="#type-type">type()</a>, C::<a href="#type-scope">scope()</a>, L::[Key::any()]) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Unregister multiple Key items of a given type and scope.
 
 
-
-Unregister multiple Key items of a given type and scope.This function is usually more efficient than calling [`unreg/1`](#unreg-1)
+This function is usually more efficient than calling [`unreg/1`](#unreg-1)
 repeatedly.<a name="nb_wait-1"></a>
 repeatedly.<a name="nb_wait-1"></a>
 
 
 ###nb_wait/1##
 ###nb_wait/1##
 
 
 
 
-
-
 <pre>nb_wait(Key::<a href="#type-key">key()</a>) -> Ref</pre>
 <pre>nb_wait(Key::<a href="#type-key">key()</a>) -> Ref</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Wait for a local name to be registered.
 Wait for a local name to be registered.
 The caller can expect to receive a message,
 The caller can expect to receive a message,
 {gproc, Ref, registered, {Key, Pid, Value}}, once the name is registered.<a name="next-2"></a>
 {gproc, Ref, registered, {Key, Pid, Value}}, once the name is registered.<a name="next-2"></a>
@@ -916,128 +796,110 @@ The caller can expect to receive a message,
 ###next/2##
 ###next/2##
 
 
 
 
-
-
 <pre>next(Context::<a href="#type-context">context()</a>, Key::<a href="#type-key">key()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <pre>next(Context::<a href="#type-context">context()</a>, Key::<a href="#type-key">key()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Behaves as ets:next(Tab,Key) for a given type of registration object.
 
 
-
-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).
+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>
 The registry behaves as an ordered_set table.<a name="prev-2"></a>
 
 
 ###prev/2##
 ###prev/2##
 
 
 
 
-
-
 <pre>prev(Context::<a href="#type-context">context()</a>, Key::<a href="#type-key">key()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <pre>prev(Context::<a href="#type-context">context()</a>, Key::<a href="#type-key">key()</a>) -> <a href="#type-key">key()</a> | '$end_of_table'</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Behaves as ets:prev(Tab,Key) for a given type of registration object.
 
 
-
-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).
+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>
 The registry behaves as an ordered_set table.<a name="reg-1"></a>
 
 
 ###reg/1##
 ###reg/1##
 
 
 
 
-
-
 <pre>reg(Key::<a href="#type-key">key()</a>) -> true</pre>
 <pre>reg(Key::<a href="#type-key">key()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`reg(Key, default(Key))`](#reg-2).<a name="reg-2"></a>
 Equivalent to [`reg(Key, default(Key))`](#reg-2).<a name="reg-2"></a>
 
 
 ###reg/2##
 ###reg/2##
 
 
 
 
-
-
 <pre>reg(Key::<a href="#type-key">key()</a>, Value) -> true</pre>
 <pre>reg(Key::<a href="#type-key">key()</a>, Value) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Register a name or property for the current process
 
 
-
-Register a name or property for the current process<a name="reg_shared-1"></a>
+<a name="reg_shared-1"></a>
 
 
 ###reg_shared/1##
 ###reg_shared/1##
 
 
 
 
-
-
 <pre>reg_shared(Key::<a href="#type-key">key()</a>) -> true</pre>
 <pre>reg_shared(Key::<a href="#type-key">key()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Register a resource, but don't tie it to a particular process.
 
 
-
-Register a resource, but don't tie it to a particular process.`reg_shared({c,l,C}) -> reg_shared({c,l,C}, 0).`
+`reg_shared({c,l,C}) -> reg_shared({c,l,C}, 0).`
 `reg_shared({a,l,A}) -> reg_shared({a,l,A}, undefined).`<a name="reg_shared-2"></a>
 `reg_shared({a,l,A}) -> reg_shared({a,l,A}, undefined).`<a name="reg_shared-2"></a>
 
 
 ###reg_shared/2##
 ###reg_shared/2##
 
 
 
 
-
-
 <pre>reg_shared(Key::<a href="#type-key">key()</a>, Value) -> true</pre>
 <pre>reg_shared(Key::<a href="#type-key">key()</a>, Value) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Register a resource, but don't tie it to a particular process.
 
 
 
 
-Register a resource, but don't tie it to a particular process.
 
 
 Shared resources are all unique. They remain until explicitly unregistered
 Shared resources are all unique. They remain until explicitly unregistered
 (using [`unreg_shared/1`](#unreg_shared-1)). The types of shared resources currently
 (using [`unreg_shared/1`](#unreg_shared-1)). The types of shared resources currently
 supported are `counter` and `aggregated counter`. In listings and query
 supported are `counter` and `aggregated counter`. In listings and query
 results, shared resources appear as other similar resources, except that
 results, shared resources appear as other similar resources, except that
 `Pid == shared`. To wit, update_counter({c,l,myCounter}, 1, shared) would
 `Pid == shared`. To wit, update_counter({c,l,myCounter}, 1, shared) would
-increment the shared counter `myCounter` with 1, provided it exists.A shared aggregated counter will track updates in exactly the same way as
+increment the shared counter `myCounter` with 1, provided it exists.
+
+A shared aggregated counter will track updates in exactly the same way as
 an aggregated counter which is owned by a process.<a name="register_name-2"></a>
 an aggregated counter which is owned by a process.<a name="register_name-2"></a>
 
 
 ###register_name/2##
 ###register_name/2##
 
 
 
 
-
-
 <pre>register_name(Name::<a href="#type-key">key()</a>, Pid::pid()) -> yes | no</pre>
 <pre>register_name(Name::<a href="#type-key">key()</a>, Pid::pid()) -> yes | no</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Behaviour support callback<a name="reset_counter-1"></a>
 Behaviour support callback<a name="reset_counter-1"></a>
 
 
 ###reset_counter/1##
 ###reset_counter/1##
 
 
 
 
-
-
 <pre>reset_counter(Key) -&gt; {ValueBefore, ValueAfter}</pre>
 <pre>reset_counter(Key) -&gt; {ValueBefore, ValueAfter}</pre>
 <ul class="definitions"><li><pre>Key = {c, Scope, Name}</pre></li><li><pre>Scope = l | g</pre></li><li><pre>ValueBefore = integer()</pre></li><li><pre>ValueAfter = integer()</pre></li></ul>
 <ul class="definitions"><li><pre>Key = {c, Scope, Name}</pre></li><li><pre>Scope = l | g</pre></li><li><pre>ValueBefore = integer()</pre></li><li><pre>ValueAfter = integer()</pre></li></ul>
 
 
 
 
 
 
+Reads and resets a counter in a "thread-safe" way
 
 
-
-Reads and resets a counter in a "thread-safe" wayThis function reads the current value of a counter and then resets it to its
+This function reads the current value of a counter and then resets it to its
 initial value. The reset operation is done using [`update_counter/2`](#update_counter-2),
 initial value. The reset operation is done using [`update_counter/2`](#update_counter-2),
 which allows for concurrent calls to [`update_counter/2`](#update_counter-2) without losing
 which allows for concurrent calls to [`update_counter/2`](#update_counter-2) without losing
 updates. Aggregated counters are updated accordingly.<a name="select-1"></a>
 updates. Aggregated counters are updated accordingly.<a name="select-1"></a>
@@ -1045,28 +907,32 @@ updates. Aggregated counters are updated accordingly.<a name="select-1"></a>
 ###select/1##
 ###select/1##
 
 
 
 
-
-
 <pre>select(Continuation::Arg) -&gt; [Match] | {[Match], Continuation} | '$end_of_table'</pre>
 <pre>select(Continuation::Arg) -&gt; [Match] | {[Match], Continuation} | '$end_of_table'</pre>
 <ul class="definitions"><li><pre>Arg = Continuation | <a href="#type-sel_pattern">sel_pattern()</a></pre></li><li><pre>Match = {Key, Pid, Value}</pre></li></ul>
 <ul class="definitions"><li><pre>Arg = Continuation | <a href="#type-sel_pattern">sel_pattern()</a></pre></li><li><pre>Match = {Key, Pid, Value}</pre></li></ul>
 
 
 
 
 
 
+Perform a select operation on the process registry
 
 
 
 
-Perform a select operation on the process registry
 
 
 When Arg = Contination, resume a gproc:select/1 operation
 When Arg = Contination, resume a gproc:select/1 operation
 (see [ets:select/1](http://www.erlang.org/doc/man/ets.html#select-1)
 (see [ets:select/1](http://www.erlang.org/doc/man/ets.html#select-1)
 
 
+
+
 When Arg = <code><a href="#type-sel_pattern">sel_pattern()</a></code>, this function executes a select operation,
 When Arg = <code><a href="#type-sel_pattern">sel_pattern()</a></code>, this function executes a select operation,
 emulating ets:select/1
 emulating ets:select/1
 
 
+
+
 [`select/2`](#select-2) offers the opportunity to narrow the search
 [`select/2`](#select-2) offers the opportunity to narrow the search
 (by limiting to only global or local scope, or a single type of object).
 (by limiting to only global or local scope, or a single type of object).
 When only a pattern as single argument is given, both global and local scope,
 When only a pattern as single argument is given, both global and local scope,
 as well as all types of object can be searched. Note that the pattern may
 as well as all types of object can be searched. Note that the pattern may
-still limit the select operation so that scanning the entire table is avoided.The physical representation in the registry may differ from the above,
+still limit the select operation so that scanning the entire table is avoided.
+
+The physical representation in the registry may differ from the above,
 but the select patterns are transformed appropriately. The logical
 but the select patterns are transformed appropriately. The logical
 representation for the gproc select operations is given by
 representation for the gproc select operations is given by
 <code><a href="#type-headpat">headpat()</a></code>.<a name="select-2"></a>
 <code><a href="#type-headpat">headpat()</a></code>.<a name="select-2"></a>
@@ -1074,20 +940,20 @@ representation for the gproc select operations is given by
 ###select/2##
 ###select/2##
 
 
 
 
-
-
 <pre>select(Context::<a href="#type-context">context()</a>, Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -> [{Key, Pid, Value}]</pre>
 <pre>select(Context::<a href="#type-context">context()</a>, Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -> [{Key, Pid, Value}]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Perform a select operation with limited context on the process registry
 
 
 
 
-Perform a select operation with limited context on the process registry
 
 
 The physical representation in the registry may differ from the above,
 The physical representation in the registry may differ from the above,
-but the select patterns are transformed appropriately.Note that limiting the context is just a convenience function, allowing you
+but the select patterns are transformed appropriately.
+
+Note that limiting the context is just a convenience function, allowing you
 to write a simpler select pattern and still avoid searching the entire
 to write a simpler select pattern and still avoid searching the entire
 registry. Whenever variables are used in the head pattern, this will result
 registry. Whenever variables are used in the head pattern, this will result
 in a wider scan, even if the values are restricted through a guard (e.g.
 in a wider scan, even if the values are restricted through a guard (e.g.
@@ -1099,61 +965,51 @@ that the scan is limited.<a name="select-3"></a>
 ###select/3##
 ###select/3##
 
 
 
 
-
-
 <pre>select(Context::<a href="#type-context">context()</a>, Pat::<a href="#type-sel_patten">sel_patten()</a>, Limit::integer()) -> {[Match], Continuation} | '$end_of_table'</pre>
 <pre>select(Context::<a href="#type-context">context()</a>, Pat::<a href="#type-sel_patten">sel_patten()</a>, Limit::integer()) -> {[Match], Continuation} | '$end_of_table'</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Like [`select/2`](#select-2) but returns Limit objects at a time.
 
 
-
-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="select_count-1"></a>
+See [`http://www.erlang.org/doc/man/ets.html#select-3`](http://www.erlang.org/doc/man/ets.html#select-3).<a name="select_count-1"></a>
 
 
 ###select_count/1##
 ###select_count/1##
 
 
 
 
-
-
 <pre>select_count(Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -> [<a href="#type-sel_object">sel_object()</a>]</pre>
 <pre>select_count(Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -> [<a href="#type-sel_object">sel_object()</a>]</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`select_count(all, Pat)`](#select_count-2).<a name="select_count-2"></a>
 Equivalent to [`select_count(all, Pat)`](#select_count-2).<a name="select_count-2"></a>
 
 
 ###select_count/2##
 ###select_count/2##
 
 
 
 
-
-
 <pre>select_count(Context::<a href="#type-context">context()</a>, Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -> [{Key, Pid, Value}]</pre>
 <pre>select_count(Context::<a href="#type-context">context()</a>, Pat::<a href="#type-sel_pattern">sel_pattern()</a>) -> [{Key, Pid, Value}]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Perform a select_count operation on the process registry.
 
 
-
-Perform a select_count operation on the process registry.The physical representation in the registry may differ from the above,
+The physical representation in the registry may differ from the above,
 but the select patterns are transformed appropriately.<a name="send-2"></a>
 but the select patterns are transformed appropriately.<a name="send-2"></a>
 
 
 ###send/2##
 ###send/2##
 
 
 
 
-
-
 <pre>send(Key::<a href="#type-key">key()</a>, Msg::any()) -> Msg</pre>
 <pre>send(Key::<a href="#type-key">key()</a>, Msg::any()) -> Msg</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Sends a message to the process, or processes, corresponding to Key.
 
 
-
-Sends a message to the process, or processes, corresponding to Key.If Key belongs to a unique object (name or aggregated counter), this
+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
 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
 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_env-5"></a>
 property), Msg will be send to all processes that have such an object.<a name="set_env-5"></a>
@@ -1161,21 +1017,21 @@ property), Msg will be send to all processes that have such an object.<a name="s
 ###set_env/5##
 ###set_env/5##
 
 
 
 
-
-
 <pre>set_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom(), Value::term(), Strategy) -> Value</pre>
 <pre>set_env(Scope::<a href="#type-scope">scope()</a>, App::atom(), Key::atom(), Value::term(), Strategy) -> Value</pre>
 <ul class="definitions"><li><pre>Strategy = [Alternative]</pre></li><li><pre>Alternative = app_env | os_env | {os_env, VAR} | {mnesia, ActivityType, Oid, Pos}</pre></li></ul>
 <ul class="definitions"><li><pre>Strategy = [Alternative]</pre></li><li><pre>Alternative = app_env | os_env | {os_env, VAR} | {mnesia, ActivityType, Oid, Pos}</pre></li></ul>
 
 
 
 
 
 
+Updates the cached value as well as underlying environment.
 
 
 
 
-Updates the cached value as well as underlying environment.
 
 
 This function should be exercised with caution, as it affects the larger
 This function should be exercised with caution, as it affects the larger
 environment outside gproc. This function modifies the cached value, and then
 environment outside gproc. This function modifies the cached value, and then
 proceeds to update the underlying environment (OS environment variable or
 proceeds to update the underlying environment (OS environment variable or
-application environment variable).When the `mnesia` alternative is used, gproc will try to update any existing
+application environment variable).
+
+When the `mnesia` alternative is used, gproc will try to update any existing
 object, changing only the `Pos` position. If no such object exists, it will
 object, changing only the `Pos` position. If no such object exists, it will
 create a new object, setting any other attributes (except `Pos` and the key)
 create a new object, setting any other attributes (except `Pos` and the key)
 to `undefined`.<a name="set_value-2"></a>
 to `undefined`.<a name="set_value-2"></a>
@@ -1183,75 +1039,61 @@ to `undefined`.<a name="set_value-2"></a>
 ###set_value/2##
 ###set_value/2##
 
 
 
 
-
-
 <pre>set_value(Key::<a href="#type-key">key()</a>, Value) -> true</pre>
 <pre>set_value(Key::<a href="#type-key">key()</a>, Value) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Sets the value of the registeration entry given by Key
 
 
 
 
-Sets the value of the registeration entry given by Key
 
 
 Key is assumed to exist and belong to the calling process.
 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
+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>
 it must be an integer.<a name="start_link-0"></a>
 
 
 ###start_link/0##
 ###start_link/0##
 
 
 
 
-
-
 <pre>start_link() -&gt; {ok, pid()}</pre>
 <pre>start_link() -&gt; {ok, pid()}</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Starts the gproc server.
 
 
-
-Starts the gproc server.This function is intended to be called from gproc_sup, as part of
+This function is intended to be called from gproc_sup, as part of
 starting the gproc application.<a name="table-0"></a>
 starting the gproc application.<a name="table-0"></a>
 
 
 ###table/0##
 ###table/0##
 
 
 
 
-
-
 <pre>table() -&gt; any()</pre>
 <pre>table() -&gt; any()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`table({all, all})`](#table-1).<a name="table-1"></a>
 Equivalent to [`table({all, all})`](#table-1).<a name="table-1"></a>
 
 
 ###table/1##
 ###table/1##
 
 
 
 
-
-
 <pre>table(Context::<a href="#type-context">context()</a>) -> any()</pre>
 <pre>table(Context::<a href="#type-context">context()</a>) -> any()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Equivalent to [`table(Context, [])`](#table-2).<a name="table-2"></a>
 Equivalent to [`table(Context, [])`](#table-2).<a name="table-2"></a>
 
 
 ###table/2##
 ###table/2##
 
 
 
 
-
-
 <pre>table(Context::<a href="#type-context">context()</a>, Opts) -> any()</pre>
 <pre>table(Context::<a href="#type-context">context()</a>, Opts) -> any()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 QLC table generator for the gproc registry.
 QLC table generator for the gproc registry.
 Context specifies which subset of the registry should be queried.
 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>
 See [`http://www.erlang.org/doc/man/qlc.html`](http://www.erlang.org/doc/man/qlc.html).<a name="unreg-1"></a>
@@ -1259,83 +1101,69 @@ See [`http://www.erlang.org/doc/man/qlc.html`](http://www.erlang.org/doc/man/qlc
 ###unreg/1##
 ###unreg/1##
 
 
 
 
-
-
 <pre>unreg(Key::<a href="#type-key">key()</a>) -> true</pre>
 <pre>unreg(Key::<a href="#type-key">key()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Unregister a name or property.<a name="unreg_shared-1"></a>
 Unregister a name or property.<a name="unreg_shared-1"></a>
 
 
 ###unreg_shared/1##
 ###unreg_shared/1##
 
 
 
 
-
-
 <pre>unreg_shared(Key::<a href="#type-key">key()</a>) -> true</pre>
 <pre>unreg_shared(Key::<a href="#type-key">key()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Unregister a shared resource.<a name="unregister_name-1"></a>
 Unregister a shared resource.<a name="unregister_name-1"></a>
 
 
 ###unregister_name/1##
 ###unregister_name/1##
 
 
 
 
-
-
 `unregister_name(Key) -> any()`
 `unregister_name(Key) -> any()`
 
 
-
-
 Equivalent to `unreg / 1`.<a name="update_counter-2"></a>
 Equivalent to `unreg / 1`.<a name="update_counter-2"></a>
 
 
 ###update_counter/2##
 ###update_counter/2##
 
 
 
 
-
-
 <pre>update_counter(Key::<a href="#type-key">key()</a>, Incr::<a href="#type-increment">increment()</a>) -> integer()</pre>
 <pre>update_counter(Key::<a href="#type-key">key()</a>, Incr::<a href="#type-increment">increment()</a>) -> integer()</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Updates the counter registered as Key for the current process.
 
 
 
 
-Updates the counter registered as Key for the current process.
 
 
 This function works almost exactly like ets:update_counter/3
 This function works almost exactly 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
 (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.Aggregated counters with the same name will be updated automatically.
+will fail if the type of object referred to by Key is not a counter.
+
+Aggregated counters with the same name will be updated automatically.
 The `UpdateOp` patterns are the same as for `ets:update_counter/3`, except
 The `UpdateOp` patterns are the same as for `ets:update_counter/3`, except
 that the position is omitted; in gproc, the value position is always `3`.<a name="update_counters-2"></a>
 that the position is omitted; in gproc, the value position is always `3`.<a name="update_counters-2"></a>
 
 
 ###update_counters/2##
 ###update_counters/2##
 
 
 
 
-
-
 <pre>update_counters(X1::<a href="#type-scope">scope()</a>, Cs::[{<a href="#type-key">key()</a>, pid(), <a href="#type-increment">increment()</a>}]) -> [{<a href="#type-key">key()</a>, pid(), integer()}]</pre>
 <pre>update_counters(X1::<a href="#type-scope">scope()</a>, Cs::[{<a href="#type-key">key()</a>, pid(), <a href="#type-increment">increment()</a>}]) -> [{<a href="#type-key">key()</a>, pid(), integer()}]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Update a list of counters
 
 
 
 
-Update a list of counters
 
 
 This function is not atomic, except (in a sense) for global counters. For local counters,
 This function is not atomic, except (in a sense) for global counters. For local counters,
 it is more of a convenience function. For global counters, it is much more efficient
 it is more of a convenience function. For global counters, it is much more efficient
-than calling `gproc:update_counter/2` for each individual counter.The return value is the corresponding list of `[{Counter, Pid, NewValue}]`.<a name="update_shared_counter-2"></a>
-
-###update_shared_counter/2##
+than calling `gproc:update_counter/2` for each individual counter.
 
 
+The return value is the corresponding list of `[{Counter, Pid, NewValue}]`.<a name="update_shared_counter-2"></a>
 
 
+###update_shared_counter/2##
 
 
 
 
 <pre>update_shared_counter(Key::<a href="#type-key">key()</a>, Incr) -> integer() | [integer()]</pre>
 <pre>update_shared_counter(Key::<a href="#type-key">key()</a>, Incr) -> integer() | [integer()]</pre>
@@ -1343,40 +1171,36 @@ than calling `gproc:update_counter/2` for each individual counter.The return val
 
 
 
 
 
 
+Updates the shared counter registered as Key.
 
 
 
 
-Updates the shared counter registered as Key.
 
 
 This function works almost exactly like ets:update_counter/3
 This function works almost exactly 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
 (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.Aggregated counters with the same name will be updated automatically.
+will fail if the type of object referred to by Key is not a counter.
+
+Aggregated counters with the same name will be updated automatically.
 The `UpdateOp` patterns are the same as for `ets:update_counter/3`, except
 The `UpdateOp` patterns are the same as for `ets:update_counter/3`, except
 that the position is omitted; in gproc, the value position is always `3`.<a name="where-1"></a>
 that the position is omitted; in gproc, the value position is always `3`.<a name="where-1"></a>
 
 
 ###where/1##
 ###where/1##
 
 
 
 
-
-
 <pre>where(Key::<a href="#type-key">key()</a>) -> pid()</pre>
 <pre>where(Key::<a href="#type-key">key()</a>) -> pid()</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Returns the pid registered as Key
 
 
-
-Returns the pid registered as KeyThe type of registration entry must be either name or aggregated counter.
+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
 Otherwise this function will exit. Use [`lookup_pids/1`](#lookup_pids-1) in these
 cases.<a name="whereis_name-1"></a>
 cases.<a name="whereis_name-1"></a>
 
 
 ###whereis_name/1##
 ###whereis_name/1##
 
 
 
 
-
-
 `whereis_name(Key) -> any()`
 `whereis_name(Key) -> any()`
 
 
-
-
 Equivalent to `where / 1`.
 Equivalent to `where / 1`.

+ 0 - 10
doc/gproc_app.md

@@ -5,10 +5,6 @@
 * [Function Details](#functions)
 * [Function Details](#functions)
 
 
 
 
-
-
-
-
 __Behaviours:__ [`application`](application.md).<a name="index"></a>
 __Behaviours:__ [`application`](application.md).<a name="index"></a>
 
 
 ##Function Index##
 ##Function Index##
@@ -26,8 +22,6 @@ __Behaviours:__ [`application`](application.md).<a name="index"></a>
 ###start/0##
 ###start/0##
 
 
 
 
-
-
 `start() -> any()`
 `start() -> any()`
 
 
 <a name="start-2"></a>
 <a name="start-2"></a>
@@ -35,8 +29,6 @@ __Behaviours:__ [`application`](application.md).<a name="index"></a>
 ###start/2##
 ###start/2##
 
 
 
 
-
-
 `start(Type, StartArgs) -> any()`
 `start(Type, StartArgs) -> any()`
 
 
 <a name="stop-1"></a>
 <a name="stop-1"></a>
@@ -44,7 +36,5 @@ __Behaviours:__ [`application`](application.md).<a name="index"></a>
 ###stop/1##
 ###stop/1##
 
 
 
 
-
-
 `stop(State) -> any()`
 `stop(State) -> any()`
 
 

+ 3 - 73
doc/gproc_dist.md

@@ -8,9 +8,7 @@
 
 
 Extended process registry.
 Extended process registry.
 
 
-
-
-__Behaviours:__ [`gen_leader`](/Users/uwiger/FL/git/gen_leader/doc/gen_leader.md).
+__Behaviours:__ [`gen_leader`](/Users/uwiger/tmp/rebar_edoc/gproc/deps/gen_leader/doc/gen_leader.md).
 
 
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 
 
@@ -42,8 +40,6 @@ Scope = l | g (global or local).</td></tr><tr><td valign="top"><a href="#reg_sha
 ###code_change/4##
 ###code_change/4##
 
 
 
 
-
-
 `code_change(FromVsn, S, Extra, E) -> any()`
 `code_change(FromVsn, S, Extra, E) -> any()`
 
 
 <a name="elected-2"></a>
 <a name="elected-2"></a>
@@ -51,8 +47,6 @@ Scope = l | g (global or local).</td></tr><tr><td valign="top"><a href="#reg_sha
 ###elected/2##
 ###elected/2##
 
 
 
 
-
-
 `elected(S, E) -> any()`
 `elected(S, E) -> any()`
 
 
 <a name="elected-3"></a>
 <a name="elected-3"></a>
@@ -60,8 +54,6 @@ Scope = l | g (global or local).</td></tr><tr><td valign="top"><a href="#reg_sha
 ###elected/3##
 ###elected/3##
 
 
 
 
-
-
 `elected(S, E, Node) -> any()`
 `elected(S, E, Node) -> any()`
 
 
 <a name="from_leader-3"></a>
 <a name="from_leader-3"></a>
@@ -69,8 +61,6 @@ Scope = l | g (global or local).</td></tr><tr><td valign="top"><a href="#reg_sha
 ###from_leader/3##
 ###from_leader/3##
 
 
 
 
-
-
 `from_leader(Ops, S, E) -> any()`
 `from_leader(Ops, S, E) -> any()`
 
 
 <a name="get_leader-0"></a>
 <a name="get_leader-0"></a>
@@ -78,21 +68,15 @@ Scope = l | g (global or local).</td></tr><tr><td valign="top"><a href="#reg_sha
 ###get_leader/0##
 ###get_leader/0##
 
 
 
 
-
-
 <pre>get_leader() -&gt; node()</pre>
 <pre>get_leader() -&gt; node()</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Returns the node of the current gproc leader.<a name="give_away-2"></a>
 Returns the node of the current gproc leader.<a name="give_away-2"></a>
 
 
 ###give_away/2##
 ###give_away/2##
 
 
 
 
-
-
 `give_away(Key, To) -> any()`
 `give_away(Key, To) -> any()`
 
 
 <a name="handle_DOWN-3"></a>
 <a name="handle_DOWN-3"></a>
@@ -100,8 +84,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###handle_DOWN/3##
 ###handle_DOWN/3##
 
 
 
 
-
-
 `handle_DOWN(Node, S, E) -> any()`
 `handle_DOWN(Node, S, E) -> any()`
 
 
 <a name="handle_call-4"></a>
 <a name="handle_call-4"></a>
@@ -109,8 +91,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###handle_call/4##
 ###handle_call/4##
 
 
 
 
-
-
 `handle_call(X1, X2, S, E) -> any()`
 `handle_call(X1, X2, S, E) -> any()`
 
 
 <a name="handle_cast-3"></a>
 <a name="handle_cast-3"></a>
@@ -118,8 +98,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###handle_cast/3##
 ###handle_cast/3##
 
 
 
 
-
-
 `handle_cast(Msg, S, X3) -> any()`
 `handle_cast(Msg, S, X3) -> any()`
 
 
 <a name="handle_info-2"></a>
 <a name="handle_info-2"></a>
@@ -127,8 +105,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###handle_info/2##
 ###handle_info/2##
 
 
 
 
-
-
 `handle_info(X1, S) -> any()`
 `handle_info(X1, S) -> any()`
 
 
 <a name="handle_leader_call-4"></a>
 <a name="handle_leader_call-4"></a>
@@ -136,8 +112,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###handle_leader_call/4##
 ###handle_leader_call/4##
 
 
 
 
-
-
 `handle_leader_call(X1, From, State, E) -> any()`
 `handle_leader_call(X1, From, State, E) -> any()`
 
 
 <a name="handle_leader_cast-3"></a>
 <a name="handle_leader_cast-3"></a>
@@ -145,8 +119,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###handle_leader_cast/3##
 ###handle_leader_cast/3##
 
 
 
 
-
-
 `handle_leader_cast(X1, S, E) -> any()`
 `handle_leader_cast(X1, S, E) -> any()`
 
 
 <a name="init-1"></a>
 <a name="init-1"></a>
@@ -154,8 +126,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###init/1##
 ###init/1##
 
 
 
 
-
-
 `init(Opts) -> any()`
 `init(Opts) -> any()`
 
 
 <a name="leader_call-1"></a>
 <a name="leader_call-1"></a>
@@ -163,8 +133,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###leader_call/1##
 ###leader_call/1##
 
 
 
 
-
-
 `leader_call(Req) -> any()`
 `leader_call(Req) -> any()`
 
 
 <a name="leader_cast-1"></a>
 <a name="leader_cast-1"></a>
@@ -172,8 +140,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###leader_cast/1##
 ###leader_cast/1##
 
 
 
 
-
-
 `leader_cast(Msg) -> any()`
 `leader_cast(Msg) -> any()`
 
 
 <a name="mreg-2"></a>
 <a name="mreg-2"></a>
@@ -181,8 +147,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###mreg/2##
 ###mreg/2##
 
 
 
 
-
-
 `mreg(T, KVL) -> any()`
 `mreg(T, KVL) -> any()`
 
 
 <a name="munreg-2"></a>
 <a name="munreg-2"></a>
@@ -190,8 +154,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###munreg/2##
 ###munreg/2##
 
 
 
 
-
-
 `munreg(T, Keys) -> any()`
 `munreg(T, Keys) -> any()`
 
 
 <a name="reg-1"></a>
 <a name="reg-1"></a>
@@ -199,8 +161,6 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###reg/1##
 ###reg/1##
 
 
 
 
-
-
 `reg(Key) -> any()`
 `reg(Key) -> any()`
 
 
 <a name="reg-2"></a>
 <a name="reg-2"></a>
@@ -208,13 +168,9 @@ Returns the node of the current gproc leader.<a name="give_away-2"></a>
 ###reg/2##
 ###reg/2##
 
 
 
 
-
-
 `reg(Key, Value) -> any()`
 `reg(Key, Value) -> any()`
 
 
 
 
-
-
 Class = n  - unique name
 Class = n  - unique name
 | p  - non-unique property
 | p  - non-unique property
 | c  - counter
 | c  - counter
@@ -224,8 +180,6 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###reg_shared/2##
 ###reg_shared/2##
 
 
 
 
-
-
 `reg_shared(Key, Value) -> any()`
 `reg_shared(Key, Value) -> any()`
 
 
 <a name="reset_counter-1"></a>
 <a name="reset_counter-1"></a>
@@ -233,8 +187,6 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###reset_counter/1##
 ###reset_counter/1##
 
 
 
 
-
-
 `reset_counter(Key) -> any()`
 `reset_counter(Key) -> any()`
 
 
 <a name="set_value-2"></a>
 <a name="set_value-2"></a>
@@ -242,8 +194,6 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###set_value/2##
 ###set_value/2##
 
 
 
 
-
-
 `set_value(Key, Value) -> any()`
 `set_value(Key, Value) -> any()`
 
 
 <a name="start_link-0"></a>
 <a name="start_link-0"></a>
@@ -251,8 +201,6 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###start_link/0##
 ###start_link/0##
 
 
 
 
-
-
 `start_link() -> any()`
 `start_link() -> any()`
 
 
 <a name="start_link-1"></a>
 <a name="start_link-1"></a>
@@ -260,8 +208,6 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###start_link/1##
 ###start_link/1##
 
 
 
 
-
-
 `start_link(Nodes) -> any()`
 `start_link(Nodes) -> any()`
 
 
 <a name="surrendered-3"></a>
 <a name="surrendered-3"></a>
@@ -269,8 +215,6 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###surrendered/3##
 ###surrendered/3##
 
 
 
 
-
-
 `surrendered(S, X2, E) -> any()`
 `surrendered(S, X2, E) -> any()`
 
 
 <a name="sync-0"></a>
 <a name="sync-0"></a>
@@ -278,17 +222,15 @@ Scope = l | g (global or local)<a name="reg_shared-2"></a>
 ###sync/0##
 ###sync/0##
 
 
 
 
-
-
 <pre>sync() -&gt; true</pre>
 <pre>sync() -&gt; true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Synchronize with the gproc leader
 
 
-
-Synchronize with the gproc leaderThis function can be used to ensure that data has been replicated from the
+This function can be used to ensure that data has been replicated from the
 leader to the current node. It does so by asking the leader to ping all
 leader to the current node. It does so by asking the leader to ping all
 live participating nodes. The call will return `true` when all these nodes
 live participating nodes. The call will return `true` when all these nodes
 have either responded or died. In the special case where the leader dies
 have either responded or died. In the special case where the leader dies
@@ -300,8 +242,6 @@ the leader died.)<a name="terminate-2"></a>
 ###terminate/2##
 ###terminate/2##
 
 
 
 
-
-
 `terminate(Reason, S) -> any()`
 `terminate(Reason, S) -> any()`
 
 
 <a name="unreg-1"></a>
 <a name="unreg-1"></a>
@@ -309,8 +249,6 @@ the leader died.)<a name="terminate-2"></a>
 ###unreg/1##
 ###unreg/1##
 
 
 
 
-
-
 `unreg(Key) -> any()`
 `unreg(Key) -> any()`
 
 
 <a name="unreg_shared-1"></a>
 <a name="unreg_shared-1"></a>
@@ -318,8 +256,6 @@ the leader died.)<a name="terminate-2"></a>
 ###unreg_shared/1##
 ###unreg_shared/1##
 
 
 
 
-
-
 `unreg_shared(Key) -> any()`
 `unreg_shared(Key) -> any()`
 
 
 <a name="update_counter-2"></a>
 <a name="update_counter-2"></a>
@@ -327,8 +263,6 @@ the leader died.)<a name="terminate-2"></a>
 ###update_counter/2##
 ###update_counter/2##
 
 
 
 
-
-
 `update_counter(Key, Incr) -> any()`
 `update_counter(Key, Incr) -> any()`
 
 
 <a name="update_counters-1"></a>
 <a name="update_counters-1"></a>
@@ -336,8 +270,6 @@ the leader died.)<a name="terminate-2"></a>
 ###update_counters/1##
 ###update_counters/1##
 
 
 
 
-
-
 `update_counters(List) -> any()`
 `update_counters(List) -> any()`
 
 
 <a name="update_shared_counter-2"></a>
 <a name="update_shared_counter-2"></a>
@@ -345,7 +277,5 @@ the leader died.)<a name="terminate-2"></a>
 ###update_shared_counter/2##
 ###update_shared_counter/2##
 
 
 
 
-
-
 `update_shared_counter(Key, Incr) -> any()`
 `update_shared_counter(Key, Incr) -> any()`
 
 

+ 0 - 6
doc/gproc_info.md

@@ -5,10 +5,6 @@
 * [Function Details](#functions)
 * [Function Details](#functions)
 
 
 
 
-
-
-
-
 __Authors:__ Ulf Wiger ([`ulf.wiger@erlang-solutions.com`](mailto:ulf.wiger@erlang-solutions.com)).<a name="index"></a>
 __Authors:__ Ulf Wiger ([`ulf.wiger@erlang-solutions.com`](mailto:ulf.wiger@erlang-solutions.com)).<a name="index"></a>
 
 
 ##Function Index##
 ##Function Index##
@@ -26,8 +22,6 @@ __Authors:__ Ulf Wiger ([`ulf.wiger@erlang-solutions.com`](mailto:ulf.wiger@erla
 ###i/0##
 ###i/0##
 
 
 
 
-
-
 <pre>i() -&gt; ok</pre>
 <pre>i() -&gt; ok</pre>
 <br></br>
 <br></br>
 
 

+ 0 - 6
doc/gproc_init.md

@@ -5,8 +5,6 @@
 * [Function Details](#functions)
 * [Function Details](#functions)
 
 
 
 
-
-
 <a name="index"></a>
 <a name="index"></a>
 
 
 ##Function Index##
 ##Function Index##
@@ -24,8 +22,6 @@
 ###hard_reset/0##
 ###hard_reset/0##
 
 
 
 
-
-
 <pre>hard_reset() -&gt; ok</pre>
 <pre>hard_reset() -&gt; ok</pre>
 <br></br>
 <br></br>
 
 
@@ -35,8 +31,6 @@
 ###soft_reset/0##
 ###soft_reset/0##
 
 
 
 
-
-
 <pre>soft_reset() -&gt; ok</pre>
 <pre>soft_reset() -&gt; ok</pre>
 <br></br>
 <br></br>
 
 

+ 0 - 40
doc/gproc_lib.md

@@ -8,8 +8,6 @@
 
 
 Extended process registry.
 Extended process registry.
 
 
-
-
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 
 
 ##Description##
 ##Description##
@@ -35,8 +33,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###add_monitor/3##
 ###add_monitor/3##
 
 
 
 
-
-
 `add_monitor(T, Pid, Ref) -> any()`
 `add_monitor(T, Pid, Ref) -> any()`
 
 
 <a name="await-3"></a>
 <a name="await-3"></a>
@@ -44,8 +40,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###await/3##
 ###await/3##
 
 
 
 
-
-
 `await(Key, WPid, From) -> any()`
 `await(Key, WPid, From) -> any()`
 
 
 <a name="do_set_counter_value-3"></a>
 <a name="do_set_counter_value-3"></a>
@@ -53,8 +47,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###do_set_counter_value/3##
 ###do_set_counter_value/3##
 
 
 
 
-
-
 `do_set_counter_value(Key, Value, Pid) -> any()`
 `do_set_counter_value(Key, Value, Pid) -> any()`
 
 
 <a name="do_set_value-3"></a>
 <a name="do_set_value-3"></a>
@@ -62,8 +54,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###do_set_value/3##
 ###do_set_value/3##
 
 
 
 
-
-
 `do_set_value(Key, Value, Pid) -> any()`
 `do_set_value(Key, Value, Pid) -> any()`
 
 
 <a name="ensure_monitor-2"></a>
 <a name="ensure_monitor-2"></a>
@@ -71,8 +61,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###ensure_monitor/2##
 ###ensure_monitor/2##
 
 
 
 
-
-
 `ensure_monitor(Pid, Scope) -> any()`
 `ensure_monitor(Pid, Scope) -> any()`
 
 
 <a name="insert_many-4"></a>
 <a name="insert_many-4"></a>
@@ -80,8 +68,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###insert_many/4##
 ###insert_many/4##
 
 
 
 
-
-
 <pre>insert_many(T::<a href="#type-type">type()</a>, Scope::<a href="#type-scope">scope()</a>, KVL::[{<a href="#type-key">key()</a>, any()}], Pid::pid()) -> {true, list()} | false</pre>
 <pre>insert_many(T::<a href="#type-type">type()</a>, Scope::<a href="#type-scope">scope()</a>, KVL::[{<a href="#type-key">key()</a>, any()}], Pid::pid()) -> {true, list()} | false</pre>
 <br></br>
 <br></br>
 
 
@@ -91,8 +77,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###insert_reg/4##
 ###insert_reg/4##
 
 
 
 
-
-
 <pre>insert_reg(K::<a href="#type-key">key()</a>, Value::any(), Pid::pid() | shared, Scope::<a href="#type-scope">scope()</a>) -> boolean()</pre>
 <pre>insert_reg(K::<a href="#type-key">key()</a>, Value::any(), Pid::pid() | shared, Scope::<a href="#type-scope">scope()</a>) -> boolean()</pre>
 <br></br>
 <br></br>
 
 
@@ -102,8 +86,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###notify/2##
 ###notify/2##
 
 
 
 
-
-
 `notify(Key, Opts) -> any()`
 `notify(Key, Opts) -> any()`
 
 
 <a name="notify-3"></a>
 <a name="notify-3"></a>
@@ -111,8 +93,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###notify/3##
 ###notify/3##
 
 
 
 
-
-
 `notify(Event, Key, Opts) -> any()`
 `notify(Event, Key, Opts) -> any()`
 
 
 <a name="remove_many-4"></a>
 <a name="remove_many-4"></a>
@@ -120,8 +100,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_many/4##
 ###remove_many/4##
 
 
 
 
-
-
 `remove_many(T, Scope, L, Pid) -> any()`
 `remove_many(T, Scope, L, Pid) -> any()`
 
 
 <a name="remove_monitor-3"></a>
 <a name="remove_monitor-3"></a>
@@ -129,8 +107,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_monitor/3##
 ###remove_monitor/3##
 
 
 
 
-
-
 `remove_monitor(T, Pid, Ref) -> any()`
 `remove_monitor(T, Pid, Ref) -> any()`
 
 
 <a name="remove_monitors-3"></a>
 <a name="remove_monitors-3"></a>
@@ -138,8 +114,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_monitors/3##
 ###remove_monitors/3##
 
 
 
 
-
-
 `remove_monitors(Key, Pid, MPid) -> any()`
 `remove_monitors(Key, Pid, MPid) -> any()`
 
 
 <a name="remove_reg-3"></a>
 <a name="remove_reg-3"></a>
@@ -147,8 +121,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_reg/3##
 ###remove_reg/3##
 
 
 
 
-
-
 `remove_reg(Key, Pid, Event) -> any()`
 `remove_reg(Key, Pid, Event) -> any()`
 
 
 <a name="remove_reg-4"></a>
 <a name="remove_reg-4"></a>
@@ -156,8 +128,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_reg/4##
 ###remove_reg/4##
 
 
 
 
-
-
 `remove_reg(Key, Pid, Event, Opts) -> any()`
 `remove_reg(Key, Pid, Event, Opts) -> any()`
 
 
 <a name="remove_reverse_mapping-3"></a>
 <a name="remove_reverse_mapping-3"></a>
@@ -165,8 +135,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_reverse_mapping/3##
 ###remove_reverse_mapping/3##
 
 
 
 
-
-
 `remove_reverse_mapping(Event, Pid, Key) -> any()`
 `remove_reverse_mapping(Event, Pid, Key) -> any()`
 
 
 <a name="remove_wait-4"></a>
 <a name="remove_wait-4"></a>
@@ -174,8 +142,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###remove_wait/4##
 ###remove_wait/4##
 
 
 
 
-
-
 `remove_wait(Key, Pid, Ref, Waiters) -> any()`
 `remove_wait(Key, Pid, Ref, Waiters) -> any()`
 
 
 <a name="update_aggr_counter-3"></a>
 <a name="update_aggr_counter-3"></a>
@@ -183,8 +149,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###update_aggr_counter/3##
 ###update_aggr_counter/3##
 
 
 
 
-
-
 `update_aggr_counter(C, N, Val) -> any()`
 `update_aggr_counter(C, N, Val) -> any()`
 
 
 <a name="update_counter-3"></a>
 <a name="update_counter-3"></a>
@@ -192,8 +156,6 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###update_counter/3##
 ###update_counter/3##
 
 
 
 
-
-
 `update_counter(Key, Incr, Pid) -> any()`
 `update_counter(Key, Incr, Pid) -> any()`
 
 
 <a name="valid_opts-2"></a>
 <a name="valid_opts-2"></a>
@@ -201,7 +163,5 @@ For a detailed description, see gproc/doc/erlang07-wiger.pdf.<a name="index"></a
 ###valid_opts/2##
 ###valid_opts/2##
 
 
 
 
-
-
 `valid_opts(Type, Default) -> any()`
 `valid_opts(Type, Default) -> any()`
 
 

+ 6 - 14
doc/gproc_monitor.md

@@ -11,8 +11,6 @@ This module implements a notification system for gproc names
 When a process subscribes to notifications for a given name, a message
 When a process subscribes to notifications for a given name, a message
 will be sent each time that name is registered.
 will be sent each time that name is registered.
 
 
-
-
 __Behaviours:__ [`gen_server`](gen_server.md).
 __Behaviours:__ [`gen_server`](gen_server.md).
 
 
 __Authors:__ Ulf Wiger ([`ulf.wiger@feuerlabs.com`](mailto:ulf.wiger@feuerlabs.com)).<a name="index"></a>
 __Authors:__ Ulf Wiger ([`ulf.wiger@feuerlabs.com`](mailto:ulf.wiger@feuerlabs.com)).<a name="index"></a>
@@ -35,23 +33,17 @@ Unsubscribe from registration events for a certain name.</td></tr></table>
 ###start_link/0##
 ###start_link/0##
 
 
 
 
-
-
 <pre>start_link() -&gt; {ok, Pid} | ignore | {error, Error}</pre>
 <pre>start_link() -&gt; {ok, Pid} | ignore | {error, Error}</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
-
-
 Starts the server
 Starts the server
 <a name="subscribe-1"></a>
 <a name="subscribe-1"></a>
 
 
 ###subscribe/1##
 ###subscribe/1##
 
 
 
 
-
-
 <pre>subscribe(Key::<a href="#type-key">key()</a>) -> ok</pre>
 <pre>subscribe(Key::<a href="#type-key">key()</a>) -> ok</pre>
 <br></br>
 <br></br>
 
 
@@ -59,21 +51,21 @@ Starts the server
 
 
 
 
 
 
+Subscribe to registration events for a certain name
 
 
 
 
-Subscribe to registration events for a certain name
 
 
 The subscribing process will receive a `{gproc_monitor, Name, Pid}` message
 The subscribing process will receive a `{gproc_monitor, Name, Pid}` message
 whenever a process registers under the given name, and a
 whenever a process registers under the given name, and a
 `{gproc_monitor, Name, undefined}` message when the name is unregistered,
 `{gproc_monitor, Name, undefined}` message when the name is unregistered,
-either explicitly, or because the registered process dies.When the subscription is first ordered, one of the above messages will be
+either explicitly, or because the registered process dies.
+
+When the subscription is first ordered, one of the above messages will be
 sent immediately, indicating the current status of the name.<a name="unsubscribe-1"></a>
 sent immediately, indicating the current status of the name.<a name="unsubscribe-1"></a>
 
 
 ###unsubscribe/1##
 ###unsubscribe/1##
 
 
 
 
-
-
 <pre>unsubscribe(Key::<a href="#type-key">key()</a>) -> ok</pre>
 <pre>unsubscribe(Key::<a href="#type-key">key()</a>) -> ok</pre>
 <br></br>
 <br></br>
 
 
@@ -81,6 +73,6 @@ sent immediately, indicating the current status of the name.<a name="unsubscribe
 
 
 
 
 
 
+Unsubscribe from registration events for a certain name
 
 
-
-Unsubscribe from registration events for a certain nameThis function is the reverse of subscribe/1. It removes the subscription.
+This function is the reverse of subscribe/1. It removes the subscription.

+ 47 - 47
doc/gproc_ps.md

@@ -10,16 +10,18 @@
 Gproc Publish/Subscribe patterns
 Gproc Publish/Subscribe patterns
 This module implements a few convenient functions for publish/subscribe.
 This module implements a few convenient functions for publish/subscribe.
 
 
-
-
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 __Authors:__ Ulf Wiger ([`ulf@wiger.net`](mailto:ulf@wiger.net)).<a name="description"></a>
 
 
 ##Description##
 ##Description##
 
 
 
 
+
+
 Publish/subscribe with Gproc relies entirely on gproc properties and counters.
 Publish/subscribe with Gproc relies entirely on gproc properties and counters.
 This makes for a very concise implementation, as the monitoring of subscribers and
 This makes for a very concise implementation, as the monitoring of subscribers and
-removal of subscriptions comes for free with Gproc.Using this module instead of rolling your own (which is easy enough) brings the
+removal of subscriptions comes for free with Gproc.
+
+Using this module instead of rolling your own (which is easy enough) brings the
 benefit of consistency, in tracing and debugging.
 benefit of consistency, in tracing and debugging.
 The implementation can also serve to illustrate how to use gproc properties and
 The implementation can also serve to illustrate how to use gproc properties and
 counters to good effect.
 counters to good effect.
@@ -77,70 +79,70 @@ counters to good effect.
 ###create_single/2##
 ###create_single/2##
 
 
 
 
-
-
 <pre>create_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <pre>create_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Creates a single-shot subscription entry for Event
 
 
 
 
-Creates a single-shot subscription entry for Event
 
 
 Single-shot subscriptions behave similarly to the `{active,once}` property of sockets.
 Single-shot subscriptions behave similarly to the `{active,once}` property of sockets.
 Once a message has been published, the subscription is disabled, and no more messages
 Once a message has been published, the subscription is disabled, and no more messages
 will be delivered to the subscriber unless the subscription is re-enabled using
 will be delivered to the subscriber unless the subscription is re-enabled using
 `enable_single/2`.
 `enable_single/2`.
 
 
+
+
 The function creates a gproc counter entry, `{c,Scope,{gproc_ps_event,Event}}`, which
 The function creates a gproc counter entry, `{c,Scope,{gproc_ps_event,Event}}`, which
 will have either of the values `0` (disabled) or `1` (enabled). Initially, the value
 will have either of the values `0` (disabled) or `1` (enabled). Initially, the value
-is `1`, meaning the subscription is enabled.Counters are used in this case, since they can be atomically updated by both the
+is `1`, meaning the subscription is enabled.
+
+Counters are used in this case, since they can be atomically updated by both the
 subscriber (owner) and publisher. The publisher sets the counter value to `0` as soon
 subscriber (owner) and publisher. The publisher sets the counter value to `0` as soon
 as it has delivered a message.<a name="delete_single-2"></a>
 as it has delivered a message.<a name="delete_single-2"></a>
 
 
 ###delete_single/2##
 ###delete_single/2##
 
 
 
 
-
-
 <pre>delete_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <pre>delete_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Deletes the single-shot subscription for Event
 
 
-
-Deletes the single-shot subscription for EventThis function deletes the counter entry representing the single-shot description.
+This function deletes the counter entry representing the single-shot description.
 An exception will be raised if there is no such subscription.<a name="disable_single-2"></a>
 An exception will be raised if there is no such subscription.<a name="disable_single-2"></a>
 
 
 ###disable_single/2##
 ###disable_single/2##
 
 
 
 
-
-
 <pre>disable_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> integer()</pre>
 <pre>disable_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> integer()</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Disables the single-shot subscription for Event
 
 
 
 
-Disables the single-shot subscription for Event
 
 
 This function changes the value of the corresponding gproc counter to `0` (disabled).
 This function changes the value of the corresponding gproc counter to `0` (disabled).
 
 
+
+
 The subscription remains (e.g. for debugging purposes), but with a 'disabled' status.
 The subscription remains (e.g. for debugging purposes), but with a 'disabled' status.
 This function is insensitive to concurrency, using 'wrapping' ets counter update ops.
 This function is insensitive to concurrency, using 'wrapping' ets counter update ops.
 This guarantees that the counter will have either the value 1 or 0, depending on which
 This guarantees that the counter will have either the value 1 or 0, depending on which
-update happened last.The return value indicates the previous status.<a name="enable_single-2"></a>
-
-###enable_single/2##
+update happened last.
 
 
+The return value indicates the previous status.<a name="enable_single-2"></a>
 
 
+###enable_single/2##
 
 
 
 
 <pre>enable_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> integer()</pre>
 <pre>enable_single(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> integer()</pre>
@@ -149,87 +151,85 @@ update happened last.The return value indicates the previous status.<a name="ena
 
 
 
 
 
 
+Enables the single-shot subscription for Event
 
 
 
 
-Enables the single-shot subscription for Event
 
 
 This function changes the value of the corresponding gproc counter to `1` (enabled).
 This function changes the value of the corresponding gproc counter to `1` (enabled).
 
 
+
+
 After enabling, the subscriber will receive the next message published for `Event`,
 After enabling, the subscriber will receive the next message published for `Event`,
 after which the subscription is automatically disabled.
 after which the subscription is automatically disabled.
 
 
+
+
 This function is insensitive to concurrency, using 'wrapping' ets counter update ops.
 This function is insensitive to concurrency, using 'wrapping' ets counter update ops.
 This guarantees that the counter will have either the value 1 or 0, depending on which
 This guarantees that the counter will have either the value 1 or 0, depending on which
-update happened last.The return value indicates the previous status.<a name="list_singles-2"></a>
-
-###list_singles/2##
+update happened last.
 
 
+The return value indicates the previous status.<a name="list_singles-2"></a>
 
 
+###list_singles/2##
 
 
 
 
 <pre>list_singles(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> [{pid(), <a href="#type-status">status()</a>}]</pre>
 <pre>list_singles(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> [{pid(), <a href="#type-status">status()</a>}]</pre>
 <br></br>
 <br></br>
 
 
 
 
-
-
 Lists all single-shot subscribers of Event, together with their status<a name="list_subs-2"></a>
 Lists all single-shot subscribers of Event, together with their status<a name="list_subs-2"></a>
 
 
 ###list_subs/2##
 ###list_subs/2##
 
 
 
 
-
-
 <pre>list_subs(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> [pid()]</pre>
 <pre>list_subs(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> [pid()]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+List the pids of all processes subscribing to `Event`
 
 
-
-List the pids of all processes subscribing to `Event`This function uses `gproc:select/2` to find all properties indicating a subscription.<a name="notify_single_if_true-4"></a>
+This function uses `gproc:select/2` to find all properties indicating a subscription.<a name="notify_single_if_true-4"></a>
 
 
 ###notify_single_if_true/4##
 ###notify_single_if_true/4##
 
 
 
 
-
-
 <pre>notify_single_if_true(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>, F::fun(() -> boolean()), Msg::<a href="#type-msg">msg()</a>) -> ok</pre>
 <pre>notify_single_if_true(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>, F::fun(() -> boolean()), Msg::<a href="#type-msg">msg()</a>) -> ok</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Create/enable a single subscription for event; notify at once if F() -> true
 
 
-
-Create/enable a single subscription for event; notify at once if F() -> trueThis function is a convenience function, wrapping a single-shot pub/sub around a
+This function is a convenience function, wrapping a single-shot pub/sub around a
 user-provided boolean test. `Msg` should be what the publisher will send later, if the
 user-provided boolean test. `Msg` should be what the publisher will send later, if the
 immediate test returns `false`.<a name="publish-3"></a>
 immediate test returns `false`.<a name="publish-3"></a>
 
 
 ###publish/3##
 ###publish/3##
 
 
 
 
-
-
 <pre>publish(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>, Msg::<a href="#type-msg">msg()</a>) -> ok</pre>
 <pre>publish(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>, Msg::<a href="#type-msg">msg()</a>) -> ok</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Publish the message `Msg` to all subscribers of `Event`
 
 
 
 
-Publish the message `Msg` to all subscribers of `Event`
 
 
 The message delivered to each subscriber will be of the form:
 The message delivered to each subscriber will be of the form:
 
 
-`{gproc_ps_event, Event, Msg}`The function uses `gproc:send/2` to send a message to all processes which have a
-property `{p,Scope,{gproc_ps_event,Event}}`.<a name="subscribe-2"></a>
 
 
-###subscribe/2##
 
 
+`{gproc_ps_event, Event, Msg}`
+
+The function uses `gproc:send/2` to send a message to all processes which have a
+property `{p,Scope,{gproc_ps_event,Event}}`.<a name="subscribe-2"></a>
 
 
+###subscribe/2##
 
 
 
 
 <pre>subscribe(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <pre>subscribe(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
@@ -238,48 +238,48 @@ property `{p,Scope,{gproc_ps_event,Event}}`.<a name="subscribe-2"></a>
 
 
 
 
 
 
+Subscribe to events of type `Event`
 
 
 
 
-Subscribe to events of type `Event`
 
 
 Any messages published with `gproc_ps:publish(Scope, Event, Msg)` will be delivered to
 Any messages published with `gproc_ps:publish(Scope, Event, Msg)` will be delivered to
-the current process, along with all other subscribers.This function creates a property, `{p,Scope,{gproc_ps_event,Event}}`, which can be
+the current process, along with all other subscribers.
+
+This function creates a property, `{p,Scope,{gproc_ps_event,Event}}`, which can be
 searched and displayed for debugging purposes.<a name="tell_singles-3"></a>
 searched and displayed for debugging purposes.<a name="tell_singles-3"></a>
 
 
 ###tell_singles/3##
 ###tell_singles/3##
 
 
 
 
-
-
 <pre>tell_singles(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>, Msg::<a href="#type-msg">msg()</a>) -> [pid()]</pre>
 <pre>tell_singles(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>, Msg::<a href="#type-msg">msg()</a>) -> [pid()]</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Publish `Msg` to all single-shot subscribers of `Event`
 
 
 
 
-Publish `Msg` to all single-shot subscribers of `Event`
 
 
 The subscriber status of each active subscriber is changed to `0` (disabled) before
 The subscriber status of each active subscriber is changed to `0` (disabled) before
 delivering the message. This reduces the risk that two different processes will be able
 delivering the message. This reduces the risk that two different processes will be able
 to both deliver a message before disabling the subscribers. This could happen if the
 to both deliver a message before disabling the subscribers. This could happen if the
 context switch happens just after the select operation (finding the active subscribers)
 context switch happens just after the select operation (finding the active subscribers)
 and before the process is able to update the counters. In this case, it is possible
 and before the process is able to update the counters. In this case, it is possible
-that more than one can be delivered.The way to prevent this from happening is to ensure that only one process publishes
+that more than one can be delivered.
+
+The way to prevent this from happening is to ensure that only one process publishes
 for `Event`.<a name="unsubscribe-2"></a>
 for `Event`.<a name="unsubscribe-2"></a>
 
 
 ###unsubscribe/2##
 ###unsubscribe/2##
 
 
 
 
-
-
 <pre>unsubscribe(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <pre>unsubscribe(Scope::<a href="#type-scope">scope()</a>, Event::<a href="#type-event">event()</a>) -> true</pre>
 <br></br>
 <br></br>
 
 
 
 
 
 
 
 
+Remove subscribtion created using `subscribe(Scope, Event)`
 
 
-
-Remove subscribtion created using `subscribe(Scope, Event)`This removes the property created through `subscribe/2`.
+This removes the property created through `subscribe/2`.

+ 0 - 10
doc/gproc_sup.md

@@ -5,10 +5,6 @@
 * [Function Details](#functions)
 * [Function Details](#functions)
 
 
 
 
-
-
-
-
 __Behaviours:__ [`supervisor`](supervisor.md).<a name="index"></a>
 __Behaviours:__ [`supervisor`](supervisor.md).<a name="index"></a>
 
 
 ##Function Index##
 ##Function Index##
@@ -26,18 +22,12 @@ __Behaviours:__ [`supervisor`](supervisor.md).<a name="index"></a>
 ###init/1##
 ###init/1##
 
 
 
 
-
-
 `init(Args) -> any()`
 `init(Args) -> any()`
 
 
-
-
 The main GPROC supervisor.<a name="start_link-1"></a>
 The main GPROC supervisor.<a name="start_link-1"></a>
 
 
 ###start_link/1##
 ###start_link/1##
 
 
 
 
-
-
 `start_link(Args) -> any()`
 `start_link(Args) -> any()`