summaryrefslogtreecommitdiff
path: root/lib/erl_interface/doc/src/registry.xml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/erl_interface/doc/src/registry.xml')
-rw-r--r--lib/erl_interface/doc/src/registry.xml642
1 files changed, 0 insertions, 642 deletions
diff --git a/lib/erl_interface/doc/src/registry.xml b/lib/erl_interface/doc/src/registry.xml
deleted file mode 100644
index 92858516d9..0000000000
--- a/lib/erl_interface/doc/src/registry.xml
+++ /dev/null
@@ -1,642 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE cref SYSTEM "cref.dtd">
-
-<cref>
- <header>
- <copyright>
- <year>1998</year><year>2020</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>registry</title>
- <prepared>Gordon Beaton</prepared>
- <responsible>Gordon Beaton</responsible>
- <docno></docno>
- <approved>Gordon Beaton</approved>
- <checked>Gordon Beaton</checked>
- <date>1998-07-07</date>
- <rev>A</rev>
- <file>registry.xml</file>
- </header>
- <lib>registry</lib>
- <libsummary>Store and back up key-value pairs.</libsummary>
- <description>
- <note><p>This functionality is deprecated as of OTP 23, and will be
- removed in OTP 24. Reasonably new <c>gcc</c> compilers will issue
- deprecation warnings. In order to disable these warnings, define the
- macro <c>EI_NO_DEPR_WARN</c>.</p></note>
-
- <p>This module provides support for storing key-value
- pairs in a table known as a registry, backing up registries to
- <seeerl marker="mnesia:mnesia">Mnesia</seeerl>
- in an atomic manner, and later restoring the contents of a
- registry from <c>Mnesia</c>.</p>
- </description>
-
- <funcs>
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_close(reg)</nametext></name>
- <fsummary>Close a registry.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- </type>
- <desc>
- <p>A registry that has previously been created with
- <c>ei_reg_open()</c> is closed, and all the objects it
- contains are freed.</p>
- <p><c>reg</c> is the registry to close.</p>
- <p>Returns <c>0</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_delete(reg,key)</nametext></name>
- <fsummary>Delete an object from the registry.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- </type>
- <desc>
- <p>Deletes an object from the registry. The object is not
- removed from the registry, it is only marked for later
- removal so that on later backups to <c>Mnesia</c>, the
- corresponding object can be removed from the <c>Mnesia</c> table as
- well. If another object is later created with the same key, the
- object will be reused. </p>
- <p>The object is removed from the registry after a call to
- <c>ei_reg_dump()</c> or <c>ei_reg_purge()</c>.
- </p>
- <list type="bulleted">
- <item><c>reg</c> is the registry containing
- <c>key</c>.</item>
- <item><c>key</c> is the object to remove.</item>
- </list>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_dump(fd,reg,mntab,flags)</nametext></name>
- <fsummary>Back up a registry to Mnesia.</fsummary>
- <type>
- <v>int fd;</v>
- <v>ei_reg *reg;</v>
- <v>const char *mntab;</v>
- <v>int flags;</v>
- </type>
- <desc>
- <p>Dumps the contents of a registry to a <c>Mnesia</c> table in an
- atomic manner, that is, either all data or no data is updated.
- If any errors are encountered while backing up
- the data, the entire operation is aborted.</p>
- <list type="bulleted">
- <item><c>fd</c> is an open connection to Erlang.
- <c>Mnesia</c> 3.0 or later must be running on the Erlang node.
- </item>
- <item><c>reg</c> is the registry to back up.</item>
- <item><c>mntab</c> is the name of the <c>Mnesia</c> table
- where the backed up data is to be placed. If the table does not
- exist, it is created automatically using configurable defaults.
- For information about configuring this behavior, see
- <seeerl marker="mnesia:mnesia"><c>Mnesia</c></seeerl>.</item>
- </list>
- <p>If <c>flags</c> is <c>0</c>, the backup includes only
- those objects that have been created, modified, or deleted since the
- last backup or restore (that is, an incremental backup). After the
- backup, any objects that were marked dirty are now clean, and any
- objects that had been marked for deletion are deleted.</p>
- <p>Alternatively, setting flags to <c>EI_FORCE</c> causes a full
- backup to be done, and <c>EI_NOPURGE</c> causes the deleted objects
- to be left in the registry afterwards. These can be bitwise OR'ed
- together if both behaviors are desired. If <c>EI_NOPURGE</c> was
- specified, <c>ei_reg_purge()</c> can be used to
- explicitly remove the deleted items from the registry later.</p>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>double</ret><nametext>ei_reg_getfval(reg,key)</nametext></name>
- <fsummary>Get a floating point object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- </type>
- <desc>
- <p>Gets the value associated with <c>key</c> in the
- registry. The value must be a floating point type.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object will be
- looked up.</item>
- <item><c>key</c> is the name of the object to look up.
- </item>
- </list>
- <p>On success, the function returns the value associated with
- <c>key</c>.
- If the object is not found or if it is not a floating point
- object, <c>-1.0</c> is returned. To avoid problems with in-band error
- reporting (that is, if you cannot distinguish between <c>-1.0</c> and
- a valid result), use the more general function
- <c>ei_reg_getval()</c> instead.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_getival(reg,key)</nametext></name>
- <fsummary>Get an integer object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- </type>
- <desc>
- <p>Gets the value associated with <c>key</c> in the
- registry. The value must be an integer.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object will be
- looked up.</item>
- <item><c>key</c> is the name of the object to look up.
- </item>
- </list>
- <p>On success, the function returns the value associated with
- <c>key</c>.
- If the object is not found or if it is not an integer
- object, <c>-1</c> is returned. To avoid problems with in-band error
- reporting (that is, if you cannot distinguish between <c>-1</c> and a
- valid result), use the more general function
- <c>ei_reg_getval()</c> instead.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>const void *</ret><nametext>ei_reg_getpval(reg,key,size)</nametext></name>
- <fsummary>Get a binary object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>int size;</v>
- </type>
- <desc>
- <p>Gets the value associated with <c>key</c> in the
- registry. The value must be a binary (pointer) type.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object will be
- looked up.</item>
- <item><c>key</c> is the name of the object to look up.
- </item>
- <item><c>size</c> is initialized to contain the length in
- bytes of the object, if it is found.</item>
- </list>
- <p>On success, the function returns the value associated with
- <c>key</c> and indicates its length in
- <c>size</c>.
- If the object is not found or if it is not a binary object,
- <c>NULL</c> is returned. To avoid problems with in-band error
- reporting (that is, if you cannot distinguish between <c>NULL</c> and
- a valid result), use the more general function
- <c>ei_reg_getval()</c> instead.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>const char *</ret><nametext>ei_reg_getsval(reg,key)</nametext></name>
- <fsummary>Get a string object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- </type>
- <desc>
- <p>Gets the value associated with <c>key</c> in the
- registry. The value must be a string.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object will be
- looked up.</item>
- <item><c>key</c> is the name of the object to look up.
- </item>
- </list>
- <p>On success, the function returns the value associated with
- <c>key</c>. If the object is not found or if it is not a
- string, <c>NULL</c> is returned. To avoid problems with in-band error
- reporting (that is, if you cannot distinguish between <c>NULL</c> and
- a valid result), use the more general function
- <c>ei_reg_getval()</c> instead.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_getval(reg,key,flags,v,...)</nametext></name>
- <fsummary>Get any object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>int flags;</v>
- <v>void *v (see below)</v>
- </type>
- <desc>
- <p>A general function for retrieving any kind of
- object from the registry.</p>
- <list type="bulleted">
- <item>
- <p><c>reg</c> is the registry where the object will be
- looked up.</p>
- </item>
- <item>
- <p><c>key</c> is the name of the object to look up.</p>
- </item>
- <item>
- <p><c>flags</c> indicates the type of object that you
- are looking for. If <c>flags</c> is <c>0</c>, any
- kind of object is returned.
- If <c>flags</c> is <c>EI_INT</c>, <c>EI_FLT</c>,
- <c>EI_STR</c>, or <c>EI_BIN</c>, then only values of
- that kind are returned.</p>
- <p>The buffer pointed to by <c>v</c>
- must be large enough to hold the return data, that is, it must be
- a pointer to one of <c>int</c>,
- <c>double</c>, <c>char*</c>, or
- <c>void*</c>, respectively.</p>
- <p>If <c>flags</c> is <c>EI_BIN</c>, a fifth argument
- <c>int *size</c> is required, so that the size of the
- object can be returned.</p>
- </item>
- </list>
- <p>On success, <c>v</c> (and <c>size</c> if the
- object is binary) is initialized with the value associated
- with <c>key</c>, and the function returns <c>EI_INT</c>,
- <c>EI_FLT</c>, <c>EI_STR</c>, or <c>EI_BIN</c>, indicating the type
- of object. On failure, <c>-1</c> is returned and the
- arguments are not updated.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_markdirty(reg,key)</nametext></name>
- <fsummary>Mark an object as dirty.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- </type>
- <desc>
- <p>Marks a registry object as dirty. This ensures that
- it is included in the next backup to <c>Mnesia</c>. Normally this
- operation is not necessary, as all of the normal registry
- 'set' functions do this automatically. However, if you have
- retrieved the value of a string or binary object from the
- registry and modified the contents, then the change is
- invisible to the registry and the object is assumed to be
- unmodified. This function allows you to make such modifications
- and then let the registry know about them.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry containing the object.
- </item>
- <item><c>key</c> is the name of the object to mark.
- </item>
- </list>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>ei_reg *</ret><nametext>ei_reg_open(size)</nametext></name>
- <fsummary>Create and open a registry.</fsummary>
- <type>
- <v>int size;</v>
- </type>
- <desc>
- <p>Opens (creates) a registry, which initially is empty. To
- close the registry later, use <c>ei_reg_close()</c>.</p>
- <p><c>size</c> is the approximate number of objects you
- intend to store in the registry. As the registry uses a hash table
- with collision chaining, no absolute upper limit exists on the
- number of objects that can be stored in it. However, for reasons
- of efficiency, it is a good idea to choose a number that is
- appropriate for your needs. To change the size later, use
- <c>ei_reg_resize()</c>. Notice that the number
- you provide is increased to the nearest larger prime number.</p>
- <p>Returns an empty registry on success, otherwise <c>NULL</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_purge(reg)</nametext></name>
- <fsummary>Remove deleted objects.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- </type>
- <desc>
- <p>Removes all objects marked for deletion. When objects
- are deleted with <c>ei_reg_delete()</c> they are not
- removed from the registry, only marked for later removal.
- On a later backup to <c>Mnesia</c>, the
- objects can also be removed from the <c>Mnesia</c> table. If you are
- not backing up to <c>Mnesia</c>, you may wish to remove the objects
- manually with this function.</p>
- <p><c>reg</c> is a registry containing objects marked for
- deletion.</p>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_resize(reg,newsize)</nametext></name>
- <fsummary>Resize a registry.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>int newsize;</v>
- </type>
- <desc>
- <p>Changes the size of a registry.</p>
- <p><c>newsize</c> is the new size to make the registry. The
- number is increased to the nearest larger prime number.</p>
- <p>On success, the registry is resized, all contents
- rehashed, and <c>0</c> is returned. On failure, the
- registry is left unchanged and <c>-1</c> is returned.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_restore(fd,reg,mntab)</nametext></name>
- <fsummary>Restore a registry from Mnesia.</fsummary>
- <type>
- <v>int fd;</v>
- <v>ei_reg *reg;</v>
- <v>const char *mntab;</v>
- </type>
- <desc>
- <p>The contents of a <c>Mnesia</c> table are read into the registry.</p>
- <list type="bulleted">
- <item><c>fd</c> is an open connection to Erlang.
- <c>Mnesia</c> 3.0 or later must be running on the Erlang node.
- </item>
- <item><c>reg</c> is the registry where the data is to be
- placed.</item>
- <item><c>mntab</c> is the name of the <c>Mnesia</c> table
- to read data from.</item>
- </list>
- <p>Notice that only tables of a certain format can be
- restored, that is, those that have been created and backed up to
- with <c>ei_reg_dump()</c>. If the registry was not empty
- before the operation, the contents of the table are added to the
- contents of the registry. If the table contains objects with the
- same keys as those already in the registry, the registry objects
- are overwritten with the new values. If the registry
- contains objects that were not in the table, they are
- unchanged by this operation.</p>
- <p>After the restore operation, the entire contents of the
- registry is marked as unmodified. Notice that this includes any
- objects that were modified before the restore and not
- overwritten by the restore.</p>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_setfval(reg,key,f)</nametext></name>
- <fsummary>Assign a floating point object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>double f;</v>
- </type>
- <desc>
- <p>Creates a key-value pair with the specified <c>key</c>
- and floating point value <c>f</c>. If an object already
- exists with the same <c>key</c>, the new value replaces
- the old one. If the previous value was a binary or string, it is
- freed with <c>free()</c>.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object is to be
- placed.</item>
- <item><c>key</c> is the object name.</item>
- <item><c>f</c> is the floating point value to assign.
- </item>
- </list>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_setival(reg,key,i)</nametext></name>
- <fsummary>Assign an integer object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>int i;</v>
- </type>
- <desc>
- <p>Creates a key-value pair with the specified <c>key</c>
- and integer value <c>i</c>. If an object already exists
- with the same <c>key</c>, the new value replaces the old
- one. If the previous value was a binary or string, it is freed with
- <c>free()</c>.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object is to be
- placed.</item>
- <item><c>key</c> is the object name.</item>
- <item><c>i</c> is the integer value to assign.</item>
- </list>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_setpval(reg,key,p,size)</nametext></name>
- <fsummary>Assign a binary object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>const void *p;</v>
- <v>int size;</v>
- </type>
- <desc>
- <p>Creates a key-value pair with the specified <c>key</c>
- whose "value" is the binary object pointed to by <c>p</c>.
- If an object already exists with the same <c>key</c>,
- the new value replaces the old one. If the previous value was a
- binary or string, it is freed with <c>free()</c>.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object is to be
- placed.</item>
- <item><c>key</c> is the object name.</item>
- <item><c>p</c> is a pointer to the binary object. The
- object itself must have been created through a single call to
- <c>malloc()</c> or a similar function, so that the
- registry can later delete it if necessary by calling
- <c>free()</c>.</item>
- <item><c>size</c> is the length in bytes of the binary
- object.</item>
- </list>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_setsval(reg,key,s)</nametext></name>
- <fsummary>Assign a string object.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>const char *s;</v>
- </type>
- <desc>
- <p>Creates a key-value pair with the specified <c>key</c>
- whose "value" is the specified string <c>s</c>. If an
- object already exists with the same <c>key</c>, the new
- value replaces the old one. If the previous value was a binary or
- string, it is freed with <c>free()</c>.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry where the object is to be
- placed.</item>
- <item><c>key</c> is the object name.</item>
- <item><c>s</c> is the string to assign. The string itself
- must have been created through a single call to
- <c>malloc()</c> or similar a function,
- so that the registry can later delete it if
- necessary by calling <c>free()</c>.</item>
- </list>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_setval(reg,key,flags,v,...)</nametext></name>
- <fsummary>Assign a value to any object type.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>int flags;</v>
- <v>v (see below)</v>
- </type>
- <desc>
- <p>Creates a key-value pair with the specified <c>key</c>
- whose value is specified by <c>v</c>. If an object already
- exists with the same <c>key</c>, the new value replaces
- the old one. If the previous value was a binary or string, it is freed
- with <c>free()</c>.</p>
- <list type="bulleted">
- <item>
- <p><c>reg</c> is the registry where the object is to be
- placed.</p>
- </item>
- <item>
- <p><c>key</c> is the object name.</p>
- </item>
- <item>
- <p><c>flags</c> indicates the type of the object
- specified by <c>v</c>. Flags must be one of
- <c>EI_INT</c>, <c>EI_FLT</c>, <c>EI_STR</c>, and <c>EI_BIN</c>,
- indicating whether
- <c>v</c> is <c>int</c>,
- <c>double</c>, <c>char*</c>, or
- <c>void*</c>.</p>
- <p>If <c>flags</c> is <c>EI_BIN</c>, a fifth argument
- <c>size</c> is required, indicating the size
- in bytes of the object pointed to by <c>v</c>.</p>
- </item>
- </list>
- <p>If you wish to store an arbitrary pointer in the registry,
- specify a <c>size</c> of <c>0</c>. In this case, the
- object itself is not transferred by an
- <c>ei_reg_dump()</c> operation, only the pointer
- value.</p>
- <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_stat(reg,key,obuf)</nametext></name>
- <fsummary>Get object information.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>const char *key;</v>
- <v>struct ei_reg_stat *obuf;</v>
- </type>
- <desc>
- <p>Returns information about an object.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry containing the object.
- </item>
- <item><c>key</c> is the object name.</item>
- <item><c>obuf</c> is a pointer to an
- <c>ei_reg_stat</c> structure, defined as follows:</item>
- </list>
- <code type="none"><![CDATA[
-struct ei_reg_stat {
- int attr;
- int size;
-};
- ]]></code>
- <p>In <c>attr</c> the attributes of the object are stored
- as the logical <em>OR</em> of its type (one of <c>EI_INT</c>,
- <c>EI_FLT</c>, <c>EI_BIN</c>, and <c>EI_STR</c>),
- whether it is marked for deletion (<c>EI_DELET</c>), and whether it
- has been modified since the last backup to <c>Mnesia</c>
- (<c>EI_DIRTY</c>).</p>
- <p>Field <c>size</c> indicates the size in bytes required
- to store <c>EI_STR</c> (including the terminating <c>0</c>) and
- <c>EI_BIN</c> objects, or <c>0</c> for <c>EI_INT</c> and
- <c>EI_FLT</c>.</p>
- <p>Returns <c>0</c> and initializes <c>obuf</c> on success,
- otherwise <c>-1</c>.</p>
- </desc>
- </func>
-
- <func>
- <name since=""><ret>int</ret><nametext>ei_reg_tabstat(reg,obuf)</nametext></name>
- <fsummary>Get registry information.</fsummary>
- <type>
- <v>ei_reg *reg;</v>
- <v>struct ei_reg_tabstat *obuf;</v>
- </type>
- <desc>
- <p>Returns information about a registry. Using information
- returned by this function, you can see whether the size of the
- registry is suitable for the amount of data it contains.</p>
- <list type="bulleted">
- <item><c>reg</c> is the registry to return information
- about.</item>
- <item><c>obuf</c> is a pointer to an
- <c>ei_reg_tabstat</c> structure, defined as follows:
- </item>
- </list>
- <code type="none"><![CDATA[
-struct ei_reg_tabstat {
- int size;
- int nelem;
- int npos;
- int collisions;
-};
- ]]></code>
- <p>Field <c>size</c> indicates the number of hash positions
- in the registry. This is the number you provided when you
- created or last resized the registry, rounded up to the nearest
- prime number.</p>
- <list type="bulleted">
- <item><c>nelem</c> indicates the number of elements stored
- in the registry. It includes objects that are deleted but not
- purged.</item>
- <item><c>npos</c> indicates the number of unique positions
- that are occupied in the registry.</item>
- <item><c>collisions</c> indicates how many elements are
- sharing positions in the registry.</item>
- </list>
- <p>On success, <c>0</c> is returned and
- <c>obuf</c> is initialized to contain table statistics,
- otherwise <c>-1</c> is returned.</p>
- </desc>
- </func>
- </funcs>
-</cref>