Current section
Files
Jump to
Current section
Files
doc/cpg.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Module cpg</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
</head>
<body bgcolor="white">
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
<hr>
<h1>Module cpg</h1>
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
<h3><a name="CloudI_Process_Groups_(CPG)">CloudI Process Groups (CPG)</a></h3>
Based on the pg2 module in the Erlang OTP kernel application
(lib/kernel-x.x.x/src/pg2.erl).
<p>Copyright © 2011-2015 Michael Truog</p>
<p><b>Version:</b> 1.5.1 Aug 8 2015 20:06:50
------------------------------------------------------------------------</p>
<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</p>
<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog [at] gmail (dot) com"><tt>mjtruog [at] gmail (dot) com</tt></a>).</p>
<h2><a name="description">Description</a></h2>
<h3><a name="CloudI_Process_Groups_(CPG)">CloudI Process Groups (CPG)</a></h3>
Based on the pg2 module in the Erlang OTP kernel application
(lib/kernel-x.x.x/src/pg2.erl).
cpg relies on distributed Erlang for node communication, which means
a fully connected network topology is created. With distributed Erlang
Erlang pids either exist on the local node or a remote node
(which shares a connection with the local node,
so only 1 node hop is necessary in the worst case).
<h2><a name="types">Data Types</a></h2>
<h3 class="typedecl"><a name="type-callback">callback()</a></h3>
<p><tt>callback() = <a href="#type-callback_join">callback_join()</a> | <a href="#type-callback_leave">callback_leave()</a></tt></p>
<h3 class="typedecl"><a name="type-callback_join">callback_join()</a></h3>
<p><tt>callback_join() = fun((any(), pid()) -> any()) | fun((any(), pid(), <a href="#type-reason_join">reason_join()</a>) -> any())</tt></p>
<h3 class="typedecl"><a name="type-callback_leave">callback_leave()</a></h3>
<p><tt>callback_leave() = fun((any(), pid()) -> any()) | fun((any(), pid(), <a href="#type-reason_leave">reason_leave()</a>) -> any())</tt></p>
<h3 class="typedecl"><a name="type-name">name()</a></h3>
<p><tt>name() = any()</tt></p>
<h3 class="typedecl"><a name="type-reason_join">reason_join()</a></h3>
<p><tt>reason_join() = join_local | join_remote | {exit, any()}</tt></p>
<h3 class="typedecl"><a name="type-reason_leave">reason_leave()</a></h3>
<p><tt>reason_leave() = leave_local | leave_remote | {exit, any()}</tt></p>
<h3 class="typedecl"><a name="type-scope">scope()</a></h3>
<p><tt>scope() = atom()</tt></p>
<h3 class="typedecl"><a name="type-via_name">via_name()</a></h3>
<p><tt>via_name() = {global, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>, random} | {global, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>, oldest} | {global, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>, pos_integer()} | {local, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>, random} | {local, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>, oldest} | {local, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>, pos_integer()} | {global, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>} | {local, <a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>} | {global, <a href="#type-name">name()</a>, pos_integer()} | {local, <a href="#type-name">name()</a>, pos_integer()} | {global, <a href="#type-name">name()</a>} | {local, <a href="#type-name">name()</a>} | {<a href="#type-scope">scope()</a>, <a href="#type-name">name()</a>} | {<a href="#type-name">name()</a>, pos_integer()} | <a href="#type-name">name()</a></tt></p>
<p> for OTP behaviors</p>
<h2><a name="index">Function Index</a></h2>
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#add_join_callback-2">add_join_callback/2</a></td><td>
<h4><a name="Add_a_join_callback.">Add a join callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#add_join_callback-3">add_join_callback/3</a></td><td>
<h4><a name="Add_a_join_callback.">Add a join callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#add_leave_callback-2">add_leave_callback/2</a></td><td>
<h4><a name="Add_a_leave_callback.">Add a leave callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#add_leave_callback-3">add_leave_callback/3</a></td><td>
<h4><a name="Add_a_leave_callback.">Add a leave callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#create-1">create/1</a></td><td>
<h4><a name="Create_a_group_explicitly_no-op.">Create a group explicitly no-op.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#create-1">create/1</a></td><td>
<h4><a name="Create_a_group_explicitly.">Create a group explicitly.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#create-2">create/2</a></td><td>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope_no-op.">Create a group explicitly in a specific scope no-op.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#create-2">create/2</a></td><td>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope.">Create a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#create-3">create/3</a></td><td>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope_no-op.">Create a group explicitly in a specific scope no-op.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#create-3">create/3</a></td><td>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope.">Create a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#delete-1">delete/1</a></td><td>
<h4><a name="Delete_a_group_explicitly_no-op.">Delete a group explicitly no-op.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#delete-1">delete/1</a></td><td>
<h4><a name="Delete_a_group_explicitly.">Delete a group explicitly.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#delete-2">delete/2</a></td><td>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope_no-op.">Delete a group explicitly in a specific scope no-op.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#delete-2">delete/2</a></td><td>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope.">Delete a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#delete-3">delete/3</a></td><td>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope_no-op.">Delete a group explicitly in a specific scope no-op.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#delete-3">delete/3</a></td><td>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope.">Delete a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#get_closest_pid-1">get_closest_pid/1</a></td><td>
<h4><a name="Get_a_group_member,_with_local_pids_given_priority.">Get a group member, with local pids given priority.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_closest_pid-2">get_closest_pid/2</a></td><td>
<h4><a name="Get_a_group_member,_with_local_pids_given_priority_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a group member, with local pids given priority while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_closest_pid-3">get_closest_pid/3</a></td><td>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_local_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with local pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_closest_pid-4">get_closest_pid/4</a></td><td>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_local_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with local pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_furthest_pid-1">get_furthest_pid/1</a></td><td>
<h4><a name="Get_a_group_member,_with_remote_pids_given_priority.">Get a group member, with remote pids given priority.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_furthest_pid-2">get_furthest_pid/2</a></td><td>
<h4><a name="Get_a_group_member,_with_remote_pids_given_priority_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a group member, with remote pids given priority while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_furthest_pid-3">get_furthest_pid/3</a></td><td>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_remote_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with remote pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_furthest_pid-4">get_furthest_pid/4</a></td><td>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_remote_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with remote pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_members-1">get_local_members/1</a></td><td>
<h4><a name="Get_only_the_local_members_of_a_specific_group.">Get only the local members of a specific group.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_local_members-2">get_local_members/2</a></td><td>
<h4><a name="Get_only_the_local_members_of_a_specific_group_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get only the local members of a specific group while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_members-3">get_local_members/3</a></td><td>
<h4><a name="Get_only_the_local_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the local members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_members-4">get_local_members/4</a></td><td>
<h4><a name="Get_only_the_local_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the local members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_newest_pid-1">get_local_newest_pid/1</a></td><td>
<h4><a name="Get_the_newest_local_group_member.">Get the newest local group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_local_newest_pid-2">get_local_newest_pid/2</a></td><td>
<h4><a name="Get_the_newest_local_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the newest local group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_newest_pid-3">get_local_newest_pid/3</a></td><td>
<h4><a name="Get_the_newest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_newest_pid-4">get_local_newest_pid/4</a></td><td>
<h4><a name="Get_the_newest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_oldest_pid-1">get_local_oldest_pid/1</a></td><td>
<h4><a name="Get_the_oldest_local_group_member.">Get the oldest local group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_local_oldest_pid-2">get_local_oldest_pid/2</a></td><td>
<h4><a name="Get_the_oldest_local_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the oldest local group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_oldest_pid-3">get_local_oldest_pid/3</a></td><td>
<h4><a name="Get_the_oldest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_oldest_pid-4">get_local_oldest_pid/4</a></td><td>
<h4><a name="Get_the_oldest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_pid-1">get_local_pid/1</a></td><td>
<h4><a name="Get_a_local_group_member.">Get a local group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_local_pid-2">get_local_pid/2</a></td><td>
<h4><a name="Get_a_local_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a local group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_pid-3">get_local_pid/3</a></td><td>
<h4><a name="Get_a_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_local_pid-4">get_local_pid/4</a></td><td>
<h4><a name="Get_a_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_members-1">get_members/1</a></td><td>
<h4><a name="Get_the_members_of_a_specific_group.">Get the members of a specific group.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_members-2">get_members/2</a></td><td>
<h4><a name="Get_the_members_of_a_specific_group_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the members of a specific group while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_members-3">get_members/3</a></td><td>
<h4><a name="Get_the_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get the members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_members-4">get_members/4</a></td><td>
<h4><a name="Get_the_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get the members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_newest_pid-1">get_newest_pid/1</a></td><td>
<h4><a name="Get_the_newest_group_member.">Get the newest group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_newest_pid-2">get_newest_pid/2</a></td><td>
<h4><a name="Get_the_newest_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the newest group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_newest_pid-3">get_newest_pid/3</a></td><td>
<h4><a name="Get_the_newest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_newest_pid-4">get_newest_pid/4</a></td><td>
<h4><a name="Get_the_newest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_oldest_pid-1">get_oldest_pid/1</a></td><td>
<h4><a name="Get_the_oldest_group_member.">Get the oldest group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_oldest_pid-2">get_oldest_pid/2</a></td><td>
<h4><a name="Get_the_oldest_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the oldest group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_oldest_pid-3">get_oldest_pid/3</a></td><td>
<h4><a name="Get_the_oldest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_oldest_pid-4">get_oldest_pid/4</a></td><td>
<h4><a name="Get_the_oldest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_random_pid-1">get_random_pid/1</a></td><td>
<h4><a name="Get_a_group_member.">Get a group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_random_pid-2">get_random_pid/2</a></td><td>
<h4><a name="Get_a_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_random_pid-3">get_random_pid/3</a></td><td>
<h4><a name="Get_a_group_member_within_a_specific_scope_while_excluding_a_specific_pid.">Get a group member within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_random_pid-4">get_random_pid/4</a></td><td>
<h4><a name="Get_a_group_member_within_a_specific_scope_while_excluding_a_specific_pid.">Get a group member within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_members-1">get_remote_members/1</a></td><td>
<h4><a name="Get_only_the_remote_members_of_a_specific_group.">Get only the remote members of a specific group.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_remote_members-2">get_remote_members/2</a></td><td>
<h4><a name="Get_only_the_remote_members_of_a_specific_group_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get only the remote members of a specific group while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_members-3">get_remote_members/3</a></td><td>
<h4><a name="Get_only_the_remote_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the remote members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_members-4">get_remote_members/4</a></td><td>
<h4><a name="Get_only_the_remote_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the remote members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_newest_pid-1">get_remote_newest_pid/1</a></td><td>
<h4><a name="Get_the_newest_remote_group_member.">Get the newest remote group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_remote_newest_pid-2">get_remote_newest_pid/2</a></td><td>
<h4><a name="Get_the_newest_remote_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the newest remote group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_newest_pid-3">get_remote_newest_pid/3</a></td><td>
<h4><a name="Get_the_newest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_newest_pid-4">get_remote_newest_pid/4</a></td><td>
<h4><a name="Get_the_newest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_oldest_pid-1">get_remote_oldest_pid/1</a></td><td>
<h4><a name="Get_the_oldest_remote_group_member.">Get the oldest remote group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_remote_oldest_pid-2">get_remote_oldest_pid/2</a></td><td>
<h4><a name="Get_the_oldest_remote_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the oldest remote group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_oldest_pid-3">get_remote_oldest_pid/3</a></td><td>
<h4><a name="Get_the_oldest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_oldest_pid-4">get_remote_oldest_pid/4</a></td><td>
<h4><a name="Get_the_oldest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_pid-1">get_remote_pid/1</a></td><td>
<h4><a name="Get_a_remote_group_member.">Get a remote group member.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_remote_pid-2">get_remote_pid/2</a></td><td>
<h4><a name="Get_a_remote_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a remote group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_pid-3">get_remote_pid/3</a></td><td>
<h4><a name="Get_a_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#get_remote_pid-4">get_remote_pid/4</a></td><td>
<h4><a name="Get_a_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</td></tr>
<tr><td valign="top"><a href="#join-1">join/1</a></td><td>
<h4><a name="Join_a_specific_group_with_self()_as_a_local_pid.">Join a specific group with self() as a local pid.</a></h4>
A group is automatically created if it does not already exist.</td></tr>
<tr><td valign="top"><a href="#join-1">join/1</a></td><td>
<h4><a name="Join_a_specific_group_with_self().">Join a specific group with self().</a></h4>.</td></tr>
<tr><td valign="top"><a href="#join-2">join/2</a></td><td>
<h4><a name="Join_a_specific_group_with_the_specified_local_pid_or_a_specific_group_within_a_specific_scope_with_self()_as_a_local_pid.">Join a specific group with the specified local pid or a specific group within a specific scope with self() as a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups.</td></tr>
<tr><td valign="top"><a href="#join-2">join/2</a></td><td>
<h4><a name="Join_a_specific_group.">Join a specific group.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#join-3">join/3</a></td><td>
<h4><a name="Join_a_specific_group_within_a_specific_scope_with_a_local_pid.">Join a specific group within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups.</td></tr>
<tr><td valign="top"><a href="#join-3">join/3</a></td><td>
<h4><a name="Join_a_specific_group_in_a_specific_scope.">Join a specific group in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#join-4">join/4</a></td><td>
<h4><a name="Join_a_specific_group_within_a_specific_scope_with_a_local_pid.">Join a specific group within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups.</td></tr>
<tr><td valign="top"><a href="#join-4">join/4</a></td><td>
<h4><a name="Join_a_specific_group_in_a_specific_scope.">Join a specific group in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#join_count-1">join_count/1</a></td><td>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_self().">Provide a count of the previous joins of a specific group with self().</a></h4>.</td></tr>
<tr><td valign="top"><a href="#join_count-2">join_count/2</a></td><td>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_a_specific_pid.">Provide a count of the previous joins of a specific group with a specific pid.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#join_count-3">join_count/3</a></td><td>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_a_specific_pid.">Provide a count of the previous joins of a specific group with a specific pid.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#join_count-4">join_count/4</a></td><td>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_a_specific_pid.">Provide a count of the previous joins of a specific group with a specific pid.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#leave-0">leave/0</a></td><td>
<h4><a name="Leave_all_groups.">Leave all groups.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#leave-0">leave/0</a></td><td>
<h4><a name="Leave_all_groups.">Leave all groups.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#leave-1">leave/1</a></td><td>
<h4><a name="Leave_a_specific_group_or_all_groups_with_a_local_pid.">Leave a specific group or all groups with a local pid.</a></h4>
The group is automatically removed if it becomes empty.</td></tr>
<tr><td valign="top"><a href="#leave-1">leave/1</a></td><td>
<h4><a name="Leave_a_specific_group_or_all_groups.">Leave a specific group or all groups.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#leave-2">leave/2</a></td><td>
<h4><a name="Leave_a_specific_group_or_all_groups_with_the_specified_local_pid_or_a_specific_group_within_a_specific_scope_with_self()_as_a_local_pid.">Leave a specific group or all groups with the specified local pid or a specific group within a specific scope with self() as a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups.</td></tr>
<tr><td valign="top"><a href="#leave-2">leave/2</a></td><td>
<h4><a name="Leave_a_specific_group_or_all_groups.">Leave a specific group or all groups.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#leave-3">leave/3</a></td><td>
<h4><a name="Leave_a_specific_group_or_all_groups_within_a_specific_scope_with_a_local_pid.">Leave a specific group or all groups within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups.</td></tr>
<tr><td valign="top"><a href="#leave-3">leave/3</a></td><td>
<h4><a name="Leave_a_specific_group_in_a_specific_scope_or_all_groups_in_a_specific_scope.">Leave a specific group in a specific scope or all groups in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#leave-4">leave/4</a></td><td>
<h4><a name="Leave_a_specific_group_or_all_groups_within_a_specific_scope_with_a_local_pid.">Leave a specific group or all groups within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups.</td></tr>
<tr><td valign="top"><a href="#leave-4">leave/4</a></td><td>
<h4><a name="Leave_a_specific_group_in_a_specific_scope.">Leave a specific group in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</td></tr>
<tr><td valign="top"><a href="#register_name-2">register_name/2</a></td><td>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()}).</td></tr>
<tr><td valign="top"><a href="#remove_join_callback-2">remove_join_callback/2</a></td><td>
<h4><a name="Remove_a_join_callback.">Remove a join callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#remove_join_callback-3">remove_join_callback/3</a></td><td>
<h4><a name="Remove_a_join_callback.">Remove a join callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#remove_leave_callback-2">remove_leave_callback/2</a></td><td>
<h4><a name="Remove_a_leave_callback.">Remove a leave callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#remove_leave_callback-3">remove_leave_callback/3</a></td><td>
<h4><a name="Remove_a_leave_callback.">Remove a leave callback.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#reset-1">reset/1</a></td><td>
<h4><a name="Reset_any_internal_scope_state.">Reset any internal scope state.</a></h4>
Updates cpg application node_type monitoring.</td></tr>
<tr><td valign="top"><a href="#scope_exists-1">scope_exists/1</a></td><td>
<h4><a name="Confirm_a_scope_exists.">Confirm a scope exists.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#send-2">send/2</a></td><td>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()}).</td></tr>
<tr><td valign="top"><a href="#start_link-0">start_link/0</a></td><td>
<h4><a name="Start_process_groups_storage_for_the_default_scope.">Start process groups storage for the default scope.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td>
<h4><a name="Start_process_groups_storage_for_a_specific_scope.">Start process groups storage for a specific scope.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#unregister_name-1">unregister_name/1</a></td><td>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()}).</td></tr>
<tr><td valign="top"><a href="#whereis_name-1">whereis_name/1</a></td><td>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()}).</td></tr>
<tr><td valign="top"><a href="#which_groups-0">which_groups/0</a></td><td>
<h4><a name="Get_all_the_groups_currently_defined.">Get all the groups currently defined.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#which_groups-1">which_groups/1</a></td><td>
<h4><a name="Get_all_the_groups_currently_defined_within_a_specific_scope.">Get all the groups currently defined within a specific scope.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#which_groups-2">which_groups/2</a></td><td>
<h4><a name="Get_all_the_groups_currently_defined_within_a_specific_scope.">Get all the groups currently defined within a specific scope.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#which_groups-3">which_groups/3</a></td><td>
<h4><a name="Get_all_the_groups_currently_defined_within_a_specific_scope.">Get all the groups currently defined within a specific scope.</a></h4>.</td></tr>
</table>
<h2><a name="functions">Function Details</a></h2>
<h3 class="function"><a name="add_join_callback-2">add_join_callback/2</a></h3>
<div class="spec">
<p><tt>add_join_callback(GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_join">callback_join()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Add_a_join_callback.">Add a join callback.</a></h4>
</p>
<h3 class="function"><a name="add_join_callback-3">add_join_callback/3</a></h3>
<div class="spec">
<p><tt>add_join_callback(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_join">callback_join()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Add_a_join_callback.">Add a join callback.</a></h4>
</p>
<h3 class="function"><a name="add_leave_callback-2">add_leave_callback/2</a></h3>
<div class="spec">
<p><tt>add_leave_callback(GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_leave">callback_leave()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Add_a_leave_callback.">Add a leave callback.</a></h4>
</p>
<h3 class="function"><a name="add_leave_callback-3">add_leave_callback/3</a></h3>
<div class="spec">
<p><tt>add_leave_callback(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_leave">callback_leave()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Add_a_leave_callback.">Add a leave callback.</a></h4>
</p>
<h3 class="function"><a name="create-1">create/1</a></h3>
<div class="spec">
<p><tt>create(X1::<a href="#type-name">name()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Create_a_group_explicitly_no-op.">Create a group explicitly no-op.</a></h4>
</p>
<h3 class="function"><a name="create-1">create/1</a></h3>
<div class="spec">
<p><tt>create(GroupName::<a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Create_a_group_explicitly.">Create a group explicitly.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="create-2">create/2</a></h3>
<div class="spec">
<p><tt>create(X1::<a href="#type-scope">scope()</a>, X2::<a href="#type-name">name()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope_no-op.">Create a group explicitly in a specific scope no-op.</a></h4>
</p>
<h3 class="function"><a name="create-2">create/2</a></h3>
<div class="spec">
<p><tt>create(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope.">Create a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="create-3">create/3</a></h3>
<div class="spec">
<p><tt>create(X1::<a href="#type-scope">scope()</a>, X2::<a href="#type-name">name()</a>, X3::pos_integer() | infinity) -> ok</tt><br></p>
</div><p>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope_no-op.">Create a group explicitly in a specific scope no-op.</a></h4>
</p>
<h3 class="function"><a name="create-3">create/3</a></h3>
<div class="spec">
<p><tt>create(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Timeout::pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Create_a_group_explicitly_in_a_specific_scope.">Create a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="delete-1">delete/1</a></h3>
<div class="spec">
<p><tt>delete(X1::<a href="#type-name">name()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Delete_a_group_explicitly_no-op.">Delete a group explicitly no-op.</a></h4>
</p>
<h3 class="function"><a name="delete-1">delete/1</a></h3>
<div class="spec">
<p><tt>delete(GroupName::<a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Delete_a_group_explicitly.">Delete a group explicitly.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="delete-2">delete/2</a></h3>
<div class="spec">
<p><tt>delete(X1::<a href="#type-scope">scope()</a>, X2::<a href="#type-name">name()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope_no-op.">Delete a group explicitly in a specific scope no-op.</a></h4>
</p>
<h3 class="function"><a name="delete-2">delete/2</a></h3>
<div class="spec">
<p><tt>delete(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope.">Delete a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="delete-3">delete/3</a></h3>
<div class="spec">
<p><tt>delete(X1::<a href="#type-scope">scope()</a>, X2::<a href="#type-name">name()</a>, X3::pos_integer() | infinity) -> ok</tt><br></p>
</div><p>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope_no-op.">Delete a group explicitly in a specific scope no-op.</a></h4>
</p>
<h3 class="function"><a name="delete-3">delete/3</a></h3>
<div class="spec">
<p><tt>delete(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Timeout::pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Delete_a_group_explicitly_in_a_specific_scope.">Delete a group explicitly in a specific scope.</a></h4>
The calling pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="get_closest_pid-1">get_closest_pid/1</a></h3>
<div class="spec">
<p><tt>get_closest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member,_with_local_pids_given_priority.">Get a group member, with local pids given priority.</a></h4>
</p>
<h3 class="function"><a name="get_closest_pid-2">get_closest_pid/2</a></h3>
<div class="spec">
<p><tt>get_closest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member,_with_local_pids_given_priority_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a group member, with local pids given priority while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_closest_pid-3">get_closest_pid/3</a></h3>
<div class="spec">
<p><tt>get_closest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_local_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with local pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_closest_pid-4">get_closest_pid/4</a></h3>
<div class="spec">
<p><tt>get_closest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_local_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with local pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_furthest_pid-1">get_furthest_pid/1</a></h3>
<div class="spec">
<p><tt>get_furthest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member,_with_remote_pids_given_priority.">Get a group member, with remote pids given priority.</a></h4>
</p>
<h3 class="function"><a name="get_furthest_pid-2">get_furthest_pid/2</a></h3>
<div class="spec">
<p><tt>get_furthest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member,_with_remote_pids_given_priority_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a group member, with remote pids given priority while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_furthest_pid-3">get_furthest_pid/3</a></h3>
<div class="spec">
<p><tt>get_furthest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_remote_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with remote pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_furthest_pid-4">get_furthest_pid/4</a></h3>
<div class="spec">
<p><tt>get_furthest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_within_a_specific_scope,_with_remote_pids_given_priority_while_excluding_a_specific_pid.">Get a group member within a specific scope, with remote pids given priority while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_members-1">get_local_members/1</a></h3>
<div class="spec">
<p><tt>get_local_members(GroupName::<a href="#type-name">name()</a>) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_local_members_of_a_specific_group.">Get only the local members of a specific group.</a></h4>
</p>
<h3 class="function"><a name="get_local_members-2">get_local_members/2</a></h3>
<div class="spec">
<p><tt>get_local_members(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_local_members_of_a_specific_group_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get only the local members of a specific group while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_members-3">get_local_members/3</a></h3>
<div class="spec">
<p><tt>get_local_members(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_local_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the local members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_members-4">get_local_members/4</a></h3>
<div class="spec">
<p><tt>get_local_members(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_local_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the local members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_newest_pid-1">get_local_newest_pid/1</a></h3>
<div class="spec">
<p><tt>get_local_newest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_local_group_member.">Get the newest local group member.</a></h4>
</p>
<h3 class="function"><a name="get_local_newest_pid-2">get_local_newest_pid/2</a></h3>
<div class="spec">
<p><tt>get_local_newest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_local_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the newest local group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_newest_pid-3">get_local_newest_pid/3</a></h3>
<div class="spec">
<p><tt>get_local_newest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_newest_pid-4">get_local_newest_pid/4</a></h3>
<div class="spec">
<p><tt>get_local_newest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_oldest_pid-1">get_local_oldest_pid/1</a></h3>
<div class="spec">
<p><tt>get_local_oldest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_local_group_member.">Get the oldest local group member.</a></h4>
</p>
<h3 class="function"><a name="get_local_oldest_pid-2">get_local_oldest_pid/2</a></h3>
<div class="spec">
<p><tt>get_local_oldest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_local_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the oldest local group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_oldest_pid-3">get_local_oldest_pid/3</a></h3>
<div class="spec">
<p><tt>get_local_oldest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_oldest_pid-4">get_local_oldest_pid/4</a></h3>
<div class="spec">
<p><tt>get_local_oldest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_pid-1">get_local_pid/1</a></h3>
<div class="spec">
<p><tt>get_local_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_local_group_member.">Get a local group member.</a></h4>
</p>
<h3 class="function"><a name="get_local_pid-2">get_local_pid/2</a></h3>
<div class="spec">
<p><tt>get_local_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_local_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a local group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_pid-3">get_local_pid/3</a></h3>
<div class="spec">
<p><tt>get_local_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_local_pid-4">get_local_pid/4</a></h3>
<div class="spec">
<p><tt>get_local_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_local_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a local group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_members-1">get_members/1</a></h3>
<div class="spec">
<p><tt>get_members(GroupName::<a href="#type-name">name()</a>) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_the_members_of_a_specific_group.">Get the members of a specific group.</a></h4>
</p>
<h3 class="function"><a name="get_members-2">get_members/2</a></h3>
<div class="spec">
<p><tt>get_members(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_the_members_of_a_specific_group_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the members of a specific group while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_members-3">get_members/3</a></h3>
<div class="spec">
<p><tt>get_members(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_the_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get the members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_members-4">get_members/4</a></h3>
<div class="spec">
<p><tt>get_members(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_the_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get the members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_newest_pid-1">get_newest_pid/1</a></h3>
<div class="spec">
<p><tt>get_newest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_group_member.">Get the newest group member.</a></h4>
</p>
<h3 class="function"><a name="get_newest_pid-2">get_newest_pid/2</a></h3>
<div class="spec">
<p><tt>get_newest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the newest group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_newest_pid-3">get_newest_pid/3</a></h3>
<div class="spec">
<p><tt>get_newest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_newest_pid-4">get_newest_pid/4</a></h3>
<div class="spec">
<p><tt>get_newest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_oldest_pid-1">get_oldest_pid/1</a></h3>
<div class="spec">
<p><tt>get_oldest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_group_member.">Get the oldest group member.</a></h4>
</p>
<h3 class="function"><a name="get_oldest_pid-2">get_oldest_pid/2</a></h3>
<div class="spec">
<p><tt>get_oldest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the oldest group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_oldest_pid-3">get_oldest_pid/3</a></h3>
<div class="spec">
<p><tt>get_oldest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_oldest_pid-4">get_oldest_pid/4</a></h3>
<div class="spec">
<p><tt>get_oldest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_random_pid-1">get_random_pid/1</a></h3>
<div class="spec">
<p><tt>get_random_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member.">Get a group member.</a></h4>
</p>
<h3 class="function"><a name="get_random_pid-2">get_random_pid/2</a></h3>
<div class="spec">
<p><tt>get_random_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_random_pid-3">get_random_pid/3</a></h3>
<div class="spec">
<p><tt>get_random_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_within_a_specific_scope_while_excluding_a_specific_pid.">Get a group member within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_random_pid-4">get_random_pid/4</a></h3>
<div class="spec">
<p><tt>get_random_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_group_member_within_a_specific_scope_while_excluding_a_specific_pid.">Get a group member within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_members-1">get_remote_members/1</a></h3>
<div class="spec">
<p><tt>get_remote_members(GroupName::<a href="#type-name">name()</a>) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_remote_members_of_a_specific_group.">Get only the remote members of a specific group.</a></h4>
</p>
<h3 class="function"><a name="get_remote_members-2">get_remote_members/2</a></h3>
<div class="spec">
<p><tt>get_remote_members(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_remote_members_of_a_specific_group_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get only the remote members of a specific group while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_members-3">get_remote_members/3</a></h3>
<div class="spec">
<p><tt>get_remote_members(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_remote_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the remote members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_members-4">get_remote_members/4</a></h3>
<div class="spec">
<p><tt>get_remote_members(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> <a href="cpg_data.html#type-get_members_return">cpg_data:get_members_return()</a></tt><br></p>
</div><p>
<h4><a name="Get_only_the_remote_members_of_a_specific_group_within_a_specific_scope_while_excluding_a_specific_pid.">Get only the remote members of a specific group within a specific scope while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_newest_pid-1">get_remote_newest_pid/1</a></h3>
<div class="spec">
<p><tt>get_remote_newest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_remote_group_member.">Get the newest remote group member.</a></h4>
</p>
<h3 class="function"><a name="get_remote_newest_pid-2">get_remote_newest_pid/2</a></h3>
<div class="spec">
<p><tt>get_remote_newest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_remote_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the newest remote group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_newest_pid-3">get_remote_newest_pid/3</a></h3>
<div class="spec">
<p><tt>get_remote_newest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_newest_pid-4">get_remote_newest_pid/4</a></h3>
<div class="spec">
<p><tt>get_remote_newest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_newest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the newest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_oldest_pid-1">get_remote_oldest_pid/1</a></h3>
<div class="spec">
<p><tt>get_remote_oldest_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_remote_group_member.">Get the oldest remote group member.</a></h4>
</p>
<h3 class="function"><a name="get_remote_oldest_pid-2">get_remote_oldest_pid/2</a></h3>
<div class="spec">
<p><tt>get_remote_oldest_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_remote_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get the oldest remote group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_oldest_pid-3">get_remote_oldest_pid/3</a></h3>
<div class="spec">
<p><tt>get_remote_oldest_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_oldest_pid-4">get_remote_oldest_pid/4</a></h3>
<div class="spec">
<p><tt>get_remote_oldest_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_the_oldest_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get the oldest remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_pid-1">get_remote_pid/1</a></h3>
<div class="spec">
<p><tt>get_remote_pid(GroupName::<a href="#type-name">name()</a>) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_remote_group_member.">Get a remote group member.</a></h4>
</p>
<h3 class="function"><a name="get_remote_pid-2">get_remote_pid/2</a></h3>
<div class="spec">
<p><tt>get_remote_pid(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Exclude::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_remote_group_member_while_excluding_a_specific_pid_or_within_a_specific_scope.">Get a remote group member while excluding a specific pid or within a specific scope.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_pid-3">get_remote_pid/3</a></h3>
<div class="spec">
<p><tt>get_remote_pid(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Exclude::pid() | pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="get_remote_pid-4">get_remote_pid/4</a></h3>
<div class="spec">
<p><tt>get_remote_pid(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Exclude::pid(), Timeout::pos_integer() | infinity) -> {ok, <a href="#type-name">name()</a>, pid()} | {error, <a href="cpg_data.html#type-get_pid_error_reason">cpg_data:get_pid_error_reason()</a>}</tt><br></p>
</div><p>
<h4><a name="Get_a_remote_group_member_within_a_specific_scope,_while_excluding_a_specific_pid.">Get a remote group member within a specific scope, while excluding a specific pid.</a></h4>
Usually the self() pid is excluded with this function call.</p>
<h3 class="function"><a name="join-1">join/1</a></h3>
<div class="spec">
<p><tt>join(GroupName::<a href="#type-name">name()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_with_self()_as_a_local_pid.">Join a specific group with self() as a local pid.</a></h4>
A group is automatically created if it does not already exist.</p>
<h3 class="function"><a name="join-1">join/1</a></h3>
<div class="spec">
<p><tt>join(GroupName::<a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_with_self().">Join a specific group with self().</a></h4>
</p>
<h3 class="function"><a name="join-2">join/2</a></h3>
<div class="spec">
<p><tt>join(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Pid::pid() | <a href="#type-name">name()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_with_the_specified_local_pid_or_a_specific_group_within_a_specific_scope_with_self()_as_a_local_pid.">Join a specific group with the specified local pid or a specific group within a specific scope with self() as a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups. A group is automatically
created if it does not already exist.</p>
<h3 class="function"><a name="join-2">join/2</a></h3>
<div class="spec">
<p><tt>join(GroupName::<a href="#type-name">name()</a>, Pid::pid()) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group.">Join a specific group.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="join-3">join/3</a></h3>
<div class="spec">
<p><tt>join(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Pid::pid() | pos_integer() | infinity) -> ok</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_within_a_specific_scope_with_a_local_pid.">Join a specific group within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups. A group is automatically
created if it does not already exist.</p>
<h3 class="function"><a name="join-3">join/3</a></h3>
<div class="spec">
<p><tt>join(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Pid::pid() | pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_in_a_specific_scope.">Join a specific group in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="join-4">join/4</a></h3>
<div class="spec">
<p><tt>join(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Pid::pid(), Timeout::pos_integer() | infinity) -> ok</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_within_a_specific_scope_with_a_local_pid.">Join a specific group within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups. A group is automatically
created if it does not already exist.</p>
<h3 class="function"><a name="join-4">join/4</a></h3>
<div class="spec">
<p><tt>join(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Pid::pid(), Timeout::pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Join_a_specific_group_in_a_specific_scope.">Join a specific group in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="join_count-1">join_count/1</a></h3>
<div class="spec">
<p><tt>join_count(GroupName::<a href="#type-name">name()</a>) -> non_neg_integer()</tt><br></p>
</div><p>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_self().">Provide a count of the previous joins of a specific group with self().</a></h4>
</p>
<h3 class="function"><a name="join_count-2">join_count/2</a></h3>
<div class="spec">
<p><tt>join_count(GroupName::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a>, Pid::pid() | <a href="#type-name">name()</a>) -> non_neg_integer()</tt><br></p>
</div><p>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_a_specific_pid.">Provide a count of the previous joins of a specific group with a specific pid.</a></h4>
</p>
<h3 class="function"><a name="join_count-3">join_count/3</a></h3>
<div class="spec">
<p><tt>join_count(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, GroupName::<a href="#type-name">name()</a> | pid(), Pid::pid() | pos_integer() | infinity) -> non_neg_integer()</tt><br></p>
</div><p>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_a_specific_pid.">Provide a count of the previous joins of a specific group with a specific pid.</a></h4>
</p>
<h3 class="function"><a name="join_count-4">join_count/4</a></h3>
<div class="spec">
<p><tt>join_count(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Pid::pid(), Timeout::pos_integer() | infinity) -> non_neg_integer()</tt><br></p>
</div><p>
<h4><a name="Provide_a_count_of_the_previous_joins_of_a_specific_group_with_a_specific_pid.">Provide a count of the previous joins of a specific group with a specific pid.</a></h4>
</p>
<h3 class="function"><a name="leave-0">leave/0</a></h3>
<div class="spec">
<p><tt>leave() -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_all_groups.">Leave all groups.</a></h4>
</p>
<h3 class="function"><a name="leave-0">leave/0</a></h3>
<div class="spec">
<p><tt>leave() -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_all_groups.">Leave all groups.</a></h4>
</p>
<h3 class="function"><a name="leave-1">leave/1</a></h3>
<div class="spec">
<p><tt>leave(Pid::pid() | <a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_or_all_groups_with_a_local_pid.">Leave a specific group or all groups with a local pid.</a></h4>
The group is automatically removed if it becomes empty.</p>
<h3 class="function"><a name="leave-1">leave/1</a></h3>
<div class="spec">
<p><tt>leave(Pid::pid() | <a href="#type-name">name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_or_all_groups.">Leave a specific group or all groups.</a></h4>
</p>
<h3 class="function"><a name="leave-2">leave/2</a></h3>
<div class="spec">
<p><tt>leave(Scope::<a href="#type-name">name()</a> | <a href="#type-scope">scope()</a> | pid(), Pid::pid() | <a href="#type-name">name()</a> | pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_or_all_groups_with_the_specified_local_pid_or_a_specific_group_within_a_specific_scope_with_self()_as_a_local_pid.">Leave a specific group or all groups with the specified local pid or a specific group within a specific scope with self() as a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups. The group will automatically
be removed if it becomes empty.</p>
<h3 class="function"><a name="leave-2">leave/2</a></h3>
<div class="spec">
<p><tt>leave(Pid::<a href="#type-name">name()</a> | pid(), Timeout::pid() | pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_or_all_groups.">Leave a specific group or all groups.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="leave-3">leave/3</a></h3>
<div class="spec">
<p><tt>leave(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, Pid::<a href="#type-name">name()</a> | pid(), Timeout::pid() | pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_or_all_groups_within_a_specific_scope_with_a_local_pid.">Leave a specific group or all groups within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups. The group will automatically
be removed if it becomes empty.</p>
<h3 class="function"><a name="leave-3">leave/3</a></h3>
<div class="spec">
<p><tt>leave(Scope::<a href="#type-scope">scope()</a> | <a href="#type-name">name()</a>, Pid::<a href="#type-name">name()</a> | pid(), Timeout::pid() | pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_in_a_specific_scope_or_all_groups_in_a_specific_scope.">Leave a specific group in a specific scope or all groups in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="leave-4">leave/4</a></h3>
<div class="spec">
<p><tt>leave(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Pid::pid(), Timeout::pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_or_all_groups_within_a_specific_scope_with_a_local_pid.">Leave a specific group or all groups within a specific scope with a local pid.</a></h4>
The pid must be a local pid to justify not using a distributed transaction
since the cpg gen_server process acts like mutex lock, enforcing consistent
local state for all local pid process groups. The group will automatically
be removed if it becomes empty.</p>
<h3 class="function"><a name="leave-4">leave/4</a></h3>
<div class="spec">
<p><tt>leave(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, Pid::pid(), Timeout::pos_integer() | infinity) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Leave_a_specific_group_in_a_specific_scope.">Leave a specific group in a specific scope.</a></h4>
The pid does not need to be a local pid because the function uses a
distributed transaction to enforce global consistency.</p>
<h3 class="function"><a name="register_name-2">register_name/2</a></h3>
<div class="spec">
<p><tt>register_name(GroupName::<a href="#type-via_name">via_name()</a>, Pid::pid()) -> yes | no</tt><br></p>
</div><p>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()})</p>
<h3 class="function"><a name="remove_join_callback-2">remove_join_callback/2</a></h3>
<div class="spec">
<p><tt>remove_join_callback(GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_join">callback_join()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Remove_a_join_callback.">Remove a join callback.</a></h4>
</p>
<h3 class="function"><a name="remove_join_callback-3">remove_join_callback/3</a></h3>
<div class="spec">
<p><tt>remove_join_callback(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_join">callback_join()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Remove_a_join_callback.">Remove a join callback.</a></h4>
</p>
<h3 class="function"><a name="remove_leave_callback-2">remove_leave_callback/2</a></h3>
<div class="spec">
<p><tt>remove_leave_callback(GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_leave">callback_leave()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Remove_a_leave_callback.">Remove a leave callback.</a></h4>
</p>
<h3 class="function"><a name="remove_leave_callback-3">remove_leave_callback/3</a></h3>
<div class="spec">
<p><tt>remove_leave_callback(Scope::<a href="#type-scope">scope()</a>, GroupName::<a href="#type-name">name()</a>, F::<a href="#type-callback_leave">callback_leave()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Remove_a_leave_callback.">Remove a leave callback.</a></h4>
</p>
<h3 class="function"><a name="reset-1">reset/1</a></h3>
<div class="spec">
<p><tt>reset(Scope::<a href="#type-scope">scope()</a>) -> ok</tt><br></p>
</div><p>
<h4><a name="Reset_any_internal_scope_state.">Reset any internal scope state.</a></h4>
Updates cpg application node_type monitoring</p>
<h3 class="function"><a name="scope_exists-1">scope_exists/1</a></h3>
<div class="spec">
<p><tt>scope_exists(Scope::atom()) -> ok | {error, term()}</tt><br></p>
</div><p>
<h4><a name="Confirm_a_scope_exists.">Confirm a scope exists.</a></h4>
</p>
<h3 class="function"><a name="send-2">send/2</a></h3>
<div class="spec">
<p><tt>send(ViaName::<a href="#type-via_name">via_name()</a>, Msg::any()) -> pid()</tt><br></p>
</div><p>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()})</p>
<h3 class="function"><a name="start_link-0">start_link/0</a></h3>
<div class="spec">
<p><tt>start_link() -> {ok, pid()} | {error, term()}</tt><br></p>
</div><p>
<h4><a name="Start_process_groups_storage_for_the_default_scope.">Start process groups storage for the default scope.</a></h4>
</p>
<h3 class="function"><a name="start_link-1">start_link/1</a></h3>
<div class="spec">
<p><tt>start_link(Scope::atom()) -> {ok, pid()} | {error, term()}</tt><br></p>
</div><p>
<h4><a name="Start_process_groups_storage_for_a_specific_scope.">Start process groups storage for a specific scope.</a></h4>
</p>
<h3 class="function"><a name="unregister_name-1">unregister_name/1</a></h3>
<div class="spec">
<p><tt>unregister_name(GroupName::<a href="#type-via_name">via_name()</a>) -> ok | error</tt><br></p>
</div><p>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()})</p>
<h3 class="function"><a name="whereis_name-1">whereis_name/1</a></h3>
<div class="spec">
<p><tt>whereis_name(GroupName::<a href="#type-via_name">via_name()</a>) -> pid() | undefined</tt><br></p>
</div><p>
<h4><a name="Function_to_provide_via_process_registration_functionality.">Function to provide via process registration functionality.</a></h4>
Use within an OTP behavior by specifying {via, cpg, via_name()} for the
process registration (instead of {local, atom()} or {global, atom()})</p>
<h3 class="function"><a name="which_groups-0">which_groups/0</a></h3>
<div class="spec">
<p><tt>which_groups() -> [<a href="#type-name">name()</a>]</tt><br></p>
</div><p>
<h4><a name="Get_all_the_groups_currently_defined.">Get all the groups currently defined.</a></h4>
</p>
<h3 class="function"><a name="which_groups-1">which_groups/1</a></h3>
<div class="spec">
<p><tt>which_groups(Scope::<a href="#type-scope">scope()</a> | pid() | pos_integer() | infinity) -> [<a href="#type-name">name()</a>]</tt><br></p>
</div><p>
<h4><a name="Get_all_the_groups_currently_defined_within_a_specific_scope.">Get all the groups currently defined within a specific scope.</a></h4>
</p>
<h3 class="function"><a name="which_groups-2">which_groups/2</a></h3>
<div class="spec">
<p><tt>which_groups(Scope::<a href="#type-scope">scope()</a> | pid(), Pid::pid() | pos_integer() | infinity) -> [<a href="#type-name">name()</a>]</tt><br></p>
</div><p>
<h4><a name="Get_all_the_groups_currently_defined_within_a_specific_scope.">Get all the groups currently defined within a specific scope.</a></h4>
</p>
<h3 class="function"><a name="which_groups-3">which_groups/3</a></h3>
<div class="spec">
<p><tt>which_groups(Scope::<a href="#type-scope">scope()</a>, Pid::pid(), Timeout::pos_integer() | infinity) -> [<a href="#type-name">name()</a>]</tt><br></p>
</div><p>
<h4><a name="Get_all_the_groups_currently_defined_within_a_specific_scope.">Get all the groups currently defined within a specific scope.</a></h4>
</p>
<hr>
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
<p><i>Generated by EDoc, Aug 8 2015, 20:06:50.</i></p>
</body>
</html>