Initial revision

This commit is contained in:
Owen Taylor 1999-08-16 17:58:30 +00:00
parent 4e858aebdb
commit 9231462089
58 changed files with 16612 additions and 0 deletions

7
docs/reference/AUTHORS Normal file
View File

@ -0,0 +1,7 @@
Damon Chaplin <damon@karuna.freeserve.co.uk> and others.
See:
http://www.gtk.org/rdp/status.html
for a complete list.

30
docs/reference/COPYING Normal file
View File

@ -0,0 +1,30 @@
This work may be reproduced and distributed in whole or in part, in
any medium, physical or electronic, so as long as this copyright
notice remains intact and unchanged on all copies. Commercial
redistribution is permitted and encouraged, but you may not
redistribute, in whole or in part, under terms more restrictive than
those under which you received it. If you redistribute a modified or
translated version of this work, you must also make the source code to
the modified or translated version available in electronic form
without charge. However, mere aggregation as part of a larger work
shall not count as a modification for this purpose.
All code examples in this work are placed into the public domain,
and may be used, modified and redistributed without restriction.
BECAUSE THIS WORK IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE WORK, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE WORK "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. SHOULD THE WORK PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE WORK AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
WORK, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

6
docs/reference/ChangeLog Normal file
View File

@ -0,0 +1,6 @@
Wed Aug 18 23:11:28 1999 Owen Taylor <otaylor@redhat.com>
* Import into CVS of glib-reference-1.1.3
Filled in some basic contents for AUTHORS
README, and README.cvs

0
docs/reference/NEWS Normal file
View File

14
docs/reference/README Normal file
View File

@ -0,0 +1,14 @@
This package contains the reference documentation
for GLib. For more information about Glib,
see:
http://www.gtk.org
For information about contributing to the
GLib/GTK+ reference documentation project, see:
http://www.gtk.org/rdp/
The GLib reference documentation is freely redistributable,
see the file COPYING for details.

View File

@ -0,0 +1,22 @@
Before making any changes to this module, please
contact:
Damon Chaplin <damon@karuna.freeserve.co.uk>
This will ensure that duplicate work does not occur,
and also make sure we know who has written what
parts of the documentation. See
http://www.gtk.org/rdp/
for more information.
By contributing work to the Reference Documentation
Project, you agree that it will be covered under the
license terms described in the file COPYING
included in this directory.

View File

@ -0,0 +1,46 @@
## Process this file with automake to produce Makefile.in
# The name of the module.
DOC_MODULE=glib
# The top-level SGML file.
DOC_MAIN_SGML_FILE=glib-docs.sgml
TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
scan:
gtkdoc-scan --module=$(DOC_MODULE) `glib-config --prefix`/include/glib.h `glib-config --prefix`/include/gmodule.h `glib-config --prefix`/lib/glib/include/glibconfig.h
templates: scan
gtkdoc-mktmpl --module=$(DOC_MODULE)
sgml:
gtkdoc-mkdb --module=$(DOC_MODULE)
html:
if ! test -d html ; then mkdir html ; fi
-cd html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
clean-local:
rm -f *~ *.bak *.hierarchy *.signals *.args *-unused.txt
maintainer-clean-local: clean
rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
install-data-local:
install -d -m 0755 $(TARGET_DIR)
install -m 0644 html/*.html $(TARGET_DIR)
install -m 0644 html/index.sgml $(TARGET_DIR)
gtkdoc-fixxref --module=$(DOC_MODULE) --html-dir=$(HTML_DIR)
EXTRA_DIST = \
$(DOC_MAIN_SGML_FILE) \
$(DOC_MODULE)-sections.txt \
glib-decl.txt
dist-hook:
mkdir $(distdir)/tmpl
cp -p tmpl/*.sgml $(distdir)/tmpl
.PHONY : html sgml templates scan

52
docs/reference/glib/autogen.sh Executable file
View File

@ -0,0 +1,52 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
ORIGDIR=`pwd`
cd $srcdir
PROJECT=GLib-Reference
TEST_TYPE=-f
FILE=glib-sections.txt
DIE=0
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "You must have autoconf installed to compile $PROJECT."
echo "Download the appropriate package for your distribution,"
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
DIE=1
}
(automake --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "You must have automake installed to compile $PROJECT."
echo "Get ftp://sourceware.cygnus.com/pub/automake/automake-1.4.tar.gz"
echo "(or a newer version if it is available)"
DIE=1
}
if test "$DIE" -eq 1; then
exit 1
fi
test $TEST_TYPE $FILE || {
echo "You must run this script in the top-level $PROJECT directory"
exit 1
}
if test -z "$*"; then
echo "I am going to run ./configure with no arguments - if you wish "
echo "to pass any to it, please specify them on the $0 command line."
fi
automake -a $am_opt
autoconf
cd $ORIGDIR
$srcdir/configure --enable-maintainer-mode "$@"
echo
echo "Now type 'make' to compile $PROJECT."

View File

@ -0,0 +1,21 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(glib-sections.txt)
AM_INIT_AUTOMAKE(glib-reference, 1.1.3)
AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs ])
AC_ISC_POSIX
AC_PROG_CC
if test "x$with_html_dir" = "x" ; then
HTML_DIR='${datadir}/gtk-doc/html'
else
HTML_DIR=$with_html_dir
fi
AC_SUBST(HTML_DIR)
AC_OUTPUT([Makefile])

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,99 @@
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
<!entity glib-Basic-Types SYSTEM "sgml/types.sgml">
<!entity glib-Limits-of-Basic-Types SYSTEM "sgml/limits.sgml">
<!entity glib-Standard-Macros SYSTEM "sgml/macros.sgml">
<!entity glib-Type-Conversion-Macros SYSTEM "sgml/type_conversion.sgml">
<!entity glib-Byte-Order-Macros SYSTEM "sgml/byte_order.sgml">
<!entity glib-Miscellaneous-Macros SYSTEM "sgml/macros_misc.sgml">
<!entity glib-Memory-Allocation SYSTEM "sgml/memory.sgml">
<!entity glib-Warnings-and-Assertions SYSTEM "sgml/warnings.sgml">
<!entity glib-Message-Logging SYSTEM "sgml/messages.sgml">
<!entity glib-Timers SYSTEM "sgml/timers.sgml">
<!entity glib-String-Utility-Functions SYSTEM "sgml/string_utils.sgml">
<!entity glib-Miscellaneous-Utility-Functions SYSTEM "sgml/misc_utils.sgml">
<!entity glib-Date-and-Time-Functions SYSTEM "sgml/date.sgml">
<!entity glib-The-Main-Event-Loop SYSTEM "sgml/main.sgml">
<!entity glib-Threads SYSTEM "sgml/threads.sgml">
<!entity glib-IO-Channels SYSTEM "sgml/iochannels.sgml">
<!entity glib-Hook-Functions SYSTEM "sgml/hooks.sgml">
<!entity glib-Lexical-Scanner SYSTEM "sgml/scanner.sgml">
<!entity glib-Dynamic-Loading-of-Modules SYSTEM "sgml/modules.sgml">
<!entity glib-Automatic-String-Completion SYSTEM "sgml/completion.sgml">
<!entity glib-Windows-Compatability-Functions SYSTEM "sgml/windows.sgml">
<!entity glib-Memory-Chunks SYSTEM "sgml/memory_chunks.sgml">
<!entity glib-Doubly-Linked-Lists SYSTEM "sgml/linked_lists_double.sgml">
<!entity glib-Singly-Linked-Lists SYSTEM "sgml/linked_lists_single.sgml">
<!entity glib-Hash-Tables SYSTEM "sgml/hash_tables.sgml">
<!entity glib-Strings SYSTEM "sgml/strings.sgml">
<!entity glib-String-Chunks SYSTEM "sgml/string_chunks.sgml">
<!entity glib-Arrays SYSTEM "sgml/arrays.sgml">
<!entity glib-Pointer-Arrays SYSTEM "sgml/arrays_pointer.sgml">
<!entity glib-Byte-Arrays SYSTEM "sgml/arrays_byte.sgml">
<!entity glib-Balanced-Binary-Trees SYSTEM "sgml/trees-binary.sgml">
<!entity glib-N-ary-Trees SYSTEM "sgml/trees-nary.sgml">
<!entity glib-Quarks SYSTEM "sgml/quarks.sgml">
<!entity glib-Keyed-Data-Lists SYSTEM "sgml/datalist.sgml">
<!entity glib-Datasets SYSTEM "sgml/datasets.sgml">
<!entity glib-Relations-and-Tuples SYSTEM "sgml/relations.sgml">
<!entity glib-Caches SYSTEM "sgml/caches.sgml">
<!entity glib-Memory-Allocators SYSTEM "sgml/allocators.sgml">
]>
<book id="index">
<bookinfo>
<title>GLib Reference Manual</title>
</bookinfo>
<chapter id="glib-fundamentals">
<title>GLib Fundamentals</title>
&glib-Basic-Types;
&glib-Limits-of-Basic-Types;
&glib-Standard-Macros;
&glib-Type-Conversion-Macros;
&glib-Byte-Order-Macros;
&glib-Miscellaneous-Macros;
</chapter>
<chapter id="glib-core">
<title>GLib Core Application Support</title>
&glib-The-Main-Event-Loop;
&glib-Threads;
&glib-Dynamic-Loading-of-Modules;
&glib-Memory-Allocation;
&glib-IO-Channels;
&glib-Warnings-and-Assertions;
&glib-Message-Logging;
</chapter>
<chapter id="glib-utilities">
<title>GLib Utilities</title>
&glib-String-Utility-Functions;
&glib-Date-and-Time-Functions;
&glib-Hook-Functions;
&glib-Miscellaneous-Utility-Functions;
&glib-Lexical-Scanner;
&glib-Automatic-String-Completion;
&glib-Timers;
&glib-Windows-Compatability-Functions;
</chapter>
<chapter id="glib-data-types">
<title>GLib Data Types</title>
&glib-Memory-Chunks;
&glib-Doubly-Linked-Lists;
&glib-Singly-Linked-Lists;
&glib-Hash-Tables;
&glib-Strings;
&glib-String-Chunks;
&glib-Arrays;
&glib-Pointer-Arrays;
&glib-Byte-Arrays;
&glib-Balanced-Binary-Trees;
&glib-N-ary-Trees;
&glib-Quarks;
&glib-Keyed-Data-Lists;
&glib-Datasets;
&glib-Relations-and-Tuples;
&glib-Caches;
&glib-Memory-Allocators;
</chapter>
</book>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
Damon Chaplin <damon@karuna.freeserve.co.uk> and others.
See:
http://www.gtk.org/rdp/status.html
for a complete list.

View File

@ -0,0 +1,30 @@
This work may be reproduced and distributed in whole or in part, in
any medium, physical or electronic, so as long as this copyright
notice remains intact and unchanged on all copies. Commercial
redistribution is permitted and encouraged, but you may not
redistribute, in whole or in part, under terms more restrictive than
those under which you received it. If you redistribute a modified or
translated version of this work, you must also make the source code to
the modified or translated version available in electronic form
without charge. However, mere aggregation as part of a larger work
shall not count as a modification for this purpose.
All code examples in this work are placed into the public domain,
and may be used, modified and redistributed without restriction.
BECAUSE THIS WORK IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE WORK, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE WORK "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. SHOULD THE WORK PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE WORK AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
WORK, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

View File

@ -0,0 +1,6 @@
Wed Aug 18 23:11:28 1999 Owen Taylor <otaylor@redhat.com>
* Import into CVS of glib-reference-1.1.3
Filled in some basic contents for AUTHORS
README, and README.cvs

View File

@ -0,0 +1,46 @@
## Process this file with automake to produce Makefile.in
# The name of the module.
DOC_MODULE=glib
# The top-level SGML file.
DOC_MAIN_SGML_FILE=glib-docs.sgml
TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
scan:
gtkdoc-scan --module=$(DOC_MODULE) `glib-config --prefix`/include/glib.h `glib-config --prefix`/include/gmodule.h `glib-config --prefix`/lib/glib/include/glibconfig.h
templates: scan
gtkdoc-mktmpl --module=$(DOC_MODULE)
sgml:
gtkdoc-mkdb --module=$(DOC_MODULE)
html:
if ! test -d html ; then mkdir html ; fi
-cd html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
clean-local:
rm -f *~ *.bak *.hierarchy *.signals *.args *-unused.txt
maintainer-clean-local: clean
rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
install-data-local:
install -d -m 0755 $(TARGET_DIR)
install -m 0644 html/*.html $(TARGET_DIR)
install -m 0644 html/index.sgml $(TARGET_DIR)
gtkdoc-fixxref --module=$(DOC_MODULE) --html-dir=$(HTML_DIR)
EXTRA_DIST = \
$(DOC_MAIN_SGML_FILE) \
$(DOC_MODULE)-sections.txt \
glib-decl.txt
dist-hook:
mkdir $(distdir)/tmpl
cp -p tmpl/*.sgml $(distdir)/tmpl
.PHONY : html sgml templates scan

View File

View File

@ -0,0 +1,14 @@
This package contains the reference documentation
for GLib. For more information about Glib,
see:
http://www.gtk.org
For information about contributing to the
GLib/GTK+ reference documentation project, see:
http://www.gtk.org/rdp/
The GLib reference documentation is freely redistributable,
see the file COPYING for details.

View File

@ -0,0 +1,22 @@
Before making any changes to this module, please
contact:
Damon Chaplin <damon@karuna.freeserve.co.uk>
This will ensure that duplicate work does not occur,
and also make sure we know who has written what
parts of the documentation. See
http://www.gtk.org/rdp/
for more information.
By contributing work to the Reference Documentation
Project, you agree that it will be covered under the
license terms described in the file COPYING
included in this directory.

View File

@ -0,0 +1,65 @@
<!-- ##### SECTION Title ##### -->
Memory Allocators
<!-- ##### SECTION Short_Description ##### -->
allocates chunks of memory for #GList, #GSList and #GNode.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GAllocator is used as an efficient way to allocate small pieces of
memory for use with the #GList, #GSList and #GNode data structures.
It uses a #GMemChunk so elements are allocated in groups, rather than
individually.
</para>
<para>
The #GList, #GSList and #GNode implementations create default #GAllocator
objects, which are probably sufficient for most purposes. These default
allocators use blocks of 128 elements.
</para>
<para>
To use your own #GAllocator, create it with g_allocator_new(). Then
use g_list_push_allocator(), g_slist_push_allocator() or
g_node_push_allocator() before any code which allocates new #GList, #GSList
or #GNode elements respectively. After allocating the new elements, you must
use g_list_pop_allocator(), g_slist_pop_allocator() or g_node_pop_allocator()
to restore the previous allocators.
</para>
<para>
Note that you cannot use the same allocator for #GList, #GSList and #GNode
elements. Each must use separate allocators.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GAllocator ##### -->
<para>
The #GAllocator struct contains private data. and should only be accessed
using the following functions.
</para>
<!-- ##### FUNCTION g_allocator_new ##### -->
<para>
Creates a new #GAllocator.
</para>
@name: the name of the #GAllocator. This name is used to set the name of the
#GMemChunk used by the #GAllocator, and is only used for debugging.
@n_preallocs: the number of elements in each block of memory allocated.
Larger blocks mean less calls to g_malloc(), but some memory may be wasted.
(GLib uses 128 elements per block by default.) The value must be between 1
and 65535.
@Returns: a new #GAllocator.
<!-- ##### FUNCTION g_allocator_free ##### -->
<para>
Frees all of the memory allocated by the #GAllocator.
</para>
@allocator: a #GAllocator.

View File

@ -0,0 +1,224 @@
<!-- ##### SECTION Title ##### -->
Arrays
<!-- ##### SECTION Short_Description ##### -->
arrays of arbitrary elements which grow automatically as elements are added.
<!-- ##### SECTION Long_Description ##### -->
<para>
Arrays are similar to standard C arrays, except that they grow automatically
as elements are added.
</para>
<para>
Array elements can be of any size (though all elements of one array are the
same size), and the array can be automatically cleared to '0's and
zero-terminated.
</para>
<para>
To create a new array use g_array_new().
</para>
<para>
To add elements to an array, use g_array_append_val(), g_array_append_vals(),
g_array_prepend_val(), and g_array_prepend_vals().
</para>
<para>
To access an element of an array, use g_array_index().
</para>
<para>
To set the size of an array, use g_array_set_size().
</para>
<para>
To free an array, use g_array_free().
</para>
<example>
<title>Using a GArray to store gint values.</title>
<programlisting>
GArray *garray;
gint i;
/* We create a new array to store gint values.
We don't want it zero-terminated or cleared to 0's. */
garray = g_array_new (FALSE, FALSE, sizeof (gint));
for (i = 0; i < 10000; i++)
g_array_append_val (garray, i);
for (i = 0; i < 10000; i++)
if (g_array_index (garray, gint, i) != i)
g_print ("ERROR: got %d instead of %d\n",
g_array_index (garray, gint, i), i);
g_array_free (garray, TRUE);
</programlisting></example>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GArray ##### -->
<para>
Contains the public fields of an <link linkend="glib-arrays">Array</link>.
The <structfield>data</structfield> field points to the element data.
It may change as elements are added to the array.
The <structfield>len</structfield> field contains the number of elements
in the array.
</para>
@data:
@len:
<!-- ##### FUNCTION g_array_new ##### -->
<para>
Creates a new #GArray.
</para>
@zero_terminated: TRUE if the array should have an extra element at the end
which is set to '0'.
@clear: TRUE if #GArray elements should be automatically cleared to '0'
when they are allocated.
@element_size: the size of each element in bytes.
@Returns: the new #GArray.
<!-- ##### MACRO g_array_append_val ##### -->
<para>
Adds the value on to the end of the array.
The array will grow in size automatically if necessary.
</para>
<note>
<para>
g_array_append_val() is a macro which uses a reference to the value
parameter @v. This means that you cannot use it with literal values
such as "27". You must use variables.
</para>
</note>
@a: a #GArray.
@v: the value to append to the #GArray.
@Returns: the #GArray.
<!-- ##### FUNCTION g_array_append_vals ##### -->
<para>
Adds @len elements onto the end of the array.
</para>
@array: a #GArray.
@data: a pointer to the elements to append to the end of the array.
@len: the number of elements to append.
@Returns: the #GArray.
<!-- ##### MACRO g_array_prepend_val ##### -->
<para>
Adds the value on to the start of the array.
The array will grow in size automatically if necessary.
</para>
<para>
This operation is slower than g_array_append_val() since the existing elements
in the array have to be moved to make space for the new element.
</para>
<note>
<para>
g_array_prepend_val() is a macro which uses a reference to the value
parameter @v. This means that you cannot use it with literal values
such as "27". You must use variables.
</para>
</note>
@a: a #GArray.
@v: the value to prepend to the #GArray.
@Returns: the #GArray.
<!-- ##### FUNCTION g_array_prepend_vals ##### -->
<para>
Adds @len elements onto the start of the array.
</para>
<para>
This operation is slower than g_array_append_vals() since the existing elements
in the array have to be moved to make space for the new elements.
</para>
@array: a #GArray.
@data: a pointer to the elements to prepend to the start of the array.
@len: the number of elements to prepend.
@Returns: the #GArray.
<!-- ##### MACRO g_array_insert_val ##### -->
<para>
</para>
@a:
@i:
@v:
<!-- ##### FUNCTION g_array_insert_vals ##### -->
<para>
</para>
@array:
@index:
@data:
@len:
@Returns:
<!-- ##### FUNCTION g_array_remove_index ##### -->
<para>
</para>
@array:
@index:
@Returns:
<!-- ##### FUNCTION g_array_remove_index_fast ##### -->
<para>
</para>
@array:
@index:
@Returns:
<!-- ##### MACRO g_array_index ##### -->
<para>
Returns the element of a #GArray at the given index.
The return value is cast to the given type.
FIXME: need more info on how it works with structures.
</para>
@a: a #GArray.
@t: the type of the elements.
@i: the index of the element to return.
@Returns: the element of the #GArray at the index given by @i.
<!-- ##### FUNCTION g_array_set_size ##### -->
<para>
Sets the size of the array, expanding it if necessary.
If the array was created with clear set to TRUE, the new elements are set to 0.
</para>
@array: a #GArray.
@length: the new size of the #GArray.
@Returns: the #GArray.
<!-- ##### FUNCTION g_array_free ##### -->
<para>
Frees the memory allocated for the #GArray.
If free_segment is TRUE it frees the actual element data as well.
</para>
@array: a #GArray.
@free_segment: if TRUE the actual element data is freed as well.

View File

@ -0,0 +1,135 @@
<!-- ##### SECTION Title ##### -->
Byte Arrays
<!-- ##### SECTION Short_Description ##### -->
arrays of bytes, which grow automatically as elements are added.
<!-- ##### SECTION Long_Description ##### -->
<para>
GByteArray is based on #GArray, to provide arrays of bytes which grow
automatically as elements are added.
</para>
<para>
To create a new #GByteArray use g_byte_array_new().
</para>
<para>
To add elements to a #GByteArray, use g_byte_array_append(), and
g_byte_array_prepend().
</para>
<para>
To set the size of a GByteArray, use g_byte_array_set_size().
</para>
<para>
To free a GByteArray, use g_byte_array_free().
</para>
<example>
<title>Using a GByteArray.</title>
<programlisting>
GByteArray *gbarray;
gint i;
gbarray = g_byte_array_new ();
for (i = 0; i < 10000; i++)
g_byte_array_append (gbarray, (guint8*) "abcd", 4);
for (i = 0; i < 10000; i++)
{
g_assert (gbarray->data[4*i] == 'a');
g_assert (gbarray->data[4*i+1] == 'b');
g_assert (gbarray->data[4*i+2] == 'c');
g_assert (gbarray->data[4*i+3] == 'd');
}
g_byte_array_free (gbarray, TRUE);
</programlisting></example>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GByteArray ##### -->
<para>
The GByteArray struct allows access to the public fields of a GByteArray.
The <structfield>data</structfield> field points to the element data.
It may change as elements are added to the array.
The <structfield>len</structfield> field contains the number of elements
in the array.
</para>
@data:
@len:
<!-- ##### FUNCTION g_byte_array_new ##### -->
<para>
Creates a new #GByteArray.
</para>
@Returns: the new #GByteArray.
<!-- ##### FUNCTION g_byte_array_append ##### -->
<para>
Adds the given bytes to the end of the #GByteArray.
The array will grow in size automatically if necessary.
</para>
@array: a #GByteArray.
@data: the byte data to be added.
@len: the number of bytes to add.
@Returns: the #GByteArray.
<!-- ##### FUNCTION g_byte_array_prepend ##### -->
<para>
Adds the given data to the start of the #GByteArray.
The array will grow in size automatically if necessary.
</para>
@array: a #GByteArray.
@data: the byte data to be added.
@len: the number of bytes to add.
@Returns: the #GByteArray.
<!-- ##### FUNCTION g_byte_array_remove_index ##### -->
<para>
</para>
@array:
@index:
@Returns:
<!-- ##### FUNCTION g_byte_array_remove_index_fast ##### -->
<para>
</para>
@array:
@index:
@Returns:
<!-- ##### FUNCTION g_byte_array_set_size ##### -->
<para>
Sets the size of the #GByteArray, expanding it if necessary.
</para>
@array: a #GByteArray.
@length: the new size of the #GByteArray.
@Returns: the #GByteArray.
<!-- ##### FUNCTION g_byte_array_free ##### -->
<para>
Frees the memory allocated by the #GByteArray.
If free_segment is TRUE it frees the actual byte data.
</para>
@array: a #GByteArray.
@free_segment: if TRUE the actual byte data is freed as well.

View File

@ -0,0 +1,182 @@
<!-- ##### SECTION Title ##### -->
Pointer Arrays
<!-- ##### SECTION Short_Description ##### -->
arrays of pointers to any type of data, which grow automatically as new
elements are added.
<!-- ##### SECTION Long_Description ##### -->
<para>
Pointer Arrays are similar to Arrays but are used only for storing pointers.
</para>
<note>
<para>
If you remove elements from the array, elements at the end of the array
are moved into the space previously occupied by the removed element.
This means that you should not rely on the index of particular elements
remaining the same. You should also be careful when deleting elements while
iterating over the array.
</para>
</note>
<para>
To create a pointer array, use g_ptr_array_new().
</para>
<para>
To add elements to a pointer array, use g_ptr_array_add().
</para>
<para>
To remove elements from a pointer array, use g_ptr_array_remove(), and
g_ptr_array_remove_index().
</para>
<para>
To access an element of a pointer array, use g_ptr_array_index().
</para>
<para>
To set the size of a pointer array, use g_ptr_array_set_size().
</para>
<para>
To free a pointer array, use g_ptr_array_free().
</para>
<example>
<title>Using a GPtrArray.</title>
<programlisting>
GPtrArray *gparray;
gchar *string1 = "one", *string2 = "two", *string3 = "three";
gparray = g_ptr_array_new ();
g_ptr_array_add (gparray, (gpointer) string1);
g_ptr_array_add (gparray, (gpointer) string2);
g_ptr_array_add (gparray, (gpointer) string3);
if (g_ptr_array_index (gparray, 0) != (gpointer) string1)
g_print ("ERROR: got %p instead of %p\n",
g_ptr_array_index (gparray, 0), string1);
g_ptr_array_free (gparray, TRUE);
</programlisting></example>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GPtrArray ##### -->
<para>
Contains the public fields of a pointer array.
The <structfield>pdata</structfield> field points to the array of pointers,
which may as when the array grows.
The <structfield>len</structfield> field is the number of pointers in the
array.
</para>
@pdata:
@len:
<!-- ##### FUNCTION g_ptr_array_new ##### -->
<para>
Creates a new #GPtrArray.
</para>
@Returns: the new #GPtrArray.
<!-- ##### FUNCTION g_ptr_array_add ##### -->
<para>
Adds a pointer to the end of the pointer array.
The array will grow in size automatically if necessary.
</para>
@array: a #GPtrArray.
@data: the pointer to add.
<!-- ##### FUNCTION g_ptr_array_remove ##### -->
<para>
Removes the first occurrence of given pointer from the pointer array.
It returns TRUE if the pointer was removed, or FALSE if the pointer
was not found.
</para>
<note>
<para>
If you remove elements from the array, elements at the end of the array
are moved into the space previously occupied by the removed element.
This means that you should not rely on the index of particular elements
remaining the same. You should also be careful when deleting elements while
iterating over the array.
</para>
</note>
@array: a #GPtrArray.
@data: the pointer to remove.
@Returns: TRUE if the pointer is removed. FALSE if the pointer is not found
in the array.
<!-- ##### FUNCTION g_ptr_array_remove_index ##### -->
<para>
Removes the pointer at the given index from the pointer array.
</para>
<note>
<para>
If you remove elements from the array, elements at the end of the array
are moved into the space previously occupied by the removed element.
This means that you should not rely on the index of particular elements
remaining the same. You should also be careful when deleting elements while
iterating over the array.
</para>
</note>
@array: a #GPtrArray.
@index: the index of the pointer to remove.
@Returns: the pointer which was removed.
<!-- ##### FUNCTION g_ptr_array_remove_fast ##### -->
<para>
</para>
@array:
@data:
@Returns:
<!-- ##### FUNCTION g_ptr_array_remove_index_fast ##### -->
<para>
</para>
@array:
@index:
@Returns:
<!-- ##### FUNCTION g_ptr_array_set_size ##### -->
<para>
Sets the size of the array, expanding it if necessary.
New elements are set to NULL.
</para>
@array: a #GPtrArray.
@length: the new length of the pointer array.
<!-- ##### MACRO g_ptr_array_index ##### -->
<para>
Returns the pointer at the given index of the pointer array.
</para>
@array: a #GPtrArray.
@index: the index of the pointer to return.
@Returns: the pointer at the given index.
<!-- ##### FUNCTION g_ptr_array_free ##### -->
<para>
Frees all of the memory allocated for the pointer array.
</para>
@array: a #GPtrArray.
@free_seg: if TRUE the actual element data is freed as well.

View File

@ -0,0 +1,545 @@
<!-- ##### SECTION Title ##### -->
Byte Order Macros
<!-- ##### SECTION Short_Description ##### -->
a portable way to convert between different byte orders.
<!-- ##### SECTION Long_Description ##### -->
<para>
These macros provide a portable way to determine the host byte order
and to convert values between different byte orders.
</para>
<para>
The byte order is the order in which bytes are stored to create larger
data types such as the #gint and #glong values.
The host byte order is the byte order used on the current machine.
</para>
<para>
Some processors store the most significant bytes (i.e. the bytes that
hold the largest part of the value) first. These are known as big-endian
processors.
</para>
<para>
Other processors (notably the x86 family) store the most significant byte
last. These are known as little-endian processors.
</para>
<para>
Finally, to complicate matters, some other processors store the bytes in
a rather curious order known as PDP-endian. For a 4-byte word, the 3rd
most significant byte is stored first, then the 4th, then the 1st and finally
the 2nd.
</para>
<para>
Obviously there is a problem when these different processors communicate
with each other, for example over networks or by using binary file formats.
This is where these macros come in.
They are typically used to convert values into a byte order
which has been agreed on for use when communicating between different
processors. The Internet uses what is known as 'network byte order'
as the standard byte order (which is in fact the big-endian byte order).
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO G_BYTE_ORDER ##### -->
<para>
The host byte order.
This can be either #G_LITTLE_ENDIAN or #G_BIG_ENDIAN (support for
#G_PDP_ENDIAN may be added in future.)
</para>
<!-- ##### MACRO G_LITTLE_ENDIAN ##### -->
<para>
Specifies one of the possible types of byte order.
See #G_BYTE_ORDER.
</para>
<!-- ##### MACRO G_BIG_ENDIAN ##### -->
<para>
Specifies one of the possible types of byte order.
See #G_BYTE_ORDER.
</para>
<!-- ##### MACRO G_PDP_ENDIAN ##### -->
<para>
Specifies one of the possible types of byte order (currently unused).
See #G_BYTE_ORDER.
</para>
<!-- ##### MACRO g_htonl ##### -->
<para>
Converts a 32-bit integer value from host to network byte order.
</para>
@val: a 32-bit integer value in host byte order.
@Returns: @val converted to network byte order.
<!-- ##### MACRO g_htons ##### -->
<para>
Converts a 16-bit integer value from host to network byte order.
</para>
@val: a 16-bit integer value in host byte order.
@Returns: @val converted to network byte order.
<!-- ##### MACRO g_ntohl ##### -->
<para>
Converts a 32-bit integer value from network to host byte order.
</para>
@val: a 32-bit integer value in network byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO g_ntohs ##### -->
<para>
Converts a 16-bit integer value from network to host byte order.
</para>
@val: a 16-bit integer value in network byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT_FROM_BE ##### -->
<para>
Converts a #gint value from big-endian to host byte order.
</para>
@val: a #gint value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT_FROM_LE ##### -->
<para>
Converts a #gint value from little-endian to host byte order.
</para>
@val: a #gint value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT_TO_BE ##### -->
<para>
Converts a #gint value from host byte order to big-endian.
</para>
@val: a #gint value in host byte order.
@Returns: @val converted to big-endian byte order.
<!-- ##### MACRO GINT_TO_LE ##### -->
<para>
Converts a #gint value from host byte order to little-endian.
</para>
@val: a #gint value in host byte order.
@Returns: @val converted to little-endian byte order.
<!-- ##### MACRO GUINT_FROM_BE ##### -->
<para>
Converts a #guint value from big-endian to host byte order.
</para>
@val: a #guint value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT_FROM_LE ##### -->
<para>
Converts a #guint value from little-endian to host byte order.
</para>
@val: a #guint value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT_TO_BE ##### -->
<para>
Converts a #guint value from host byte order to big-endian.
</para>
@val: a #guint value in host byte order.
@Returns: @val converted to big-endian byte order.
<!-- ##### MACRO GUINT_TO_LE ##### -->
<para>
Converts a #guint value from host byte order to little-endian.
</para>
@val: a #guint value in host byte order.
@Returns: @val converted to little-endian byte order.
<!-- ##### MACRO GLONG_FROM_BE ##### -->
<para>
Converts a #glong value from big-endian to the host byte order.
</para>
@val: a #glong value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GLONG_FROM_LE ##### -->
<para>
Converts a #glong value from little-endian to host byte order.
</para>
@val: a #glong value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GLONG_TO_BE ##### -->
<para>
Converts a #glong value from host byte order to big-endian.
</para>
@val: a #glong value in host byte order.
@Returns: @val converted to big-endian byte order.
<!-- ##### MACRO GLONG_TO_LE ##### -->
<para>
Converts a #glong value from host byte order to little-endian.
</para>
@val: a #glong value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GULONG_FROM_BE ##### -->
<para>
Converts a #gulong value from big-endian to host byte order.
</para>
@val: a #gulong value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GULONG_FROM_LE ##### -->
<para>
Converts a #gulong value from little-endian to host byte order.
</para>
@val: a #gulong value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GULONG_TO_BE ##### -->
<para>
Converts a #gulong value from host byte order to big-endian.
</para>
@val: a #gulong value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GULONG_TO_LE ##### -->
<para>
Converts a #gulong value from host byte order to little-endian.
</para>
@val: a #gulong value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GINT16_FROM_BE ##### -->
<para>
Converts a #gint16 value from big-endian to host byte order.
</para>
@val: a #gint16 value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT16_FROM_LE ##### -->
<para>
Converts a #gint16 value from little-endian to host byte order.
</para>
@val: a #gint16 value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT16_TO_BE ##### -->
<para>
Converts a #gint16 value from host byte order to big-endian.
</para>
@val: a #gint16 value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GINT16_TO_LE ##### -->
<para>
Converts a #gint16 value from host byte order to little-endian.
</para>
@val: a #gint16 value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GUINT16_FROM_BE ##### -->
<para>
Converts a #guint16 value from big-endian to host byte order.
</para>
@val: a #guint16 value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT16_FROM_LE ##### -->
<para>
Converts a #guint16 value from little-endian to host byte order.
</para>
@val: a #guint16 value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT16_TO_BE ##### -->
<para>
Converts a #guint16 value from host byte order to big-endian.
</para>
@val: a #guint16 value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GUINT16_TO_LE ##### -->
<para>
Converts a #guint16 value from host byte order to little-endian.
</para>
@val: a #guint16 value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GINT32_FROM_BE ##### -->
<para>
Converts a #gint32 value from big-endian to host byte order.
</para>
@val: a #gint32 value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT32_FROM_LE ##### -->
<para>
Converts a #gint32 value from little-endian to host byte order.
</para>
@val: a #gint32 value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT32_TO_BE ##### -->
<para>
Converts a #gint32 value from host byte order to big-endian.
</para>
@val: a #gint32 value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GINT32_TO_LE ##### -->
<para>
Converts a #gint32 value from host byte order to little-endian.
</para>
@val: a #gint32 value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GUINT32_FROM_BE ##### -->
<para>
Converts a #guint32 value from big-endian to host byte order.
</para>
@val: a #guint32 value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT32_FROM_LE ##### -->
<para>
Converts a #guint32 value from little-endian to host byte order.
</para>
@val: a #guint32 value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT32_TO_BE ##### -->
<para>
Converts a #guint32 value from host byte order to big-endian.
</para>
@val: a #guint32 value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GUINT32_TO_LE ##### -->
<para>
Converts a #guint32 value from host byte order to little-endian.
</para>
@val: a #guint32 value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GINT64_FROM_BE ##### -->
<para>
Converts a #gint64 value from big-endian to host byte order.
</para>
@val: a #gint64 value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT64_FROM_LE ##### -->
<para>
Converts a #gint64 value from little-endian to host byte order.
</para>
@val: a #gint64 value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GINT64_TO_BE ##### -->
<para>
Converts a #gint64 value from host byte order to big-endian.
</para>
@val: a #gint64 value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GINT64_TO_LE ##### -->
<para>
Converts a #gint64 value from host byte order to little-endian.
</para>
@val: a #gint64 value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GUINT64_FROM_BE ##### -->
<para>
Converts a #guint64 value from big-endian to host byte order.
</para>
@val: a #guint64 value in big-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT64_FROM_LE ##### -->
<para>
Converts a #guint64 value from little-endian to host byte order.
</para>
@val: a #guint64 value in little-endian byte order.
@Returns: @val converted to host byte order.
<!-- ##### MACRO GUINT64_TO_BE ##### -->
<para>
Converts a #guint64 value from host byte order to big-endian.
</para>
@val: a #guint64 value in host byte order.
@Returns: @val converted to big-endian.
<!-- ##### MACRO GUINT64_TO_LE ##### -->
<para>
Converts a #guint64 value from host byte order to little-endian.
</para>
@val: a #guint64 value in host byte order.
@Returns: @val converted to little-endian.
<!-- ##### MACRO GUINT16_SWAP_BE_PDP ##### -->
<para>
Converts a #guint16 value between big-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint16 value in big-endian or pdp-endian byte order.
@Returns: @val converted to the opposite byte order.
<!-- ##### MACRO GUINT16_SWAP_LE_BE ##### -->
<para>
Converts a #guint16 value between little-endian and big-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint16 value in little-endian or big-endian byte order.
@Returns: @val converted to the opposite byte order.
<!-- ##### MACRO GUINT16_SWAP_LE_PDP ##### -->
<para>
Converts a #guint16 value between little-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint16 value in little-endian or pdp-endian byte order.
@Returns: @val converted to the opposite byte order.
<!-- ##### MACRO GUINT32_SWAP_BE_PDP ##### -->
<para>
Converts a #guint32 value between big-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint32 value in big-endian or pdp-endian byte order.
@Returns: @val converted to the opposite byte order.
<!-- ##### MACRO GUINT32_SWAP_LE_BE ##### -->
<para>
Converts a #guint32 value between little-endian and big-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint32 value in little-endian or big-endian byte order.
@Returns: @val converted to the opposite byte order.
<!-- ##### MACRO GUINT32_SWAP_LE_PDP ##### -->
<para>
Converts a #guint32 value between little-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint32 value in little-endian or pdp-endian byte order.
@Returns: @val converted to the opposite byte order.
<!-- ##### MACRO GUINT64_SWAP_LE_BE ##### -->
<para>
Converts a #guint64 value between little-endian and big-endian byte order.
The conversion is symmetric so it can be used both ways.
</para>
@val: a #guint64 value in little-endian or big-endian byte order.
@Returns: @val converted to the opposite byte order.

View File

@ -0,0 +1,152 @@
<!-- ##### SECTION Title ##### -->
Caches
<!-- ##### SECTION Short_Description ##### -->
allows sharing of complex data structures to save resources.
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GCache allows sharing of complex data structures, in order to save
system resources.
</para>
<para>
GTK uses a #GCache for both GtkStyles and GdkGCs. These consume a lot of
resouces, so a #GCache is used to see if a GtkStyle or GdkGC with the
required properties already exists. If it does, then the existing
GtkStyle or GdkGC is used instead of creating a new one.
</para>
<para>
#GCache uses keys and values.
A #GCache key describes the properties of a particular resource.
A #GCache value is the actual resource.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GCache ##### -->
<para>
The #GCache struct is an opaque data structure containing information about
a #GCache. It should only be accesssed via the following functions.
</para>
<!-- ##### FUNCTION g_cache_new ##### -->
<para>
Creates a new GCache.
</para>
@value_new_func: a function to create a new object given a key.
This is called by g_cache_insert() if an object with the given key
does not already exist.
@value_destroy_func: a function to destroy an object. It is
called by g_cache_remove() when the object is no longer needed (i.e. its
reference count drops to 0).
@key_dup_func: a function to copy a key. It is called by
g_cache_insert() if the key does not already exist in the GCache.
@key_destroy_func: a function to destroy a key. It is
called by g_cache_remove() when the object is no longer needed (i.e. its
reference count drops to 0).
@hash_key_func: a function to create a hash value from a key.
@hash_value_func: a function to create a hash value from a value.
@key_compare_func: a function to compare two keys. It should return TRUE if
the two keys are equivalent.
@Returns: a new #GCache.
<!-- ##### FUNCTION g_cache_insert ##### -->
<para>
Gets the value corresponding to the given key, creating it if necessary.
It first checks if the value already exists in the #GCache, by using
the @key_compare_func function passed to g_cache_new().
If it does already exist it is returned, and its reference count is increased
by one.
If the value does not currently exist, if is created by calling the
@value_new_func. The key is duplicated by calling
@key_dup_func and the duplicated key and value are inserted
into the #GCache.
</para>
@cache: a #GCache.
@key: a key describing a #GCache object.
@Returns: a pointer to a #GCache value.
<!-- ##### FUNCTION g_cache_remove ##### -->
<para>
Decreases the reference count of the given value.
If it drops to 0 then the value and its corresponding key are destroyed,
using the @value_destroy_func and @key_destroy_func passed to g_cache_new().
</para>
@cache: a #GCache.
@value: the value to remove.
<!-- ##### FUNCTION g_cache_destroy ##### -->
<para>
Frees the memory allocated for the GCache.
</para>
<para>
Note that it does not destroy the keys and values which were contained in the
GCache.
</para>
@cache:
<!-- ##### FUNCTION g_cache_key_foreach ##### -->
<para>
Calls the given function for each of the keys in the #GCache.
</para>
@cache: a #GCache.
@func: the function to call with each #GCache key.
@user_data: user data to pass to the function.
<!-- ##### FUNCTION g_cache_value_foreach ##### -->
<para>
Calls the given function for each of the values in the #GCache.
</para>
@cache: a #GCache.
@func: the function to call with each #GCache value.
@user_data: user data to pass to the function.
<!-- ##### USER_FUNCTION GCacheDestroyFunc ##### -->
<para>
Specifies the type of the @value_destroy_func and @key_destroy_func functions
passed to g_cache_new().
The functions are passed a pointer to the #GCache key or #GCache value and
should free any memory and other resources associated with it.
</para>
@value: the #GCache value to destroy.
<!-- ##### USER_FUNCTION GCacheDupFunc ##### -->
<para>
Specifies the type of the @key_dup_func function passed to g_cache_new().
The function is passed a key (NOT a value as the prototype implies) and
should return a duplicate of the key.
</para>
@value: the #GCache key to destroy (NOT a #GCache value as it seems).
@Returns: a copy of the #GCache key.
<!-- ##### USER_FUNCTION GCacheNewFunc ##### -->
<para>
Specifies the type of the @value_new_func function passed to g_cache_new().
It is passed a #GCache key and should create the value corresponding to the
key.
</para>
@key: a #GCache key.
@Returns: a new #GCache value corresponding to the key.

View File

@ -0,0 +1,121 @@
<!-- ##### SECTION Title ##### -->
Automatic String Completion
<!-- ##### SECTION Short_Description ##### -->
support for automatic completion using a group of target strings.
<!-- ##### SECTION Long_Description ##### -->
<para>
#GCompletion provides support for automatic completion of a string using
any group of target strings. It is typically used for file name completion
as is common in many Unix shells.
</para>
<para>
A #GCompletion is created using g_completion_new().
Target items are added and removed with
g_completion_add_items(), g_completion_remove_items() and
g_completion_clear_items().
A completion attempt is requested with g_completion_complete().
When no longer needed, the #GCompletion is freed with g_completion_free().
</para>
<para>
Items in the completion can be simple strings (e.g. file names),
or pointers to arbitrary data structures. If data structures are used
you must provide a #GCompletionFunc in g_completion_new(),
which retrieves the item's string from the data structure.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GCompletion ##### -->
<para>
The data structure used for automatic completion.
<structfield>items</structfield> is the list of target items (strings
or data structures).
<structfield>func</structfield> is the function called to get the string
associated with a target item. It is NULL if the target items are strings.
<structfield>prefix</structfield> is the last prefix passed to
g_completion_complete().
<structfield>cache</structfield> is the list of items which begin with
<structfield>prefix</structfield>.
</para>
@items:
@func:
@prefix:
@cache:
<!-- ##### FUNCTION g_completion_new ##### -->
<para>
Creates a new #GCompletion.
</para>
@func: the function to be called to return the string representing an item
in the #GCompletion, or NULL if strings are going to be used as the
#GCompletion items.
@Returns: the new #GCompletion.
<!-- ##### USER_FUNCTION GCompletionFunc ##### -->
<para>
Specifies the type of the function passed to g_completion_new().
It should return the string corresponding to the given target item.
This is used when you use data structures as #GCompletion items.
</para>
@Param1: the completion item.
@Returns: the string corresponding to the item.
<!-- ##### FUNCTION g_completion_add_items ##### -->
<para>
Adds items to the #GCompletion.
</para>
@cmp: the #GCompletion.
@items: the list of items to add.
<!-- ##### FUNCTION g_completion_remove_items ##### -->
<para>
Removes items from a #GCompletion.
</para>
@cmp: the #GCompletion.
@items: the items to remove.
<!-- ##### FUNCTION g_completion_clear_items ##### -->
<para>
Removes all items from the #GCompletion.
</para>
@cmp: the #GCompletion.
<!-- ##### FUNCTION g_completion_complete ##### -->
<para>
Attempts to complete the string @prefix using the #GCompletion target items.
</para>
@cmp: the #GCompletion.
@prefix: the prefix string, typically typed by the user, which is compared
with each of the items.
@new_prefix: if non-NULL, returns the longest prefix which is common to all
items that matched @prefix, or NULL if no items matched @prefix.
This string should be freed when no longer needed.
@Returns: the list of items whose strings begin with @prefix. This should
not be changed.
<!-- ##### FUNCTION g_completion_free ##### -->
<para>
Frees all memory used by the #GCompletion.
</para>
@cmp: the #GCompletion.

View File

@ -0,0 +1,197 @@
<!-- ##### SECTION Title ##### -->
Keyed Data Lists
<!-- ##### SECTION Short_Description ##### -->
lists of data elements which are accessible by a string or #GQuark identifier.
<!-- ##### SECTION Long_Description ##### -->
<para>
Keyed data lists provide lists of arbitrary data elements which can be accessed
either with a string or with a #GQuark corresponding to the string.
</para>
<para>
The GQuark methods are quicker, since the strings have to be converted to
GQuarks anyway.
</para>
<para>
Data lists are used in GTK for associating arbitrary data with
GtkObjects, using gtk_object_set_data() and related functions.
</para>
<para>
To create a datalist, use g_datalist_init().
</para>
<para>
To add data elements to a datalist use g_datalist_id_set_data(),
g_datalist_id_set_data_full(), g_datalist_set_data()
and g_datalist_set_data_full().
</para>
<para>
To get data elements from a datalist use g_datalist_id_get_data() and
g_datalist_get_data().
</para>
<para>
To iterate over all data elements in a datalist use g_datalist_foreach().
</para>
<para>
To remove data elements from a datalist use g_datalist_id_remove_data() and
g_datalist_remove_data().
</para>
<para>
To remove all data elements from a datalist, use g_datalist_clear().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GData ##### -->
<para>
The #GData struct is an opaque data structure to represent a
<link linkend="glib-Keyed-Data-Lists">Keyed Data List</link>.
It should only be accessed via the following functions.
</para>
<!-- ##### FUNCTION g_datalist_init ##### -->
<para>
Resets the datalist to NULL.
It does not free any memory or call any destroy functions.
</para>
@datalist: a pointer to a pointer to a datalist.
<!-- ##### MACRO g_datalist_id_set_data ##### -->
<para>
Sets the data corresponding to the given #GQuark id.
Any previous data with the same key is removed, and its
destroy function is called.
</para>
@dl: a datalist.
@q: the #GQuark to identify the data element.
@d: the data element.
<!-- ##### FUNCTION g_datalist_id_set_data_full ##### -->
<para>
Sets the data corresponding to the given #GQuark id, and the function to
be called when the element is removed from the datalist.
Any previous data with the same key is removed, and its
destroy function is called.
</para>
@datalist: a datalist.
@key_id: the #GQuark to identify the data element.
@data: the data element.
@destroy_func: the function to call when the data element is removed. This
function will be called with the data element and can be used to free any
memory allocated for it.
<!-- ##### FUNCTION g_datalist_id_get_data ##### -->
<para>
Gets a data element.
</para>
@datalist: a datalist.
@key_id: the #GQuark identifying a data element.
@Returns: the data element, or NULL if it is not found.
<!-- ##### MACRO g_datalist_id_remove_data ##### -->
<para>
Removes an element, using its #GQuark identifier.
</para>
@dl: a datalist.
@q: the #GQuark identifying the data element.
<!-- ##### FUNCTION g_datalist_id_remove_no_notify ##### -->
<para>
</para>
@datalist:
@key_id:
<!-- ##### MACRO g_datalist_set_data ##### -->
<para>
Sets the data element corresponding to the given string identifier.
</para>
@dl: a datalist.
@k: the string to identify the data element.
@d: the data element.
<!-- ##### MACRO g_datalist_set_data_full ##### -->
<para>
Sets the data element corresponding to the given string identifier, and the
function to be called when the data element is removed.
</para>
@dl: a datalist.
@k: the string to identify the data element.
@d: the data element.
@f: the function to call when the data element is removed. This
function will be called with the data element and can be used to free any
memory allocated for it.
<!-- ##### MACRO g_datalist_get_data ##### -->
<para>
Gets a data element, using its string identifer.
This is slower than g_datalist_id_get_data() because the string is first
converted to a #GQuark.
</para>
@dl: a datalist.
@k: the string identifying a data element.
@Returns: the data element, or NULL if it is not found.
<!-- ##### MACRO g_datalist_remove_data ##### -->
<para>
Removes an element using its string identifier.
The data element's destroy function is called if it has been set.
</para>
@dl: a datalist.
@k: the string identifying the data element.
<!-- ##### MACRO g_datalist_remove_no_notify ##### -->
<para>
</para>
@dl:
@k:
<!-- ##### FUNCTION g_datalist_foreach ##### -->
<para>
Calls the given function for each data element of the datalist.
The function is called with each data element's #GQuark id and data,
together with the given @user_data parameter.
</para>
@datalist: a datalist.
@func: the function to call for each data element.
@user_data: user data to pass to the function.
<!-- ##### FUNCTION g_datalist_clear ##### -->
<para>
Frees all the data elements of the datalist.
The data elements' destroy functions are called if they have been set.
</para>
@datalist: a datalist.

View File

@ -0,0 +1,204 @@
<!-- ##### SECTION Title ##### -->
Datasets
<!-- ##### SECTION Short_Description ##### -->
associate groups of data elements with particular memory locations.
<!-- ##### SECTION Long_Description ##### -->
<para>
Datasets associate groups of data elements with particular memory locations.
These are useful if you need to associate data with a structure returned
from an external library. Since you cannot modify the structure, you use
its location in memory as the key into a dataset, where you can associate
any number of data elements with it.
</para>
<para>
There are two forms of most of the dataset functions.
The first form uses strings to identify the data elements associated with
a location. The second form uses #GQuark identifiers, which are created
with a call to g_quark_from_string() or g_quark_from_static_string().
The second form is quicker, since it does not require looking up the string
in the hash table of #GQuark identifiers.
</para>
<para>
There is no function to create a dataset. It is automatically created as
soon as you add elements to it.
<para>
To add data elements to a dataset use g_dataset_id_set_data(),
g_dataset_id_set_data_full(), g_dataset_set_data()
and g_dataset_set_data_full().
</para>
<para>
To get data elements from a dataset use g_dataset_id_get_data() and
g_dataset_get_data().
</para>
<para>
To iterate over all data elements in a dataset use g_dataset_foreach().
</para>
<para>
To remove data elements from a dataset use g_dataset_id_remove_data() and
g_dataset_remove_data().
</para>
<para>
To destroy a dataset, use g_dataset_destroy().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO g_dataset_id_set_data ##### -->
<para>
Sets the data element associated with the given #GQuark id.
Any previous data with the same key is removed, and its destroy function
is called.
</para>
@l: the location identifying the dataset.
@k: the #GQuark id to identify the data element.
@d: the data element.
<!-- ##### FUNCTION g_dataset_id_set_data_full ##### -->
<para>
Sets the data element associated with the given #GQuark id, and also the
function to call when the data element is destroyed.
Any previous data with the same key is removed, and its
destroy function is called.
</para>
@dataset_location: the location identifying the dataset.
@key_id: the #GQuark id to identify the data element.
@data: the data element.
@destroy_func: the function to call when the data element is removed. This
function will be called with the data element and can be used to free any
memory allocated for it.
<!-- ##### USER_FUNCTION GDestroyNotify ##### -->
<para>
Specifies the type of function which is called when a data element is
destroyed. It is passed the pointer to the data element and should free
any memory and resources allocated for it.
</para>
@data: the data element.
<!-- ##### FUNCTION g_dataset_id_get_data ##### -->
<para>
Gets the data element corresponding to a #GQuark.
</para>
@dataset_location: the location identifying the dataset.
@key_id: the #GQuark id to identify the data element.
@Returns: the data element corresponding to the #GQuark, or NULL if it is
not found.
<!-- ##### MACRO g_dataset_id_remove_data ##### -->
<para>
Removes a data element from a dataset.
The data element's destroy function is called if it has been set.
</para>
@l: the location identifying the dataset.
@k: the #GQuark id identifying the data element.
<!-- ##### FUNCTION g_dataset_id_remove_no_notify ##### -->
<para>
</para>
@dataset_location:
@key_id:
<!-- ##### MACRO g_dataset_set_data ##### -->
<para>
Sets the data corresponding to the given string identifier.
</para>
@l: the location identifying the dataset.
@k: the string to identify the data element.
@d: the data element.
<!-- ##### MACRO g_dataset_set_data_full ##### -->
<para>
Sets the data corresponding to the given string identifier, and the function
to call when the data element is destroyed.
</para>
@l: the location identifying the dataset.
@k: the string to identify the data element.
@d: the data element.
@f: the function to call when the data element is removed. This
function will be called with the data element and can be used to free any
memory allocated for it.
<!-- ##### MACRO g_dataset_get_data ##### -->
<para>
Gets the data element corresponding to a string.
</para>
@l: the location identifying the dataset.
@k: the string identifying the data element.
@Returns: the data element corresponding to the string, or NULL if it is not
found.
<!-- ##### MACRO g_dataset_remove_data ##### -->
<para>
Removes a data element corresponding to a string.
Its destroy function is called if it has been set.
</para>
@l: the location identifying the dataset.
@k: the string identifying the data element.
<!-- ##### MACRO g_dataset_remove_no_notify ##### -->
<para>
</para>
@l:
@k:
<!-- ##### FUNCTION g_dataset_foreach ##### -->
<para>
Calls the given function for each data element which is associated with the
given location.
</para>
@dataset_location: the location identifying the dataset.
@func: the function to call for each data element.
@user_data: user data to pass to the function.
<!-- ##### USER_FUNCTION GDataForeachFunc ##### -->
<para>
Specifies the type of function passed to g_dataset_foreach().
It is called with each #GQuark id and associated data element,
together with the @user_data parameter supplied to g_dataset_foreach().
</para>
@key_id: the #GQuark id to identifying the data element.
@data: the data element.
@user_data: user data passed to g_dataset_foreach().
<!-- ##### FUNCTION g_dataset_destroy ##### -->
<para>
Destroys the dataset, freeing all memory allocated, and calling any
destroy functions set for data elements.
</para>
@dataset_location: the location identifying the dataset.

View File

@ -0,0 +1,655 @@
<!-- ##### SECTION Title ##### -->
Date and Time Functions
<!-- ##### SECTION Short_Description ##### -->
Calendrical Calculations and Miscellaneous Time Stuff
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GDate data structure represents a day between January 1, Year 1,
and sometime a few thousand years in the future (right now it will go
to the year 65535 or so, but g_date_set_parse() only parses up to the
year 8000 or so - just count on "a few thousand"). #GDate is meant to
represent everyday dates, not astronomical dates or historical dates
or ISO timestamps or the like. It extrapolates the current Gregorian
calendar forward and backward in time; there is no attempt to change
the calendar to match time periods or locations. #GDate does not store
time information; it represents a <emphasis>day</emphasis>.
</para>
<para>
The #GDate implementation has several nice features; it is only a
64-bit struct, so storing large numbers of dates is very efficient. It
can keep both a Julian and Day-Month-Year representation of the date,
since some calculations are much easier with one representation or the
other. A Julian representation is simply a count of days since some
fixed day in the past; for #GDate the fixed day is January 1, 1 AD.
("Julian" dates in the #GDate API aren't really Julian dates in the
technical sense; technically, Julian dates count from the start of the
Julian period, Jan 1, 4713 BC).
</para>
<para>
#GDate is simple to use. First you need a "blank" date; you can get a
dynamically allocated date from g_date_new(), or you can declare an
automatic variable or array and initialize it to a sane state by
calling g_date_clear(). A cleared date is sane; it's safe to call
g_date_set_dmy() and the other mutator functions to initialize the
value of a cleared date. However, a cleared date is initially
<emphasis>invalid</emphasis>, meaning that it doesn't represent a day
that exists. It is undefined to call any of the date calculation
routines on an invalid date. If you obtain a date from a user or other
unpredictable source, you should check its validity with the
g_date_valid() predicate. g_date_valid() is also used to check for
errors with g_date_set_parse() and other functions that can
fail. Dates can be invalidated by calling g_date_clear() again.
</para>
<para>
<emphasis>It is very important to use the API to access the #GDate
struct.</emphasis> Often only the DMY or only the Julian
representation is valid. Sometimes neither is valid. Use the API.
</para>
<para>
glib doesn't contain any time-manipulation functions; however, there
is a #GTime typedef which is equivalent to time_t, and a #GTimeVal
struct which represents a more precise time (with microseconds). You
can request the current time as a #GTimeVal with g_get_current_time().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GTimeVal ##### -->
<para>
Represents a precise time, with seconds and microseconds. Same as the
<structname>struct timeval</structname> returned by the
<function>gettimeofday()</function> UNIX call.
</para>
@tv_sec:
@tv_usec:
<!-- ##### FUNCTION g_get_current_time ##### -->
<para>
Equivalent to <function>gettimeofday()</function>, but also works on
Win32. Returns the current time.
</para>
@result:
<!-- ##### TYPEDEF GTime ##### -->
<para>
Simply a replacement for time_t. Unrelated to GTimer.
</para>
<!-- ##### STRUCT GDate ##### -->
<para>
Represents a day between January 1, Year 1 and a few thousand years in
the future. None of its members should be accessed directly. If the
<structname>GDate</structname> is obtained from g_date_new(), it will
be safe to mutate but invalid and thus not safe for calendrical computations.
If it's declared on the stack, it will contain garbage so must be
initialized with g_date_clear(). g_date_clear() makes the date invalid
but sane. An invalid date doesn't represent a day, it's "empty." A
date becomes valid after you set it to a Julian day or you set a day,
month, and year.
</para>
@julian_days:
@julian:
@dmy:
@day:
@month:
@year:
<!-- ##### ENUM GDateDMY ##### -->
<para>
This enumeration isn't used in the API, but may be useful if you need
to mark a number as a day, month, or year.
</para>
@G_DATE_DAY:
@G_DATE_MONTH:
@G_DATE_YEAR:
<!-- ##### TYPEDEF GDateDay ##### -->
<para>
Integer representing a day of the month; between 1 and
31. #G_DATE_BAD_DAY represents an invalid day of the month.
</para>
<!-- ##### ENUM GDateMonth ##### -->
<para>
Enumeration representing a month; values are #G_DATE_JANUARY,
#G_DATE_FEBRUARY, etc. #G_DATE_BAD_MONTH is the "invalid" value.
</para>
@G_DATE_BAD_MONTH:
@G_DATE_JANUARY:
@G_DATE_FEBRUARY:
@G_DATE_MARCH:
@G_DATE_APRIL:
@G_DATE_MAY:
@G_DATE_JUNE:
@G_DATE_JULY:
@G_DATE_AUGUST:
@G_DATE_SEPTEMBER:
@G_DATE_OCTOBER:
@G_DATE_NOVEMBER:
@G_DATE_DECEMBER:
<!-- ##### ENUM GDateWeekday ##### -->
<para>
Enumeration representing a day of the week; #G_DATE_MONDAY,
#G_DATE_TUESDAY, etc. #G_DATE_BAD_WEEKDAY is an invalid weekday.
</para>
@G_DATE_BAD_WEEKDAY:
@G_DATE_MONDAY:
@G_DATE_TUESDAY:
@G_DATE_WEDNESDAY:
@G_DATE_THURSDAY:
@G_DATE_FRIDAY:
@G_DATE_SATURDAY:
@G_DATE_SUNDAY:
<!-- ##### TYPEDEF GDateYear ##### -->
<para>
Integer representing a year; #G_DATE_BAD_YEAR is the invalid
value. The year must be 1 or higher; negative (BC) years are not
allowed. The year is represented with four digits.
</para>
<!-- ##### MACRO G_DATE_BAD_DAY ##### -->
<para>
Represents an invalid #GDateDay.
</para>
<!-- ##### MACRO G_DATE_BAD_JULIAN ##### -->
<para>
Represents an invalid Julian day number.
</para>
<!-- ##### MACRO G_DATE_BAD_YEAR ##### -->
<para>
Represents an invalid year.
</para>
<!-- ##### FUNCTION g_date_add_days ##### -->
<para>
Increment a date some number of days. To move forward by weeks, add
weeks*7 days. The date must be valid.
</para>
@date: The date to increment
@n_days: Number of days to move the date forward
<!-- ##### FUNCTION g_date_add_months ##### -->
<para>
Increment a date by some number of months. If the day of the month is
greater than 28, this routine may change the day of the month (because
the destination month may not have the current day in it). The date
must be valid.
</para>
@date: Date to increment
@n_months: Number of months to move forward
<!-- ##### FUNCTION g_date_add_years ##### -->
<para>
Increment a date by some number of years. If the date is February 29,
and the destination year is not a leap year, the date will be changed
to February 28. The date must be valid.
</para>
@date: Date to increment
@n_years: Number of years to move forward
<!-- ##### FUNCTION g_date_clear ##### -->
<para>
Initialize one or more #GDate structs to a sane but invalid
state. The cleared dates will not represent an existing date, but will
not contain garbage. Useful to init a date declared on the stack.
Validity can be tested with g_date_valid().
</para>
@date: Pointer to one or more dates to clear
@n_dates: Number of dates to clear
<!-- ##### FUNCTION g_date_compare ##### -->
<para>
<function>qsort()</function>-style comparsion function for dates. Both
dates must be valid.
</para>
@lhs: First date to compare
@rhs: Second date to compare
@Returns: 0 for equal, less than zero if @lhs is less than @rhs,
greater than zero if @lhs is greater than @rhs
<!-- ##### FUNCTION g_date_day ##### -->
<para>
Return the day of the month; the #GDate must be valid.
</para>
@date: Date to extract the day of the month from
@Returns: Day of the month
<!-- ##### FUNCTION g_date_day_of_year ##### -->
<para>
Return the day of the year, where Jan 1 is the first day of the
year. Date must be valid.
</para>
@date: Date to extract day of year from
@Returns: Day of the year
<!-- ##### FUNCTION g_date_days_in_month ##### -->
<para>
Return the number of days in a month, taking leap years into account.
</para>
@month: Month
@year: Year
@Returns: Number of days in @month during the year @year.
<!-- ##### FUNCTION g_date_free ##### -->
<para>
Free a #GDate returned from g_date_new()
</para>
@date: Date to free
<!-- ##### FUNCTION g_date_is_first_of_month ##### -->
<para>
Returns TRUE if the date is on the first of a month. Date must be valid.
</para>
@date: Date to check
@Returns: Boolean, if the date is the first of the month
<!-- ##### FUNCTION g_date_is_last_of_month ##### -->
<para>
Returns TRUE if the date is the last day of the month. Date must be valid.
</para>
@date: Date to check
@Returns: Boolean, if the date is the last day of the month
<!-- ##### FUNCTION g_date_is_leap_year ##### -->
<para>
Returns TRUE if the year is a leap year
</para>
@year: Year to check
@Returns: Boolean, if the year is a leap year
<!-- ##### FUNCTION g_date_julian ##### -->
<para>
Accessor, returns the Julian day or "serial number" of the #GDate. The
Julian day is simply the number of days since January 1, Year 1; i.e.,
January 1, Year 1 is Julian day 1; January 2, Year 1 is Julian day 2,
etc. Date must be valid.
</para>
@date: Date to extract the Julian day from
@Returns: Julian day
<!-- ##### FUNCTION g_date_monday_week_of_year ##### -->
<para>
Return the week of the year, where weeks are understood to start on
Monday. If the date is before the first Monday of the year, return
0. Date must be valid.
</para>
@date: Date to use
@Returns: Week of the year
<!-- ##### FUNCTION g_date_monday_weeks_in_year ##### -->
<para>
Return the number of weeks in the year, where weeks are taken to start
on Monday. Will be 52 or 53. Date must be valid. (Years always have 52
7-day periods, plus 1 or 2 extra days depending on whether it's a leap
year. This function is basically telling you how many Mondays are in
the year, i.e. there are 53 Mondays if one of the extra days happens
to be a Monday.)
</para>
@year: Year
@Returns: Number of Mondays in the year
<!-- ##### FUNCTION g_date_month ##### -->
<para>
Accessor for the month of the year. Date must be valid.
</para>
@date: Date to get the month from
@Returns: A #GDateMonth
<!-- ##### FUNCTION g_date_new ##### -->
<para>
Allocate a #GDate and initialize it to a sane state. The new date will
be cleared (as if you'd called g_date_clear()) but invalid (it won't
represent an existing day). Free the return value with g_date_free().
</para>
@Returns: The newly-allocated #GDate
<!-- ##### FUNCTION g_date_new_dmy ##### -->
<para>
Like g_date_new(), but also sets the value of the date. Assuming the
day/month/year triplet you pass in represents an existing day, the
returned date will be valid.
</para>
@day: Day of the month
@month: Month of the year
@year: Year
@Returns: Allocated date initialized with @day, @month, and @year
<!-- ##### FUNCTION g_date_new_julian ##### -->
<para>
Like g_date_new(), but also sets the value of the date. Assuming the
Julian day number you pass in is valid (greater than 0, less than an
unreasonably large number), the returned date will be valid.
</para>
@julian_day: Days since January 1, Year 1
@Returns: Allocated date initialized with @julian_day
<!-- ##### FUNCTION g_date_set_day ##### -->
<para>
Set the day of the month for a #GDate. If the resulting day-month-year
triplet is invalid, the date will be invalid.
</para>
@date: Date to set the day for
@day: Day to set
<!-- ##### FUNCTION g_date_set_dmy ##### -->
<para>
Set the value of a #GDate from a day, month, and year. The DMY triplet
must be valid; if you aren't sure it is, call g_date_valid_dmy() to
check before you set it.
</para>
@date: Date to set the value of
@day: Day
@month: Month
@y: Year
<!-- ##### FUNCTION g_date_set_julian ##### -->
<para>
Set the value of a #GDate from a Julian day number.
</para>
@date: Date to set
@julian_date: Julian day number (days since January 1, Year 1)
<!-- ##### FUNCTION g_date_set_month ##### -->
<para>
Set the month of the year for a #GDate. If the resulting
day-month-year triplet is invalid, the date will be invalid.
</para>
@date: Date
@month: Month to set
<!-- ##### FUNCTION g_date_set_parse ##### -->
<para>
Parse a user-inputted string @str, and try to figure out what date it
represents, taking the current locale into account. If the string is
successfully parsed, the date will be valid after the call. Otherwise,
it will be invalid. You should check using g_date_valid() to see
whether the parsing succeeded.
</para>
<para>
This function is not appropriate for file formats and the like; it
isn't very precise, and its exact behavior varies with the
locale. It's intended to be a heuristic routine that guesses what the
user means by a given string (and it does work pretty well in that
capacity).
</para>
@date: Date to fill in
@str: String to parse
<!-- ##### FUNCTION g_date_set_time ##### -->
<para>
Set the value of a date from a #GTime (time_t) value. To set the value
of a date to the current day, you could write:
<informalexample><programlisting>
g_date_set_time(date, time(NULL));
</programlisting></informalexample>
</para>
@date: Date to update
@time: #GTime value to set
<!-- ##### FUNCTION g_date_set_year ##### -->
<para>
Set the year for a #GDate. If the resulting day-month-year triplet is
invalid, the date will be invalid.
</para>
@date: Date
@year: Year to set
<!-- ##### FUNCTION g_date_strftime ##### -->
<para>
Generate a printed representation of the date, in a locale-specific
way. Works just like the standard C <function>strftime()</function>
function, but only accepts date-related formats; time-related formats
give undefined results. Date must be valid.
</para>
@s: Destination buffer
@slen: Max buffer size
@format: Format string
@date: valid #GDate
@Returns: number of characters written to the buffer, or 0 the buffer was too small
<!-- ##### FUNCTION g_date_subtract_days ##### -->
<para>
Move a date some number of days into the past. To move by weeks, just
move by weeks*7 days. Date must be valid.
</para>
@date: Date to decrement
@n_days: Number of days to move
<!-- ##### FUNCTION g_date_subtract_months ##### -->
<para>
Move a date some number of months into the past. If the current day of
the month doesn't exist in the destination month, the day of the month
may change. Date must be valid.
</para>
@date: Date to decrement
@n_months: Number of months to move
<!-- ##### FUNCTION g_date_subtract_years ##### -->
<para>
Move a date some number of years into the past. If the current day
doesn't exist in the destination year (i.e. it's February 29 and you
move to a non-leap-year) then the day is changed to February 29. Date
must be valid.
</para>
@date: Date to decrement
@n_years: Number of years to move
<!-- ##### FUNCTION g_date_sunday_week_of_year ##### -->
<para>
Week of the year during which this date falls, if weeks are understood
to being on Sunday. Date must be valid. Can return 0 if the day is
before the first Sunday of the year.
</para>
@date: Date
@Returns: Week number
<!-- ##### FUNCTION g_date_sunday_weeks_in_year ##### -->
<para>
Return the number of weeks in the year, where weeks are taken to start
on Sunday. Will be 52 or 53. Date must be valid. (Years always have 52
7-day periods, plus 1 or 2 extra days depending on whether it's a leap
year. This function is basically telling you how many Sundays are in
the year, i.e. there are 53 Sundays if one of the extra days happens
to be a Sunday.)
</para>
@year: Year to count weeks in
@Returns: Number of weeks
<!-- ##### FUNCTION g_date_to_struct_tm ##### -->
<para>
Fills in the date-related bits of a <structname>struct tm</structname>
using the @date value. Initializes the non-date parts with something
sane but meaningless.
</para>
@date: Date to set the <structname>struct tm</structname> from
@tm: <structname>struct tm</structname> to fill
<!-- ##### FUNCTION g_date_valid ##### -->
<para>
Returns TRUE if the #GDate represents an existing day. #GDate must not
contain garbage; it should have been initialized with g_date_clear()
if it wasn't allocated by one of the g_date_new() variants.
</para>
@date: Date to check
@Returns: Whether the date is valid.
<!-- ##### FUNCTION g_date_valid_day ##### -->
<para>
Returns TRUE if the day of the month is valid (a day is valid if it's
between 1 and 31 inclusive).
</para>
@day: Day to check.
@Returns: Boolean, whether the day is valid.
<!-- ##### FUNCTION g_date_valid_dmy ##### -->
<para>
Returns TRUE if the day/month/year triplet forms a valid, existing day
in the range of days GDate understands (Year 1 or later, no more than
a few thousand years in the future).
</para>
@day: Day
@month: Month
@year: Year
@Returns: Boolean, whether the date is a valid one
<!-- ##### FUNCTION g_date_valid_julian ##### -->
<para>
Returns TRUE if the Julian day is valid. Anything greater than zero is basically a
valid Julian, though there is a 32-bit limit.
</para>
@julian_date: Julian day to check
@Returns: Boolean, whether the Julian day is valid.
<!-- ##### FUNCTION g_date_valid_month ##### -->
<para>
Returns TRUE if the month value is valid. The 12 #GDateMonth
enumeration values are the only valid months.
</para>
@month: Month
@Returns: Boolean, whether the month is valid
<!-- ##### FUNCTION g_date_valid_weekday ##### -->
<para>
Returns TRUE if the weekday is valid. The 7 #GDateWeekday enumeration
values are the only valid weekdays.
</para>
@weekday: Weekday
@Returns: Boolean, whether the weekday is valid.
<!-- ##### FUNCTION g_date_valid_year ##### -->
<para>
Returns TRUE if the year is valid. Any year greater than 0 is valid,
though there is a 16-bit limit to what GDate will understand.
</para>
@year: Year
@Returns: Boolean, whether the year is valid.
<!-- ##### FUNCTION g_date_weekday ##### -->
<para>
Returns the day of the week for a #GDate. The date must be valid.
</para>
@date: Date
@Returns: Day of the week as a #GDateWeekday
<!-- ##### FUNCTION g_date_year ##### -->
<para>
Accessor; returns the year of a #GDate. The date must be valid.
</para>
@date: Date
@Returns: Year in which the date falls

View File

@ -0,0 +1,358 @@
<!-- ##### SECTION Title ##### -->
Hash Tables
<!-- ##### SECTION Short_Description ##### -->
associations between keys and values so that given a key the value
can be found quickly.
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GHashTable provides associations between keys and values which
is optimized so that given a key, the associated value can be found
very quickly.
</para>
<para>
Note that neither keys nor values are copied when inserted into the
#GHashTable, so they must exist for the lifetime of the #GHashTable.
This means that the use of static strings is OK, but temporary
strings (i.e. those created in buffers and those returned by GTK widgets)
should be copied with g_strdup() before being inserted.
</para>
<para>
If keys or values are dynamically allocated, you must be careful to ensure
that they are freed when they are removed from the #GHashTable, and also
when they are overwritten by new insertions into the #GHashTable.
It is also not advisable to mix static strings and dynamically-allocated
strings in a #GHashTable, because it then becomes difficult to determine
whether the string should be freed.
</para>
<para>
To create a #GHashTable, use g_hash_table_new().
</para>
<para>
To insert a key and value into a #GHashTable, use g_hash_table_insert().
</para>
<para>
To lookup a value corresponding to a given key, use g_hash_table_lookup()
and g_hash_table_lookup_extended().
</para>
<para>
To remove a key and value, use g_hash_table_remove().
</para>
<para>
To call a function for each key and value pair use g_hash_table_foreach().
</para>
<para>
To destroy a #GHashTable use g_hash_table_destroy().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GHashTable ##### -->
<para>
The #GHashTable struct is an opaque data structure to represent a
<link linkend="glib-Hash-Tables">Hash Table</link>.
It should only be accessed via the following functions.
</para>
<!-- ##### FUNCTION g_hash_table_new ##### -->
<para>
Creates a new #GHashTable.
</para>
@hash_func: a function to create a hash value from a key.
Hash values are used to determine where keys are stored within the
#GHashTable data structure.
The g_direct_hash(), g_int_hash() and g_str_hash() functions are provided for
some common types of keys. If hash_func is NULL, g_direct_hash() is used.
@key_compare_func: a function to compare two keys to see if they are equal.
This is used when looking up keys in the #GHashTable.
The g_direct_equal(), g_int_equal() and g_str_equal() functions are provided
for the most common types of keys. If compare_func is NULL, keys are compared
directly in a similar fashion to g_direct_equal(), but without the overhead
of a function call.
@Returns: a new #GHashTable.
<!-- ##### USER_FUNCTION GHashFunc ##### -->
<para>
Specifies the type of the hash function which is passed to
g_hash_table_new() when a #GHashTable is created.
</para>
<para>
The function is passed a key and should return a guint hash value.
The functions g_direct_hash(), g_int_hash() and g_str_hash() provide
hash functions which can be used when the key is a #gpointer, #gint, and
#gchar* respectively.
</para>
<para>
FIXME: Need more here.
The hash values should be evenly distributed over a fairly large range?
The modulus is taken with the hash table size (a prime number)
to find the 'bucket' to place each key into.
The function should also be very fast, since it is called for each key
lookup.
</para>
@key: a key.
@Returns: the hash value corresponding to the key.
<!-- ##### USER_FUNCTION GCompareFunc ##### -->
<para>
Specifies the type of a comparison function used to compare two values.
The value which should be returned depends on the context in which the
#GCompareFunc is used.
</para>
<para>
In g_hash_table_new(), g_cache_new(), and g_relation_index() the function
should return TRUE if the two parameters are equal, or FALSE if they are not.
</para>
<para>
In g_list_find_custom() and g_slist_find_custom() the function should return
0 if the two parameters are equal.
</para>
<para>
In g_list_insert_sorted(), g_list_sort(), g_slist_insert_sorted(),
g_slist_sort() and g_tree_new() the function should return a negative integer
if the first value comes before the second, 0 if they are equal, or a positive
integer if the first value comes after the second.
</para>
@a: a value.
@b: a value to compare with.
@Returns: TRUE if the two values are equivalent.
<!-- ##### FUNCTION g_hash_table_insert ##### -->
<para>
Inserts a new key and value into a #GHashTable.
If the key already exists in the #GHashTable its current value is replaced
with the new value.
</para>
<note>
<para>
If the keys or values use dynamically allocated memory, then you should
first check if the key already exists in the GHashTable. If it does,
you should free the existing key and/or value before inserting the
new key and value.
</para>
</note>
@hash_table: a #GHashTable.
@key: a key to insert.
@value: the value to associate with the key.
<!-- ##### FUNCTION g_hash_table_size ##### -->
<para>
Returns the number of key/value pairs in a #GHashTable.
</para>
@hash_table: a #GHashTable.
@Returns: the number of key/value pairs in the #GHashTable.
<!-- ##### FUNCTION g_hash_table_lookup ##### -->
<para>
Looks up a key in the #GHashTable, returning the associated value or NULL
if the key is not found.
</para>
@hash_table: a #GHashTable.
@key: the key to look up.
@Returns: the associated value, or NULL if the key is not found.
<!-- ##### FUNCTION g_hash_table_lookup_extended ##### -->
<para>
Looks up a key in the #GHashTable, returning the original key and the
associated value and a gboolean which is TRUE if the key was found.
This is useful if you need to free the memory allocated for the
original key, for example before calling g_hash_table_remove().
</para>
@hash_table: a #GHashTable.
@lookup_key: the key to look up.
@orig_key: returns the original key.
@value: returns the value associated with the key.
@Returns: TRUE if the key was found in the #GHashTable.
<!-- ##### FUNCTION g_hash_table_foreach ##### -->
<para>
Calls the given function for each of the key/value pairs in the #GHashTable.
The function is passed the key and value of each pair, and the given
@user_data parameter.
</para>
@hash_table: a #GHashTable.
@func: the function to call for each key/value pair.
@user_data: use data to pass to the function.
<!-- ##### USER_FUNCTION GHFunc ##### -->
<para>
Specifies the type of the function passed to g_hash_table_foreach().
It is called with each key/value pair, together with the @user_data parameter
which is passed to g_hash_table_foreach().
</para>
@key: a key.
@value: the value corresponding to the key.
@user_data: user data passed to g_hash_table_foreach().
<!-- ##### FUNCTION g_hash_table_remove ##### -->
<para>
Removes a key and its associated value from a #GHashTable.
</para>
<note>
<para>
As with g_hash_table_insert(), you should make sure that any dynamically
allocated values are freed yourself.
</para>
</note>
@hash_table: a #GHashTable.
@key: the key to remove.
<!-- ##### FUNCTION g_hash_table_foreach_remove ##### -->
<para>
Calls the given function for each key/value pair in the #GHashTable.
If the function returns TRUE, then the key/value pair is removed from the
#GHashTable.
</para>
@hash_table: a #GHashTable.
@func: the function to call for each key/value pair.
@user_data: user data to pass to the function.
@Returns: the number of key/value paris removed.
<!-- ##### USER_FUNCTION GHRFunc ##### -->
<para>
Specifies the type of the function passed to g_hash_table_foreach_remove().
It is called with each key/value pair, together with the @user_data parameter
passed to g_hash_table_foreach_remove().
It should return TRUE if the key/value pair should be removed from the
#GHashTable.
</para>
@key: a key.
@value: the value associated with the key.
@user_data: user data passed to g_hash_table_remove().
@Returns: TRUE if the key/value pair should be removed from the #GHashTable.
<!-- ##### FUNCTION g_hash_table_freeze ##### -->
<para>
Disable resizing of a #GHashTable.
</para>
<para>
This should be used if you need to make a lot of changes to a #GHashTable
at once, as it reduces the number of times that the #GHashTable is rebuilt.
You should call g_hash_table_thaw() after updating the #GHashTable to
enable resizing again.
</para>
@hash_table: a #GHashTable.
<!-- ##### FUNCTION g_hash_table_thaw ##### -->
<para>
Enables resizing of a #GHashTable.
</para>
@hash_table: a #GHashTable.
<!-- ##### FUNCTION g_hash_table_destroy ##### -->
<para>
Destroys the #GHashTable.
</para>
<note>
<para>
If keys and/or values are dynamically allocated, you should free them
first.
</para>
</note>
@hash_table: a #GHashTable.
<!-- ##### FUNCTION g_direct_equal ##### -->
<para>
Compares two #gpointer arguments and returns TRUE if they are equal.
It can be passed to g_hash_table_new() as the @key_compare_func
parameter, when using pointers as keys in a #GHashTable.
</para>
@v: a key.
@v2: a key to compare with @v.
@Returns: TRUE if the two keys match.
<!-- ##### FUNCTION g_direct_hash ##### -->
<para>
Converts a gpointer to a hash value.
It can be passed to g_hash_table_new() as the @hash_func parameter, when
using gpointer values as keys in a #GHashTable.
</para>
@v: a gpointer key.
@Returns: a hash value corresponding to the key.
<!-- ##### FUNCTION g_int_equal ##### -->
<para>
Compares the two #gint values being pointed to and returns TRUE if they are
equal.
It can be passed to g_hash_table_new() as the @key_compare_func
parameter, when using pointers to integers as keys in a #GHashTable.
</para>
@v: a pointer to a #gint key.
@v2: a pointer to a #gint key to compare with @v.
@Returns: TRUE if the two keys match.
<!-- ##### FUNCTION g_int_hash ##### -->
<para>
Converts a pointer to a #gint to a hash value.
It can be passed to g_hash_table_new() as the @hash_func parameter, when
using pointers to gint values as keys in a #GHashTable.
</para>
@v: a pointer to a #gint key.
@Returns: a hash value corresponding to the key.
<!-- ##### FUNCTION g_str_equal ##### -->
<para>
Compares two strings and returns TRUE if they are equal.
It can be passed to g_hash_table_new() as the @key_compare_func
parameter, when using strings as keys in a #GHashTable.
</para>
@v: a key.
@v2: a key to compare with @v.
@Returns: TRUE if the two keys match.
<!-- ##### FUNCTION g_str_hash ##### -->
<para>
Converts a string to a hash value.
It can be passed to g_hash_table_new() as the @hash_func parameter, when
using strings as keys in a #GHashTable.
</para>
@v: a string key.
@Returns: a hash value corresponding to the key.

View File

@ -0,0 +1,524 @@
<!-- ##### SECTION Title ##### -->
Hook Functions
<!-- ##### SECTION Short_Description ##### -->
support for manipulating lists of hook functions.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GHookList, #GHook and their related functions provide support for
lists of hook functions. Functions can be added and removed from the lists,
and the list of hook functions can be invoked.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GHookList ##### -->
<para>
<informaltable pgwide=1 frame="none" role="struct">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>#guint seq_id;</entry>
<entry>the next free #GHook id.</entry>
</row>
<row>
<entry>#guint hook_size;</entry>
<entry>the size of the #GHookList elements, in bytes.</entry>
</row>
<row>
<entry>#guint is_setup : 1;</entry>
<entry>1 if the #GHookList has been initialized.</entry>
</row>
<row>
<entry>#GHook *hooks;</entry>
<entry>the first #GHook element in the list.</entry>
</row>
<row>
<entry>#GMemChunk *hook_memchunk;</entry>
<entry>the #GMemChunk used for allocating the #GHook elements.</entry>
</row>
<row>
<entry>#GHookFreeFunc hook_free;</entry>
<entry>the function to call to free a #GHook element.</entry>
</row>
<row>
<entry>#GHookFreeFunc hook_destroy;</entry>
<entry>the function to call to destory a #GHook element.</entry>
</row>
</tbody></tgroup></informaltable>
</para>
@seq_id:
@hook_size:
@is_setup:
@hooks:
@hook_memchunk:
@hook_free:
@hook_destroy:
<!-- ##### STRUCT GHook ##### -->
<para>
<informaltable pgwide=1 frame="none" role="struct">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>#gpointer data;</entry>
<entry>.</entry>
</row>
<row>
<entry>#GHook *next;</entry>
<entry>.</entry>
</row>
<row>
<entry>#GHook *prev;</entry>
<entry>.</entry>
</row>
<row>
<entry>#guint ref_count;</entry>
<entry>.</entry>
</row>
<row>
<entry>#guint hook_id;</entry>
<entry>.</entry>
</row>
<row>
<entry>#guint flags;</entry>
<entry>.</entry>
</row>
<row>
<entry>#gpointer data;</entry>
<entry>.</entry>
</row>
<row>
<entry>#GDestroyNotify destroy;</entry>
<entry>.</entry>
</row>
</tbody></tgroup></informaltable>
</para>
@data:
@next:
@prev:
@ref_count:
@hook_id:
@flags:
@func:
@destroy:
<!-- ##### USER_FUNCTION GHookFunc ##### -->
<para>
</para>
@data:
<!-- ##### USER_FUNCTION GHookCheckFunc ##### -->
<para>
</para>
@data:
@Returns:
<!-- ##### USER_FUNCTION GHookMarshaller ##### -->
<para>
</para>
@hook:
@data:
<!-- ##### USER_FUNCTION GHookCheckMarshaller ##### -->
<para>
</para>
@hook:
@data:
@Returns:
<!-- ##### USER_FUNCTION GHookFreeFunc ##### -->
<para>
</para>
@hook_list:
@hook:
<!-- ##### MACRO G_HOOK_DEFERRED_DESTROY ##### -->
<para>
</para>
<!-- ##### FUNCTION g_hook_list_init ##### -->
<para>
Initializes a #GHookList.
This must be called before the #GHookList is used.
</para>
@hook_list: a #GHookList.
@hook_size: the size of each element in the #GHookList, typically
sizeof (GHook).
<!-- ##### FUNCTION g_hook_list_invoke ##### -->
<para>
Calls all of the #GHook functions in a #GHookList.
</para>
@hook_list: a #GHookList.
@may_recurse: TRUE if functions which are already running (e.g. in another
thread) can be called. If set to FALSE, these are skipped.
<!-- ##### FUNCTION g_hook_list_invoke_check ##### -->
<para>
Calls all of the #GHook functions in a #GHookList.
Any function which returns TRUE is removed from the #GHookList.
</para>
@hook_list: a #GHookList.
@may_recurse: TRUE if functions which are already running (e.g. in another
thread) can be called. If set to FALSE, these are skipped.
<!-- ##### FUNCTION g_hook_list_marshal ##### -->
<para>
</para>
@hook_list: a #GHookList.
@may_recurse:
@marshaller:
@data:
<!-- ##### FUNCTION g_hook_list_marshal_check ##### -->
<para>
</para>
@hook_list: a #GHookList.
@may_recurse:
@marshaller:
@data:
<!-- ##### FUNCTION g_hook_list_clear ##### -->
<para>
Removes all the #GHook elements from a #GHookList.
</para>
@hook_list: a #GHookList.
<!-- ##### FUNCTION g_hook_alloc ##### -->
<para>
Allocates space for a #GHook and initializes it.
</para>
@hook_list: a #GHookList.
@Returns: a new #GHook.
<!-- ##### MACRO g_hook_append ##### -->
<para>
Appends a #GHook onto the end of a #GHookList.
</para>
@hook_list: a #GHookList.
@hook: the #GHook to add to the end of @hook_list.
<!-- ##### FUNCTION g_hook_prepend ##### -->
<para>
Prepends a #GHook on the start of a #GHookList.
</para>
@hook_list: a #GHookList.
@hook: the #GHook to add to the start of @hook_list.
<!-- ##### FUNCTION g_hook_insert_before ##### -->
<para>
Inserts a #GHook into a #GHookList, before a given #GHook.
</para>
@hook_list: a #GHookList.
@sibling: the #GHook to insert the new #GHook before.
@hook: the #GHook to insert.
<!-- ##### FUNCTION g_hook_insert_sorted ##### -->
<para>
Inserts a #GHook into a #GHookList, sorted by the given function.
</para>
@hook_list: a #GHookList.
@hook: the #GHook to insert.
@func: the comparison function used to sort the #GHook elements.
<!-- ##### USER_FUNCTION GHookCompareFunc ##### -->
<para>
Defines the type of function used to compare #GHook elements in
g_hook_insert_sorted().
</para>
@new_hook: the #GHook being inserted.
@sibling: the #GHook to compare with @new_hook.
@Returns: a value <= 0 if @new_hook should be before @sibling.
<!-- ##### FUNCTION g_hook_compare_ids ##### -->
<para>
Compares the ids of two #GHook elements, returning a negative value
if the second id is greater than the first.
</para>
@new_hook: a #GHook.
@sibling: a #GHook to compare with @new_hook.
@Returns: a value <= 0 if the id of @sibling is >= the id of @new_hook.
<!-- ##### FUNCTION g_hook_get ##### -->
<para>
Returns the #GHook with the given id, or NULL if it is not found.
</para>
@hook_list: a #GHookList.
@hook_id: a hook id.
@Returns: the #GHook with the given id, or NULL if it is not found.
<!-- ##### FUNCTION g_hook_find ##### -->
<para>
Finds a #GHook in a #GHookList using the given function to test for a match.
</para>
@hook_list: a #GHookList.
@need_valids: TRUE if #GHook elements which have been destroyed should be
skipped.
@func: the function to call for each #GHook, which should return TRUE when
the #GHook has been found.
@data: the data passed to @func.
@Returns: the found #GHook or NULL if no matching #GHook is found.
<!-- ##### FUNCTION g_hook_find_data ##### -->
<para>
Finds a #GHook in a #GHookList with the given data.
</para>
@hook_list: a #GHookList.
@need_valids: TRUE if #GHook elements which have been destroyed should be
skipped.
@data: the data to find.
@Returns: the #GHook with the given @data or NULL if no matching
#GHook is found.
<!-- ##### FUNCTION g_hook_find_func ##### -->
<para>
Finds a #GHook in a #GHookList with the given function.
</para>
@hook_list: a #GHookList.
@need_valids: TRUE if #GHook elements which have been destroyed should be
skipped.
@func: the function to find.
@Returns: the #GHook with the given @func or NULL if no matching
#GHook is found.
<!-- ##### USER_FUNCTION GHookFindFunc ##### -->
<para>
Defines the type of the function passed to g_hooK_find_func().
</para>
@hook: a #GHook.
@data: user data passed to g_hook_find_func().
@Returns: TRUE if the required #GHook has been found.
<!-- ##### FUNCTION g_hook_find_func_data ##### -->
<para>
Finds a #GHook in a #GHookList with the given function and data.
</para>
@hook_list: a #GHookList.
@need_valids: TRUE if #GHook elements which have been destroyed should be
skipped.
@func: the function to find.
@data: the data to find.
@Returns: the #GHook with the given @func and @data or NULL if no matching
#GHook is found.
<!-- ##### FUNCTION g_hook_first_valid ##### -->
<para>
Returns the first #GHook in a #GHookList which has not been destroyed.
The reference count for the #GHook is incremented, so you must call
g_hook_unref() to restore it when no longer needed. (Or call
g_hook_next_valid() if you are stepping through the #GHookList.)
</para>
@hook_list: a #GHookList.
@may_be_in_call: TRUE if hooks which are currently running (e.g. in another
thread) are considered valid. If set to FALSE, these are skipped.
@Returns: the first valid #GHook, or NULL if none are valid.
<!-- ##### FUNCTION g_hook_next_valid ##### -->
<para>
Returns the next #GHook in a #GHookList which has not been destroyed.
The reference count for the #GHook is incremented, so you must call
g_hook_unref() to restore it when no longer needed. (Or continue to call
g_hook_next_valid() until NULL is returned.)
</para>
@hook_list: a #GHookList.
@hook: the current #GHook.
@may_be_in_call: TRUE if hooks which are currently running (e.g. in another
thread) are considered valid. If set to FALSE, these are skipped.
@Returns: the next valid #GHook, or NULL if none are valid.
<!-- ##### ENUM GHookFlagMask ##### -->
<para>
</para>
@G_HOOK_FLAG_ACTIVE:
@G_HOOK_FLAG_IN_CALL:
@G_HOOK_FLAG_MASK:
<!-- ##### MACRO G_HOOK_FLAG_USER_SHIFT ##### -->
<para>
</para>
<!-- ##### MACRO G_HOOK_IS_VALID ##### -->
<para>
Returns TRUE if the #GHook is valid, i.e. it is in a #GHookList, it is active
and it has not been destroyed.
</para>
@hook: a #GHook.
@Returns: TRUE if the #GHook is valid.
<!-- ##### MACRO G_HOOK_ACTIVE ##### -->
<para>
Returns TRUE if the #GHook is active, which is normally TRUE until the #GHook
is destroyed.
</para>
@hook: a #GHook.
@Returns: TRUE if the #GHook is active.
<!-- ##### MACRO G_HOOK_IN_CALL ##### -->
<para>
Returns TRUE if the #GHook function is currently executing.
</para>
@hook: a #GHook.
@Returns: TRUE if the #GHook function is currently executing.
<!-- ##### MACRO G_HOOK_IS_UNLINKED ##### -->
<para>
Returns TRUE if the #GHook is not in a #GHookList.
</para>
@hook: a #GHook.
@Returns: TRUE if the #GHook is not in a #GHookList.
<!-- ##### FUNCTION g_hook_ref ##### -->
<para>
Increments the reference count for a #GHook.
</para>
@hook_list: a #GHookList.
@hook: the #GHook to increment the reference count of.
<!-- ##### FUNCTION g_hook_unref ##### -->
<para>
Decrements the reference count of a #GHook.
If the reference count falls to 0, the #GHook is removed from the #GHookList
and g_hook_free() is called to free it.
</para>
@hook_list: a #GHookList.
@hook:
<!-- ##### FUNCTION g_hook_free ##### -->
<para>
Calls the #GHookList @hook_free function if it exists, and frees the memory
allocated for the #GHook.
</para>
@hook_list: a #GHookList.
@hook: the #GHook to free.
<!-- ##### FUNCTION g_hook_destroy ##### -->
<para>
Destroys a #GHook, given its ID.
</para>
@hook_list: a #GHookList.
@hook_id: a hook ID.
@Returns: TRUE if the #GHook was found in the #GHookList and destroyed.
<!-- ##### FUNCTION g_hook_destroy_link ##### -->
<para>
Removes one #GHook from a #GHookList, calling the @hook_destroy function in
the #GHookList, and the @destroy function of the #GHook, if they exist.
</para>
@hook_list: a #GHookList.
@hook: the #GHook to remove.

View File

@ -0,0 +1,319 @@
<!-- ##### SECTION Title ##### -->
IO Channels
<!-- ##### SECTION Short_Description ##### -->
portable support for using files, pipes and sockets.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GIOChannel data type aims to provide a portable method for using file
descriptors, pipes, and sockets, and integrating them into the
<link linkend="glib-The-Main-Event-Loop">main event loop</link>.
Currently full support is available on Unix platforms, though support for
Windows is only partially complete.
</para>
<para>
To create a new #GIOChannel on Unix systems use g_io_channel_unix_new().
This works for plain file descriptors, pipes and sockets.
</para>
<para>
Once a #GIOChannel has been created, it can be used in a generic manner
with the functions g_io_channel_read(), g_io_channel_write(),
g_io_channel_seek(), and g_io_channel_close().
</para>
<para>
To add a #GIOChannel to the
<link linkend="glib-The-Main-Event-Loop">main event loop</link>
use g_io_add_watch() or g_io_add_watch_full(). Here you specify which events
you are interested in on the #GIOChannel, and provide a function to be
called whenever these events occur.
</para>
<para>
#GIOChannel instances are created with an initial reference count of 1.
g_io_channel_ref() and g_io_channel_unref() can be used to increment or
decrement the reference count respectively. When the reference count falls
to 0, the #GIOChannel is freed. (Though it isn't closed automatically.)
Using g_io_add_watch() or g_io_add_watch_full() increments a channel's
reference count.
</para>
<para>
GTK+ contains the convenience function gtk_input_add_full()
which creates a #GIOChannel from a file descriptor and adds it to the
<link linkend="glib-The-Main-Event-Loop">main event loop</link>.
The event source can later be removed with gtk_input_remove().
Similar functions can also be found in GDK.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>
<varlistentry>
<term>gtk_input_add_full(), gtk_input_remove(), gdk_input_add(),
gdk_input_add_full(), gdk_input_remove()</term>
<listitem><para>
Convenience functions for creating #GIOChannel instances and adding them to the
<link linkend="glib-The-Main-Event-Loop">main event loop</link>.
</para></listitem>
</varlistentry>
</variablelist>
</para>
<!-- ##### STRUCT GIOChannel ##### -->
<para>
A data structure representing an IO Channel. The fields should be considered
private and should only be accessed with the following functions.
</para>
@channel_flags:
@ref_count:
@funcs:
<!-- ##### FUNCTION g_io_channel_unix_new ##### -->
<para>
Creates a new #GIOChannel given a file descriptor.
On Unix systems this works for plain files, pipes, and sockets.
</para>
<para>
The returned #GIOChannel has a reference count of 1.
</para>
@fd: a file descriptor.
@Returns: a new #GIOChannel.
<!-- ##### FUNCTION g_io_channel_unix_get_fd ##### -->
<para>
Returns the file descriptor of the Unix #GIOChannel.
</para>
@channel: a #GIOChannel, created with g_io_channel_unix_new().
@Returns: the file descriptor of the #GIOChannel.
<!-- ##### FUNCTION g_io_channel_init ##### -->
<para>
Initializes a #GIOChannel struct. This is called by each of the above functions
when creating a #GIOChannel, and so is not often needed by the application
programmer (unless you are creating a new type of #GIOChannel).
</para>
@channel: a #GIOChannel.
<!-- ##### FUNCTION g_io_channel_read ##### -->
<para>
Reads data from a #GIOChannel.
</para>
@channel: a #GIOChannel.
@buf: a buffer to read the data into (which should be at least count bytes
long).
@count: the number of bytes to read from the #GIOChannel.
@bytes_read: returns the number of bytes actually read.
@Returns: %G_IO_ERROR_NONE if the operation was successful.
<!-- ##### ENUM GIOError ##### -->
<para>
</para>
@G_IO_ERROR_NONE:
@G_IO_ERROR_AGAIN:
@G_IO_ERROR_INVAL:
@G_IO_ERROR_UNKNOWN:
<!-- ##### FUNCTION g_io_channel_write ##### -->
<para>
Writes data to a #GIOChannel.
</para>
@channel: a #GIOChannel.
@buf: the buffer containing the data to write.
@count: the number of bytes to write.
@bytes_written: the number of bytes actually written.
@Returns: %G_IO_ERROR_NONE if the operation was successful.
<!-- ##### FUNCTION g_io_channel_seek ##### -->
<para>
Sets the current position in the #GIOChannel, similar to the standard system
call <function>fseek()</function>.
</para>
@channel: a #GIOChannel.
@offset: an offset, in bytes, which is added to the position specified by
@type.
@type: the position in the file, which can be %G_SEEK_CUR (the current
position), %G_SEEK_SET (the start of the file), or %G_SEEK_END (the end of the
file).
@Returns: %G_IO_ERROR_NONE if the operation was successful.
<!-- ##### ENUM GSeekType ##### -->
<para>
An enumeration specifying the base position for a g_io_channel_seek()
operation.
<informaltable pgwide=1 frame="none" role="enum">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>G_SEEK_CUR</entry>
<entry>the current position in the file.</entry>
</row>
<row>
<entry>G_SEEK_SET</entry>
<entry>the start of the file.</entry>
</row>
<row>
<entry>G_SEEK_END</entry>
<entry>the end of the file.</entry>
</row>
</tbody></tgroup></informaltable>
</para>
@G_SEEK_CUR:
@G_SEEK_SET:
@G_SEEK_END:
<!-- ##### FUNCTION g_io_channel_close ##### -->
<para>
Closes a #GIOChannel.
The #GIOChannel will be freed when its reference count drops to 0.
</para>
@channel: a #GIOChannel.
<!-- ##### FUNCTION g_io_channel_ref ##### -->
<para>
Increments the reference count of a #GIOChannel.
</para>
@channel: a #GIOChannel.
<!-- ##### FUNCTION g_io_channel_unref ##### -->
<para>
Decrements the reference count of a #GIOChannel.
</para>
@channel: a #GIOChannel.
<!-- ##### FUNCTION g_io_add_watch ##### -->
<para>
Adds the #GIOChannel into the
<link linkend="glib-The-Main-Event-Loop">main event loop</link>
with the default priority.
</para>
@channel: a #GIOChannel.
@condition: the condition to watch for.
@func: the function to call when the condition is satisfied.
@user_data: user data to pass to @func.
@Returns: the event source id.
<!-- ##### FUNCTION g_io_add_watch_full ##### -->
<para>
Adds the #GIOChannel into the
<link linkend="glib-The-Main-Event-Loop">main event loop</link>
with the given priority.
</para>
@channel: a #GIOChannel.
@priority: the priority of the #GIOChannel source.
@condition: the condition to watch for.
@func: the function to call when the condition is satisfied.
@user_data: user data to pass to @func.
@notify: the function to call when the source is removed.
@Returns: the event source id.
<!-- ##### ENUM GIOCondition ##### -->
<para>
A bitwise combination representing a condition to watch for on an event
source.
<informaltable pgwide=1 frame="none" role="enum">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>G_IO_IN</entry>
<entry>There is data to read.</entry>
</row>
<row>
<entry>G_IO_OUT</entry>
<entry>Data can be written (without blocking).</entry>
</row>
<row>
<entry>G_IO_PRI</entry>
<entry>There is urgent data to read.</entry>
</row>
<row>
<entry>G_IO_ERR</entry>
<entry>Error condition.</entry>
</row>
<row>
<entry>G_IO_HUP</entry>
<entry>Hung up (the connection has been broken, usually for pipes and
sockets).</entry>
</row>
<row>
<entry>G_IO_NVAL</entry>
<entry>Invalid request. The file descriptor is not open.</entry>
</row>
</tbody></tgroup></informaltable>
</para>
@G_IO_IN:
@G_IO_OUT:
@G_IO_PRI:
@G_IO_ERR:
@G_IO_HUP:
@G_IO_NVAL:
<!-- ##### USER_FUNCTION GIOFunc ##### -->
<para>
Specifies the type of function passed to g_io_add_watch() or
g_io_add_watch_full(), which is called when the requested condition on a
#GIOChannel is satisfied.
</para>
@source: the #GIOChannel event source.
@condition: the condition which has been satisfied.
@data: user data set in g_io_add_watch() or g_io_add_watch_full().
@Returns: the function should return FALSE if the event source should be
removed.
<!-- ##### STRUCT GIOFuncs ##### -->
<para>
A table of functions used to handle different types of #GIOChannel in a
generic way.
</para>
@io_read:
@io_write:
@io_seek:
@io_close:
@io_add_watch:
@io_free:

View File

@ -0,0 +1,87 @@
<!-- ##### SECTION Title ##### -->
Limits of Basic Types
<!-- ##### SECTION Short_Description ##### -->
portable method of determining the limits of the standard types.
<!-- ##### SECTION Long_Description ##### -->
<para>
These macros provide a portable method to determine the limits of some of
the standard integer and floating point types.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO G_MININT ##### -->
<para>
The minimum value which can be held in a #gint.
</para>
<!-- ##### MACRO G_MAXINT ##### -->
<para>
The maximum value which can be held in a #gint.
</para>
<!-- ##### MACRO G_MINSHORT ##### -->
<para>
The minimum value which can be held in a #gshort.
</para>
<!-- ##### MACRO G_MAXSHORT ##### -->
<para>
The maximum value which can be held in a #gshort.
</para>
<!-- ##### MACRO G_MINLONG ##### -->
<para>
The minimum value which can be held in a #glong.
</para>
<!-- ##### MACRO G_MAXLONG ##### -->
<para>
The maximum value which can be held in a #glong.
</para>
<!-- ##### MACRO G_MINFLOAT ##### -->
<para>
The minimum value which can be held in a #gfloat.
</para>
<!-- ##### MACRO G_MAXFLOAT ##### -->
<para>
The maximum value which can be held in a #gfloat.
</para>
<!-- ##### MACRO G_MINDOUBLE ##### -->
<para>
The minimum value which can be held in a #gdouble.
</para>
<!-- ##### MACRO G_MAXDOUBLE ##### -->
<para>
The maximum value which can be held in a #gdouble.
</para>

View File

@ -0,0 +1,406 @@
<!-- ##### SECTION Title ##### -->
Doubly-Linked Lists
<!-- ##### SECTION Short_Description ##### -->
linked lists containing integer values or pointers to data, with the ability
to iterate over the list in both directions.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GList structure and its associated functions provide a standard
doubly-linked list data structure.
</para>
<para>
Each element in the list contains a piece of data, together with pointers
which link to the previous and next elements in the list.
Using these pointers it is possible to move through the list in both
directions (unlike the
<link linkend="glib-Singly-Linked-lists">Singly-Linked Lists</link>
which only allows movement through the list in the forward direction).
</para>
<para>
The data contained in each element can be either integer values, by using one
of the
<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
or simply pointers to any type of data.
</para>
<para>
List elements are allocated in blocks using a #GListAllocator, which is
more efficient than allocating elements individually.
</para>
<para>
Note that most of the #GList functions expect to be passed a pointer to
the first element in the list. The functions which insert elements return
the new start of the list, which may have changed.
</para>
<para>
There is no function to create a #GList. NULL is considered to be the empty
list so you simply set a #GList* to NULL.
<para>
To add elements, use g_list_append(), g_list_prepend(), g_list_insert()
and g_list_insert_sorted().
</para>
<para>
To remove elements, use g_list_remove().
</para>
<para>
To find elements in the list use g_list_first(), g_list_last(), g_list_next(),
g_list_previous(), g_list_nth(), g_list_nth_data(), g_list_find() and
g_list_find_custom().
</para>
<para>
To find the index of an element use g_list_position() and g_list_index().
</para>
<para>
To call a function for each element in the list use g_list_foreach().
</para>
<para>
To free the entire list, use g_list_free().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GList ##### -->
<para>
The #GList struct is used for each element in a doubly-linked list.
The <structfield>data</structfield> field holds the element's data, which can
be a pointer to any kind of data, or any integer value using the
<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>.
The <structfield>next</structfield> and <structfield>prev</structfield>
pointers are the links to the next and previous elements in the list.
</para>
@data:
@next:
@prev:
<!-- ##### FUNCTION g_list_append ##### -->
<para>
Adds a new element on to the end of the list.
</para>
<note>
<para>
The return value is the new start of the list, which may have changed, so
make sure you store the new value.
</para>
</note>
<informalexample><programlisting>
/* Notice that these are initialized to the empty list. */
GList *list = NULL, *number_list = NULL;
/* This is a list of strings. */
list = g_list_append (list, "first");
list = g_list_append (list, "second");
/* This is a list of integers. */
number_list = g_list_append (number_list, GINT_TO_POINTER (27));
number_list = g_list_append (number_list, GINT_TO_POINTER (14));
</programlisting></informalexample>
@list: a pointer to a #GList.
@data: the data for the new element.
@Returns: the new start of the #GList.
<!-- ##### FUNCTION g_list_prepend ##### -->
<para>
Adds a new element on to the start of the list.
</para>
<note>
<para>
The return value is the new start of the list, which may have changed, so
make sure you store the new value.
</para>
</note>
<informalexample><programlisting>
/* Notice that it is initialized to the empty list. */
GList *list = NULL;
list = g_list_prepend (list, "last");
list = g_list_prepend (list, "first");
</programlisting></informalexample>
@list: a pointer to a #GList.
@data: the data for the new element.
@Returns: the new start of the #GList.
<!-- ##### FUNCTION g_list_insert ##### -->
<para>
Inserts a new element into the list at the given position.
</para>
@list: a pointer to a #GList.
@data: the data for the new element.
@position: the position to insert the element. If this is negative, or is
larger than the number of elements in the list, the new element is added on
to the end of the list.
@Returns: the new start of the #GList.
<!-- ##### FUNCTION g_list_insert_sorted ##### -->
<para>
Inserts a new element into the list, using the given comparison function
to determine its position.
</para>
@list: a pointer to a #GList.
@data: the data for the new element.
@func: the function to compare elements in the list. It should return a
number > 0 if the first parameter comes after the second parameter in
the sort order.
@Returns: the new start of the #GList.
<!-- ##### FUNCTION g_list_remove ##### -->
<para>
Removes an element from a #GList.
If two elements contain the same data, only the first is removed.
If none of the elements contain the data, the #GList is unchanged.
</para>
@list: a #GList.
@data: the data of the element to remove.
@Returns: the new start of the #GList.
<!-- ##### FUNCTION g_list_remove_link ##### -->
<para>
Removes an element from a #GList, without freeing the element.
The removed element's prev and next links are set to NULL, so that it becomes a
self-contained list with one element.
</para>
@list: a #GList.
@llink: an element in the #GList.
@Returns: the new start of the #GList, without the element.
<!-- ##### FUNCTION g_list_free ##### -->
<para>
Frees all of the memory used by a #GList.
The freed elements are added to the #GListAllocator free list.
</para>
<note>
<para>
If list elements contain dynamically-allocated memory, they should be freed
first.
</para>
</note>
@list:
<!-- ##### FUNCTION g_list_alloc ##### -->
<para>
Allocates space for one #GList element.
It is called by g_list_append(), g_list_prepend(), g_list_insert() and
g_list_insert_sorted() and so is rarely used on its own.
</para>
@Returns: a pointer to the newly-allocated #GList element.
<!-- ##### FUNCTION g_list_free_1 ##### -->
<para>
Frees one #GList element.
It is usually used after g_list_remove_link().
</para>
@list: a #GList element.
<!-- ##### FUNCTION g_list_length ##### -->
<para>
Gets the number of elements in a #GList.
</para>
@list: a #GList.
@Returns: the number of elements in the #GList.
<!-- ##### FUNCTION g_list_copy ##### -->
<para>
</para>
@list:
@Returns:
<!-- ##### FUNCTION g_list_reverse ##### -->
<para>
Reverses a #GList.
It simply switches the next and prev pointers of each element.
</para>
@list: a #GList.
@Returns: the start of the reversed #GList.
<!-- ##### FUNCTION g_list_sort ##### -->
<para>
</para>
@list:
@compare_func:
@Returns:
<!-- ##### FUNCTION g_list_concat ##### -->
<para>
Adds the second #GList onto the end of the first #GList.
Note that the elements of the second #GList are not copied.
They are used directly.
</para>
@list1: a #GList.
@list2: the #GList to add to the end of the first #GList.
@Returns: the start of the new #GList.
<!-- ##### FUNCTION g_list_foreach ##### -->
<para>
Calls a function for each element of a #GList.
</para>
@list: a #GList.
@func: the function to call with each element's data.
@user_data: user data to pass to the function.
<!-- ##### USER_FUNCTION GFunc ##### -->
<para>
Specifies the type of functions passed to g_list_foreach() and
g_slist_foreach().
</para>
@data: the element's data.
@user_data: user data passed to g_list_foreach() or g_slist_foreach().
<!-- ##### FUNCTION g_list_first ##### -->
<para>
Gets the first element in a #GList.
</para>
@list: a #GList.
@Returns: the first element in a #GList, or NULL if the #GList has no elements.
<!-- ##### FUNCTION g_list_last ##### -->
<para>
Gets the last element in a #GList.
</para>
@list: a #GList.
@Returns: the last element in the #GList, or NULL if the #GList has no
elements.
<!-- ##### MACRO g_list_previous ##### -->
<para>
A convenience macro to gets the previous element in a #GList.
</para>
@list: an element in a #GList.
@Returns: the previous element, or NULL if there are no previous elements.
<!-- ##### MACRO g_list_next ##### -->
<para>
A convenience macro to gets the next element in a #GList.
</para>
@list: an element in a #GList.
@Returns: the next element, or NULL if there are no more elements.
<!-- ##### FUNCTION g_list_nth ##### -->
<para>
Gets the element at the given position in a #GList.
</para>
@list: a #GList.
@n: the position of the element, counting from 0.
@Returns: the element, or NULL if the position is off the end of the #GList.
<!-- ##### FUNCTION g_list_nth_data ##### -->
<para>
Gets the data of the element at the given position.
</para>
@list: a #GList.
@n: the position of the element.
@Returns: the element's data, or NULL if the position is off the end of the
#GList.
<!-- ##### FUNCTION g_list_find ##### -->
<para>
Finds the element in a #GList which contains the given data.
</para>
@list: a #GList.
@data: the element data to find.
@Returns: the found #GList element, or NULL if it is not found.
<!-- ##### FUNCTION g_list_find_custom ##### -->
<para>
Finds an element in a #GList, using a supplied function to find the desired
element.
It iterates over the list, calling the given function which should return 0
when the desired element is found.
The function takes two #gconstpointer arguments, the #GList element's data
and the given user data.
</para>
@list: a #GList.
@data: user data passed to the function.
@func: the function to call for each element. It should return 0 when the
desired element is found.
@Returns: the found #GList element, or NULL if it is not found.
<!-- ##### FUNCTION g_list_position ##### -->
<para>
Gets the position of the given element in the #GList (starting from 0).
</para>
@list: a #GList.
@llink: an element in the #GList.
@Returns: the position of the element in the #GList, or -1 if the element is
not found.
<!-- ##### FUNCTION g_list_index ##### -->
<para>
Gets the position of the element containing the given data (starting from 0).
</para>
@list: a #GList.
@data: the data to find.
@Returns: the index of the element containing the data, or -1 if the data
is not found.
<!-- ##### FUNCTION g_list_pop_allocator ##### -->
<para>
</para>
<!-- ##### FUNCTION g_list_push_allocator ##### -->
<para>
</para>
@allocator:

View File

@ -0,0 +1,370 @@
<!-- ##### SECTION Title ##### -->
Singly-Linked Lists
<!-- ##### SECTION Short_Description ##### -->
linked lists containing integer values or pointers to data, limited to
iterating over the list in one direction.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GSList structure and its associated functions provide a standard
singly-linked list data structure.
</para>
<para>
Each element in the list contains a piece of data, together with a pointer
which links to the next element in the list.
Using this pointer it is possible to move through the list in one
direction only (unlike the
<link linkend="glib-Doubly-Linked-lists">Doubly-Linked Lists</link>
which allow movement in both directions).
</para>
<para>
The data contained in each element can be either integer values, by using one
of the
<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
or simply pointers to any type of data.
</para>
<para>
List elements are allocated in blocks using a #GListAllocator, which is
more efficient than allocating elements individually.
</para>
<para>
Note that most of the #GSList functions expect to be passed a pointer to
the first element in the list. The functions which insert elements return
the new start of the list, which may have changed.
</para>
<para>
There is no function to create a #GSList. NULL is considered to be the empty
list so you simply set a #GSList* to NULL.
<para>
To add elements, use g_slist_append(), g_slist_prepend(), g_slist_insert()
and g_slist_insert_sorted().
</para>
<para>
To remove elements, use g_slist_remove().
</para>
<para>
To find elements in the list use g_slist_last(), g_slist_next(),
g_slist_nth(), g_slist_nth_data(), g_slist_find() and
g_slist_find_custom().
</para>
<para>
To find the index of an element use g_slist_position() and g_slist_index().
</para>
<para>
To call a function for each element in the list use g_slist_foreach().
</para>
<para>
To free the entire list, use g_slist_free().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GSList ##### -->
<para>
The #GSList struct is used for each element in the singly-linked list.
The <structfield>data</structfield> field holds the element's data, which can
be a pointer to any kind of data, or any integer value using the
<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>.
The <structfield>next</structfield> field contains the link to the next
element in the list.
</para>
@data:
@next:
<!-- ##### FUNCTION g_slist_alloc ##### -->
<para>
Allocates space for one #GSList element.
It is called by the g_slist_append(), g_slist_prepend(), g_slist_insert() and
g_slist_insert_sorted() functions and so is rarely used on its own.
</para>
@Returns: a pointer to the newly-allocated #GSList element.
<!-- ##### FUNCTION g_slist_append ##### -->
<para>
Adds a new element on to the end of the list.
</para>
<note>
<para>
The return value is the new start of the list, which may have changed, so
make sure you store the new value.
</para>
</note>
<informalexample><programlisting>
/* Notice that these are initialized to the empty list. */
GSList *list = NULL, *number_list = NULL;
/* This is a list of strings. */
list = g_slist_append (list, "first");
list = g_slist_append (list, "second");
/* This is a list of integers. */
number_list = g_slist_append (number_list, GINT_TO_POINTER (27));
number_list = g_slist_append (number_list, GINT_TO_POINTER (14));
</programlisting></informalexample>
@list: a #GSList.
@data: the data for the new element.
@Returns: the new start of the #GSList.
<!-- ##### FUNCTION g_slist_prepend ##### -->
<para>
Adds a new element on to the start of the list.
</para>
<note>
<para>
The return value is the new start of the list, which may have changed, so
make sure you store the new value.
</para>
</note>
<informalexample><programlisting>
/* Notice that it is initialized to the empty list. */
GSList *list = NULL;
list = g_slist_prepend (list, "last");
list = g_slist_prepend (list, "first");
</programlisting></informalexample>
@list: a #GSList.
@data: the data for the new element.
@Returns: the new start of the #GSList.
<!-- ##### FUNCTION g_slist_insert ##### -->
<para>
Inserts a new element into the list at the given position.
</para>
@list: a #GSList.
@data: the data for the new element.
@position: the position to insert the element. If this is negative, or is
larger than the number of elements in the list, the new element is added on
to the end of the list.
@Returns: the new start of the #GSList.
<!-- ##### FUNCTION g_slist_insert_sorted ##### -->
<para>
Inserts a new element into the list, using the given comparison function
to determine its position.
</para>
@list: a #GSList.
@data: the data for the new element.
@func: the function to compare elements in the list. It should return a
number > 0 if the first parameter comes after the second parameter in
the sort order.
@Returns: the new start of the #GSList.
<!-- ##### FUNCTION g_slist_remove ##### -->
<para>
Removes an element from a #GSList.
If two elements contain the same data, only the first is removed.
If none of the elements contain the data, the #GSList is unchanged.
</para>
@list: a #GSList.
@data: the data of the element to remove.
@Returns: the new start of the #GSList.
<!-- ##### FUNCTION g_slist_remove_link ##### -->
<para>
Removes an element from a #GSList, without freeing the element.
The removed element's next link is set to NULL, so that it becomes a
self-contained list with one element.
</para>
@list: a #GSList.
@llink: an element in the #GSList.
@Returns: the new start of the #GSList, without the element.
<!-- ##### FUNCTION g_slist_free ##### -->
<para>
Frees all of the memory used by a #GSList.
The freed elements are added to the #GListAllocator free list.
</para>
@list: a #GSList.
<!-- ##### FUNCTION g_slist_free_1 ##### -->
<para>
Frees one #GSList element.
It is usually used after g_slist_remove_link().
</para>
@list: a #GSList element.
<!-- ##### FUNCTION g_slist_length ##### -->
<para>
Gets the number of elements in a #GSList.
</para>
@list: a #GSList.
@Returns: the number of elements in the #GSList.
<!-- ##### FUNCTION g_slist_copy ##### -->
<para>
</para>
@list:
@Returns:
<!-- ##### FUNCTION g_slist_reverse ##### -->
<para>
Reverses a #GSList.
</para>
@list: a #GSList.
@Returns: the start of the reversed #GSList.
<!-- ##### FUNCTION g_slist_sort ##### -->
<para>
</para>
@list:
@compare_func:
@Returns:
<!-- ##### FUNCTION g_slist_concat ##### -->
<para>
Adds the second #GSList onto the end of the first #GSList.
Note that the elements of the second #GSList are not copied.
They are used directly.
</para>
@list1: a #GSList.
@list2: the #GSList to add to the end of the first #GSList.
@Returns: the start of the new #GSList.
<!-- ##### FUNCTION g_slist_foreach ##### -->
<para>
Calls a function for each element of a #GSList.
</para>
@list: a #GSList.
@func: the function to call with each element's data.
@user_data: user data to pass to the function.
<!-- ##### FUNCTION g_slist_last ##### -->
<para>
Gets the last element in a #GSList.
</para>
@list: a #GSList.
@Returns: the last element in the #GSList, or NULL if the #GSList has no
elements.
<!-- ##### MACRO g_slist_next ##### -->
<para>
A convenience macro to gets the next element in a #GSList.
</para>
@slist: an element in a #GSList.
@Returns: the next element, or NULL if there are no more elements.
<!-- ##### FUNCTION g_slist_nth ##### -->
<para>
Gets the element at the given position in a #GSList.
</para>
@list: a #GSList.
@n: the position of the element, counting from 0.
@Returns: the element, or NULL if the position is off the end of the #GSList.
<!-- ##### FUNCTION g_slist_nth_data ##### -->
<para>
Gets the data of the element at the given position.
</para>
@list: a #GSList.
@n: the position of the element.
@Returns: the element's data, or NULL if the position is off the end of the
#GSList.
<!-- ##### FUNCTION g_slist_find ##### -->
<para>
Finds the element in a #GSList which contains the given data.
</para>
@list: a #GSList.
@data: the element data to find.
@Returns: the found #GSList element, or NULL if it is not found.
<!-- ##### FUNCTION g_slist_find_custom ##### -->
<para>
Finds an element in a #GSList, using a supplied function to find the desired
element.
It iterates over the list, calling the given function which should return 0
when the desired element is found.
The function takes two #gconstpointer arguments, the #GSList element's data
and the given user data.
</para>
@list: a #GSList.
@data: user data passed to the function.
@func: the function to call for each element. It should return 0 when the
desired element is found.
@Returns: the found #GSList element, or NULL if it is not found.
<!-- ##### FUNCTION g_slist_position ##### -->
<para>
Gets the position of the given element in the #GSList (starting from 0).
</para>
@list: a #GSList.
@llink: an element in the #GSList.
@Returns: the position of the element in the #GSList, or -1 if the element
is not found.
<!-- ##### FUNCTION g_slist_index ##### -->
<para>
Gets the position of the element containing the given data (starting from 0).
</para>
@list: a #GSList.
@data: the data to find.
@Returns: the index of the element containing the data, or -1 if the data
is not found.
<!-- ##### FUNCTION g_slist_pop_allocator ##### -->
<para>
</para>
<!-- ##### FUNCTION g_slist_push_allocator ##### -->
<para>
</para>
@allocator:

View File

@ -0,0 +1,207 @@
<!-- ##### SECTION Title ##### -->
Standard Macros
<!-- ##### SECTION Short_Description ##### -->
commonly-used macros.
<!-- ##### SECTION Long_Description ##### -->
<para>
These macros provide a few commonly-used features.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO GLIB_MAJOR_VERSION ##### -->
<para>
The major version number of the GLib library.
</para>
<!-- ##### MACRO GLIB_MINOR_VERSION ##### -->
<para>
The minor version number of the GLib library.
</para>
<!-- ##### MACRO GLIB_MICRO_VERSION ##### -->
<para>
The micro version number of the GLib library.
</para>
<!-- ##### MACRO GLIB_CHECK_VERSION ##### -->
<para>
Checks the version of the GLib library.
It returns TRUE if the GLib library is the same or newer than the given
version.
<example>
<title>Checking the version of the GLib library.</title>
<programlisting>
if (!GLIB_CHECK_VERSION (1, 2, 0))
g_error ("GLib version 1.2.0 or above is needed");
</programlisting>
</example>
</para>
@major: the major version number.
@minor: the minor version number.
@micro: the micro version number.
<!-- ##### MACRO G_DIR_SEPARATOR ##### -->
<para>
The directory separator character.
This is '/' on Unix machines and '\' under Windows.
</para>
<!-- ##### MACRO G_DIR_SEPARATOR_S ##### -->
<para>
The directory separator as a string.
This is "/" on Unix machines and "\" under Windows.
</para>
<!-- ##### MACRO G_SEARCHPATH_SEPARATOR ##### -->
<para>
The search path separator character.
This is ':' on Unix machines and ';' under Windows.
</para>
<!-- ##### MACRO G_SEARCHPATH_SEPARATOR_S ##### -->
<para>
The search path separator as a string.
This is ":" on Unix machines and ";" under Windows.
</para>
<!-- ##### MACRO TRUE ##### -->
<para>
Defines the TRUE value for the #gboolean type.
</para>
<!-- ##### MACRO FALSE ##### -->
<para>
Defines the FALSE value for the #gboolean type.
</para>
<!-- ##### MACRO NULL ##### -->
<para>
Defines the standard NULL pointer.
</para>
<!-- ##### MACRO MIN ##### -->
<para>
Calculates the minimum of @a and @b.
</para>
@a: a numeric value.
@b: a numeric value.
@Returns: the minimum of @a and @b.
<!-- ##### MACRO MAX ##### -->
<para>
Calculates the maximum of @a and @b.
</para>
@a: a numeric value.
@b: a numeric value.
@Returns: the maximum of @a and @b.
<!-- ##### MACRO ABS ##### -->
<para>
Calculates the absolute value of @a.
The absolute value is simply the number with any negative sign taken away.
</para>
<para>
For example,
<itemizedlist>
<listitem><para>
ABS(-10) is 10.
</para></listitem>
<listitem><para>
ABS(10) is also 10.
</para></listitem>
</itemizedlist>
</para>
@a: a numeric value.
@Returns: the absolute value of @a.
<!-- ##### MACRO CLAMP ##### -->
<para>
Ensures that @x is between the limits set by @low and @high.
</para>
<para>
For example,
<itemizedlist>
<listitem><para>
CLAMP(5, 10, 15) is 10.
</para></listitem>
<listitem><para>
CLAMP(15, 5, 10) is 10.
</para></listitem>
<listitem><para>
CLAMP(20, 15, 25) is 20.
</para></listitem>
</itemizedlist>
</para>
@x: the value to clamp.
@low: the minimum value allowed.
@high: the maximum value allowed.
@Returns: the value of @x clamped to the range between @low and @high.
<!-- ##### MACRO G_STRUCT_MEMBER ##### -->
<para>
Returns a member of a structure at a given offset, using the given type.
</para>
@member_type: the type of the struct field.
@struct_p: a pointer to a struct.
@struct_offset: the offset of the field from the start of the struct, in bytes.
@Returns: the struct member.
<!-- ##### MACRO G_STRUCT_MEMBER_P ##### -->
<para>
Returns an untyped pointer to a given offset of a struct.
</para>
@struct_p: a pointer to a struct.
@struct_offset: the offset from the start of the struct, in bytes.
@Returns: an untyped pointer to @struct_p plus @struct_offset bytes.
<!-- ##### MACRO G_STRUCT_OFFSET ##### -->
<para>
Returns the offset, in bytes, of a member of a struct.
</para>
@struct_type: a structure type, e.g. <structname>GtkWidget</structname>.
@member: a field in the structure, e.g. <structfield>window</structfield>.
@Returns: the offset of @member from the start of @struct_type.

View File

@ -0,0 +1,158 @@
<!-- ##### SECTION Title ##### -->
Miscellaneous Macros
<!-- ##### SECTION Short_Description ##### -->
specialised macros which are not used often.
<!-- ##### SECTION Long_Description ##### -->
<para>
These macros provide more specialized features which are not needed so often
by application programmers.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO G_INLINE_FUNC ##### -->
<para>
Used to declare inline functions. If inline functions are not supported on
the particular platform, the macro evaluates to the empty string.
</para>
<!-- ##### MACRO G_STMT_START ##### -->
<para>
Used within multi-statement macros so that they can be used in places where
only one statement is expected by the compiler.
</para>
<!-- ##### MACRO G_STMT_END ##### -->
<para>
Used within multi-statement macros so that they can be used in places where
only one statement is expected by the compiler.
</para>
<!-- ##### MACRO G_VA_COPY ##### -->
<para>
Portable way to copy <type>va_list</type> variables.
</para>
@ap1: the <type>va_list</type> variable to place a copy of @ap2 in.
@ap2: a <type>va_list</type>.
<!-- ##### MACRO G_GNUC_EXTENSION ##### -->
<para>
Expands to "__extension__" when GNU C is used as the compiler.
This simply tells GNU C not to warn about the following non-standard code
when compiling with the -pedantic option.
</para>
<!-- ##### MACRO G_GNUC_CONST ##### -->
<para>
Expands to the GNU C const function attribute if the compiler is GNU C.
This enables optimization of the function.
See the GNU C documentation for details.
</para>
<!-- ##### MACRO G_GNUC_NORETURN ##### -->
<para>
Expands to the GNU C noreturn function attribute if the compiler is GNU C.
It is used for declaring functions which never return.
It enables optimization of the function, and avoids possible compiler
warnings. See the GNU C documentation for details.
</para>
<!-- ##### MACRO G_GNUC_UNUSED ##### -->
<para>
Expands to the GNU C unused function attribute if the compiler is GNU C.
It is used for declaring functions which may never be used.
It avoids possible compiler warnings. See the GNU C documentation for details.
</para>
<!-- ##### MACRO G_GNUC_PRINTF ##### -->
<para>
Expands to the GNU C format function attribute if the compiler is GNU C.
This is used for declaring functions which take a variable number of
arguments, with the same syntax as <function>printf()</function>.
It allows the compiler to type-check the arguments passed to the function.
See the GNU C documentation for details.
</para>
@format_idx: the index of the argument corresponding to the format string.
(The arguments are numbered from 1).
@arg_idx: the index of the first of the format arguments.
<!-- ##### MACRO G_GNUC_SCANF ##### -->
<para>
Expands to the GNU C format function attribute if the compiler is GNU C.
This is used for declaring functions which take a variable number of
arguments, with the same syntax as <function>scanf()</function>.
It allows the compiler to type-check the arguments passed to the function.
See the GNU C documentation for details.
</para>
@format_idx: the index of the argument corresponding to the format string.
(The arguments are numbered from 1).
@arg_idx: the index of the first of the format arguments.
<!-- ##### MACRO G_GNUC_FORMAT ##### -->
<para>
Expands to the GNU C format_arg function attribute if the compiler is GNU C.
This is used for declaring functions which take a variable number of
parameters, like <function>printf()</function> and
<function>scanf()</function>. See the GNU C documentation for details.
FIXME: I can't find this in my GNU C documentation. Take out?
</para>
@arg_idx: the index of the argument.
<!-- ##### MACRO G_GNUC_FUNCTION ##### -->
<para>
Expands to the GNU C __FUNCTION__ variable if the compiler is GNU C,
or "" if it isn't.
The GNU C __FUNCTION__ variable contains the name of the current function.
See the GNU C documentation for details.
</para>
<!-- ##### MACRO G_GNUC_PRETTY_FUNCTION ##### -->
<para>
Expands to the GNU C __PRETTY_FUNCTION__ variable if the compiler is GNU C,
or "" if it isn't.
The GNU C __PRETTY_FUNCTION__ variable contains the name of the current
function. For a C program this is the same as the __FUNCTION__ variable
but for C++ it also includes extra information such as the class
and function prototype. See the GNU C documentation for details.
</para>
<!-- ##### MACRO g_string ##### -->
<para>
Turns the argument into a string literal by using the '#' stringizing operator.
</para>
@x: text to convert to a literal string.

View File

@ -0,0 +1,496 @@
<!-- ##### SECTION Title ##### -->
The Main Event Loop
<!-- ##### SECTION Short_Description ##### -->
manages all available sources of events.
<!-- ##### SECTION Long_Description ##### -->
<para>
The main event loop manages all the available sources of events for GLib
and GTK+ applications. These events can come from any number of different
types of sources such as file descriptors (plain files, pipes or sockets)
and timeouts.
New types of event sources can also be added using g_source_add().
</para>
<para>
Each event source is assigned a priority.
The default priority, #G_PRIORITY_DEFAULT, is 0.
Values less than 0 denote higher priorities.
Values greater than 0 denote lower priorities.
Events from high priority sources
are always processed before events from lower priority sources.
</para>
<para>
Idle functions can also be added, and assigned a priority. These will be
run whenever no events with a higher priority are ready to be processed.
</para>
<para>
The #GMainLoop data type represents a main event loop.
A #GMainLoop is created with g_main_new(). After adding the initial event
sources, g_main_run() is called. This continuously checks for new events
from each of the event sources and dispatches them.
Finally, the processing of an event from one of the sources leads to a call
to g_main_quit() to exit the main loop, and g_main_run() returns.
</para>
<para>
It is possible to create new instances of #GMainLoop recursively.
This is often used in GTK+ applications when showing modal dialog boxes.
However, all event sources are global; they are not tied to a particular
#GMainLoop.
</para>
<para>
GTK+ contains wrappers of many of these functions,
e.g. gtk_main(), gtk_main_quit(), gtk_events_pending(), gtk_idle_add(),
gtk_timeout_add() and gtk_input_add_full().
In a GTK+ application, these wrapper functions should be used instead.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GMainLoop ##### -->
<para>
The #GMainLoop struct is an opaque data type representing the main event loop
of a GLib or GTK+ application.
</para>
<!-- ##### FUNCTION g_main_new ##### -->
<para>
Creates a new #GMainLoop.
</para>
@is_running: set to TRUE to indicate that the loop is running. This is not
very important since calling g_main_run() will set this to TRUE anyway.
@Returns: a new #GMainLoop.
<!-- ##### FUNCTION g_main_destroy ##### -->
<para>
Frees the memory allocated for the #GMainLoop.
</para>
@loop: a #GMainLoop.
<!-- ##### FUNCTION g_main_run ##### -->
<para>
Runs a main loop until it stops running, which occurs when g_main_quit()
is called.
</para>
@loop: a #GMainLoop.
<!-- ##### FUNCTION g_main_is_running ##### -->
<para>
Returns TRUE if the main loop is running.
</para>
@loop: a #GMainLoop.
@Returns: TRUE if the main loop is running.
<!-- ##### FUNCTION g_main_pending ##### -->
<para>
Returns TRUE if any events are pending (i.e. ready to be processed).
</para>
@Returns: TRUE if any events are pending.
<!-- ##### FUNCTION g_main_iteration ##### -->
<para>
Runs a single iteration of the main loop.
This will check which event sources are ready to be processed, and will
process the highest priority event sources which are ready.
</para>
@may_block: set to TRUE if it should block (i.e. wait) until an event source
becomes ready. It will return after an event source has been processed.
If set to FALSE it will return immediately if no event source is ready to be
processed.
@Returns: TRUE if more events are pending.
<!-- ##### FUNCTION g_main_quit ##### -->
<para>
Stops the #GMainLoop. If g_main_run() was called to run the #GMainLoop,
it will now return.
</para>
@loop: a #GMainLoop.
<!-- ##### MACRO G_PRIORITY_HIGH ##### -->
<para>
Use this for high priority event sources.
It is not used within GLib or GTK+.
</para>
<!-- ##### MACRO G_PRIORITY_DEFAULT ##### -->
<para>
Use this for default priority event sources.
In GLib this priority is used when adding timeout functions with
g_timeout_add().
In GDK this priority is used for events from the X Windows server.
</para>
<!-- ##### MACRO G_PRIORITY_HIGH_IDLE ##### -->
<para>
Use this for high priority idle functions.
GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, and
#G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is done to
ensure that any pending resizes are processed before any pending redraws,
so that widgets are not redrawn twice unnecessarily.)
</para>
<!-- ##### MACRO G_PRIORITY_DEFAULT_IDLE ##### -->
<para>
Use this for default priority idle functions.
In GLib this priority is used when adding idle functions with g_idle_add().
</para>
<!-- ##### MACRO G_PRIORITY_LOW ##### -->
<para>
Use this for very low priority background tasks.
It is not used within GLib or GTK+.
</para>
<!-- ##### FUNCTION g_timeout_add ##### -->
<para>
Sets a function to be called at regular intervals, with the default priority,
#G_PRIORITY_DEFAULT.
The function is called repeatedly until it returns FALSE, at which point
the timeout is automatically destroyed and the function will not be called
again.
The first call to the function will be at the end of the first @interval.
</para>
<para>
Note that timeout functions may be delayed, due to the processing of other
event sources. Thus they should not be relied on for precise timing.
After each call to the timeout function, the time of the next
timeout is recalculated based on the current time and the given interval
(it does not try to 'catch up' time lost in delays).
</para>
@interval: the time between calls to @function, in milliseconds (1/1000ths
of a second.)
@function: the function to call at each interval.
@data: data to pass to @function.
@Returns: the id of the event source.
<!-- ##### FUNCTION g_timeout_add_full ##### -->
<para>
Sets a function to be called at regular intervals, with the given priority.
The function is called repeatedly until it returns FALSE, at which point
the timeout is automatically destroyed and the function will not be called
again.
The @notify function is called when the timeout is destroyed.
The first call to the function will be at the end of the first @interval.
</para>
<para>
Note that timeout functions may be delayed, due to the processing of other
event sources. Thus they should not be relied on for precise timing.
After each call to the timeout function, the time of the next
timeout is recalculated based on the current time and the given interval
(it does not try to 'catch up' time lost in delays).
</para>
@priority: the priority of the function. See #G_PRIORITY_DEFAULT,
#G_PRIORITY_DEFAULT_IDLE, #G_PRIORITY_HIGH, #G_PRIORITY_HIGH_IDLE, and
#G_PRIORITY_LOW.
@interval: the time between calls to the function, in milliseconds (1/1000ths
of a second.)
@function: the function to call at each interval.
@data: data to pass to @function (and @notify).
@notify: the function to call when the timeout is destroyed, or NULL.
@Returns: the id of event source.
<!-- ##### USER_FUNCTION GSourceFunc ##### -->
<para>
Specifies the type of function passed to g_timeout_add(), g_timeout_add_full(),
g_idle_add(), and g_idle_add_full().
</para>
@data: data passed to the function, set when the source was created with one
of the above functions.
@Returns: it should return FALSE if the source should be removed.
<!-- ##### FUNCTION g_idle_add ##### -->
<para>
Adds a function to be called whenever there are no higher priority events
pending. The function is given the default idle priority,
#G_PRIORITY_DEFAULT_IDLE.
If the function returns FALSE it is automatically removed from the list of
event sources and will not be called again.
</para>
@function: the function to call.
@data: data to pass to the function.
@Returns: the id of the event source.
<!-- ##### FUNCTION g_idle_add_full ##### -->
<para>
Adds a function to be called whenever there are no higher priority events
pending.
If the function returns FALSE it is automatically removed from the list of
event sources and will not be called again.
</para>
@priority: the priority of the idle function, which should be somewhere around
#G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE.
@function: the function to call.
@data: data to pass to the function.
@destroy: the function to call when the timeout is destroyed, or NULL.
@Returns: the id of the event source.
<!-- ##### FUNCTION g_idle_remove_by_data ##### -->
<para>
Removes the idle function with the given data.
</para>
@data: the data which is passed to the idle function.
@Returns: TRUE if the idle function was found.
<!-- ##### FUNCTION g_main_add_poll ##### -->
<para>
Adds a file descriptor to be polled.
This is usually combined with g_source_add() to add an event source.
The event source's check function will typically test the revents
field in the #GPollFD struct and return TRUE if events need to be processed.
</para>
@fd: a #GPollFD, which is a file descriptor together with a bitwise
combination of #GIOCondition flags determining which events to poll for.
@priority: the priority of the poll, which should be the same as the priority
used for g_source_add() to ensure that the file descriptor is polled whenever
the results may be needed.
See #G_PRIORITY_DEFAULT, #G_PRIORITY_DEFAULT_IDLE, #G_PRIORITY_HIGH,
#G_PRIORITY_HIGH_IDLE, and #G_PRIORITY_LOW.
<!-- ##### STRUCT GPollFD ##### -->
<para>
<informaltable pgwide=1 frame="none" role="struct">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>#gint fd;</entry>
<entry>the file descriptor to poll (or a HANDLE on Win32 platforms).</entry>
</row>
<row>
<entry>#gushort events;</entry>
<entry>a bitwise combination of flags from #GIOCondition, specifying which
events should be polled for. Typically for reading from a file descriptor
you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and for writing you would use
%G_IO_OUT | %G_IO_ERR.
</entry>
</row>
<row>
<entry>#gushort revents;</entry>
<entry>a bitwise combination of flags from #GIOCondition, returned from the
poll() function to indicate which events occurred.
</entry>
</row>
</tbody></tgroup></informaltable>
</para>
@fd:
@events:
@revents:
<!-- ##### FUNCTION g_main_remove_poll ##### -->
<para>
Removes a file descriptor from the list being polled.
</para>
@fd: the #GPollFD to remove.
<!-- ##### FUNCTION g_main_set_poll_func ##### -->
<para>
Sets the function to use to handle polling of file descriptors.
It will be used instead of the <function>poll()</function> system call
(or GLib's replacement function, which is used where
<function>poll()</function> isn't available).
</para>
<para>
This function could possibly be used to integrate the GLib event loop
with an external event loop.
</para>
@func: the function to call to poll all file descriptors.
<!-- ##### USER_FUNCTION GPollFunc ##### -->
<para>
Specifies the type of function passed to g_main_set_poll_func().
The semantics of the function should match those of the
<function>poll()</function> system call.
</para>
@ufds: an array of #GPollFD elements.
@nfsd: the number of elements in @ufds.
@timeout: the maximum time to wait for an event of the file descriptors.
@Returns: the number of #GPollFD elements which have events or errors reported,
or -1 if an error occurred.
<!-- ##### FUNCTION g_source_add ##### -->
<para>
Adds a source to the main loop.
</para>
@priority: the priority of the function. See #G_PRIORITY_DEFAULT,
#G_PRIORITY_DEFAULT_IDLE, #G_PRIORITY_HIGH, #G_PRIORITY_HIGH_IDLE, and
#G_PRIORITY_LOW.
@can_recurse: if it is safe to call the source functions recursively.
@funcs: the functions to handle the source.
@source_data: data specific to the type of event source.
@user_data: user data which will be passed to the user function handling the
source.
@notify: the function to call when the source is destroyed.
@Returns: the id of the event source.
<!-- ##### STRUCT GSourceFuncs ##### -->
<para>
The #GSourceFuncs struct contains a table of functions used to handle
event sources in a generic manner.
<informaltable pgwide=1 frame="none" role="struct">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>prepare</entry>
<entry>
Called before all the file descriptors are polled.
If the source can determine that it is ready here (without waiting for the
results of the poll() call) it should return TRUE.
It can also return a @timeout value which should be the maximum timeout
(in milliseconds) which should be passed to the poll() call.
The actual timeout used will be -1 if all sources returned -1, or it will
be the minimum of all the @timeout values returned which were >= 0.
</entry>
</row>
<row>
<entry>check</entry>
<entry>
Called after all the file descriptors are polled.
The source should return TRUE if it is ready to be processed.
Note that some time may have passed since the previous prepare function was
called, so the source should be checked again here.
</entry>
</row>
<row>
<entry>dispatch</entry>
<entry>
Called to process the event source, after it has returned TRUE in either
its @prepare or its @check function.
</entry>
</row>
<row>
<entry>destroy</entry>
<entry>
Called when the source is destroyed. It will be called with the user data
parameter passed to the g_source_add() and related functions.
</entry>
</row>
</tbody></tgroup></informaltable>
<para>
For idle sources, the prepare and check functions always return TRUE to
indicate that the source is always ready to be processed.
The prepare function also returns a timeout value of 0 to ensure that the
poll() call doesn't block (since that would be time wasted which could have
been spent running the idle function).
</para>
<para>
For timeout sources, the prepare and check functions both return TRUE if the
timeout interval has expired.
The prepare function also returns a timeout value to ensure that the poll()
call doesn't block too long and miss the next timeout.
</para>
<para>
For file descriptor sources, the prepare function typically returns FALSE,
since it must wait until poll() has been called before it knows whether any
events need to be processed. It sets the returned timeout to -1 to indicate
that it doesn't mind how long the poll() call blocks.
In the check function, it tests the results of the poll() call to see if
the required condition has been met, and returns TRUE if so.
</para>
@prepare:
@check:
@dispatch:
@destroy:
<!-- ##### FUNCTION g_source_remove ##### -->
<para>
Removes the event source with the given id.
The id is returned when the source is created, either directly with
g_source_add(), or indirectly with g_idle_add(), g_idle_add_full(),
g_timeout_add() and g_timeout_add_full().
</para>
@tag: the id of the event source to remove.
@Returns: TRUE if the source was found.
<!-- ##### FUNCTION g_source_remove_by_funcs_user_data ##### -->
<para>
Removes the event source with the given #GSourceFuncs and user data.
</para>
@funcs: the #GSourceFuncs of the source to remove.
@user_data: the user data of the source to remove.
@Returns: TRUE if the source was found.
<!-- ##### FUNCTION g_source_remove_by_source_data ##### -->
<para>
Removes the event source with the given source data.
</para>
@source_data: the source data, which contains information specific to the
type of source.
@Returns: TRUE if the source was found.
<!-- ##### FUNCTION g_source_remove_by_user_data ##### -->
<para>
Removes the event source with the given user data.
</para>
@user_data: the user data of the source to remove.
@Returns: TRUE if the source was found.

View File

@ -0,0 +1,156 @@
<!-- ##### SECTION Title ##### -->
Memory Allocation
<!-- ##### SECTION Short_Description ##### -->
general memory-handling.
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide support for allocating and freeing memory.
</para>
<note>
<para>
If any call to allocate memory fails, the application is terminated.
This also means that there is no need to check if the call succeeded.
</para>
</note>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO g_new ##### -->
<para>
Allocates @count elements of type @type.
The returned pointer is cast to a pointer to the given type.
If @count is 0 it returns NULL.
</para>
@type: the type of the elements to allocate.
@count: the number of elements to allocate.
@Returns: a pointer to the allocated memory, cast to a pointer to @type.
<!-- ##### MACRO g_new0 ##### -->
<para>
Allocates @count elements of type @type, initialized to 0's.
The returned pointer is cast to a pointer to the given type.
If @count is 0 it returns NULL.
</para>
@type: the type of the elements to allocate.
@count: the number of elements to allocate.
@Returns: a pointer to the allocated memory, cast to a pointer to @type.
<!-- ##### MACRO g_renew ##### -->
<para>
Reallocates the memory pointed to by @mem, so that it now has space for
@count elements of type @type. It returns the new address of the memory,
which may have been moved.
</para>
@type: the type of the elements to allocate.
@mem: the currently allocated memory.
@count: the number of elements to allocate.
@Returns: a pointer to the new allocated memory, cast to a pointer to @type.
<!-- ##### FUNCTION g_malloc ##### -->
<para>
Allocates @size bytes of memory.
If @size is 0 it returns NULL.
</para>
@size: the number of bytes to allocate.
@Returns: a pointer to the allocated memory.
<!-- ##### FUNCTION g_malloc0 ##### -->
<para>
Allocates @size bytes of memory, initialized to 0's.
If @size is 0 it returns NULL.
</para>
@size: the number of bytes to allocate.
@Returns: a pointer to the allocated memory.
<!-- ##### FUNCTION g_realloc ##### -->
<para>
Reallocates the memory pointed to by @mem, so that it now has space for
@size bytes of memory. It returns the new address of the memory, which may
have been moved.
</para>
@mem: the memory to reallocate.
@size: the new size of the allocated memory, in bytes.
@Returns: the new address of the allocated memory.
<!-- ##### FUNCTION g_free ##### -->
<para>
Frees the memory pointed to by @mem.
If @mem is NULL it simply returns.
</para>
@mem: the memory to free.
<!-- ##### MACRO g_memmove ##### -->
<para>
Copies a block of memory @n bytes long, from @s to @d.
The source and destination areas may overlap.
</para>
<note>
<para>
On architectures where memmove() is not available, this function is implemented
using bcopy(), which may not be able to handle overlapping areas.
</para>
</note>
@d: the destination address to copy the bytes to.
@s: the source address to copy the bytes from.
@n: the number of bytes to copy.
<!-- ##### FUNCTION g_memdup ##### -->
<para>
Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
from @mem. If @mem is NULL it returns NULL.
</para>
@mem: the memory to copy.
@byte_size: the number of bytes to copy.
@Returns: a pointer to the newly allocated copy of the memory, or NULL if @mem
is NULL.
<!-- ##### FUNCTION g_mem_profile ##### -->
<para>
Outputs a summary of memory usage.
To use this function you must configure glib with the flag
'--enable-mem-profile=yes' before compiling.
</para>
<para>
It outputs the frequency of allocations of different sizes,
the total number of bytes which have been allocated,
the total number of bytes which have been freed,
and the difference between the previous two values, i.e. the number of bytes
still in use.
</para>
<!-- ##### FUNCTION g_mem_check ##### -->
<para>
Checks if the given memory has already been freed. If it has it outputs
a warning message.
To use this function you must configure glib with the flag
'--enable-mem-check=yes' before compiling.
</para>
@mem: the memory to check.

View File

@ -0,0 +1,303 @@
<!-- ##### SECTION Title ##### -->
Memory Chunks
<!-- ##### SECTION Short_Description ##### -->
efficient way to allocate groups of equal-sized chunks of memory.
<!-- ##### SECTION Long_Description ##### -->
<para>
Memory chunks provide an efficient way to allocate equal-sized pieces of
memory, called atoms. They are used extensively within GLib itself.
For example, the
<link linkend="glib-Doubly-Linked-lists">Doubly Linked Lists</link>
use memory chunks to allocate space for elements of the lists.
</para>
<para>
There are two types of memory chunks, #G_ALLOC_ONLY, and #G_ALLOC_AND_FREE.
<itemizedlist>
<listitem><para>
#G_ALLOC_ONLY chunks only allow allocation of atoms. The atoms can never
be freed individually. The memory chunk can only be free in its entirety.
</para></listitem>
<listitem><para>
#G_ALLOC_AND_FREE chunks do allow atoms to be freed individually.
The disadvantage of this is that the memory chunk has to keep track of which
atoms have been freed. This results in more memory being used and a slight
degradation in performance.
</para></listitem>
</itemizedlist>
</para>
<para>
To create a memory chunk use g_mem_chunk_new() or the convenience macro
g_mem_chunk_create().
</para>
<para>
To allocate a new atom use g_mem_chunk_alloc(), g_mem_chunk_alloc0(),
or the convenience macros g_chunk_new() or g_chunk_new0().
</para>
<para>
To free an atom use g_mem_chunk_free(), or the convenience macro
g_chunk_free(). (Atoms can only be freed if the memory chunk is created
with the type set to #G_ALLOC_AND_FREE.)
</para>
<para>
To free any blocks of memory which are no longer being used, use
g_mem_chunk_clean(). To clean all memory chunks, use g_blow_chunks().
</para>
<para>
To reset the memory chunk, freeing all of the atoms, use g_mem_chunk_reset().
</para>
<para>
To destroy a memory chunk, use g_mem_chunk_destroy().
</para>
<para>
To help debug memory chunks, use g_mem_chunk_info() and g_mem_chunk_print().
</para>
<example>
<title>Using a GMemChunk.</title>
<programlisting>
GMemChunk *mem_chunk;
gchar *mem[10000];
gint i;
/* Create a GMemChunk with atoms 50 bytes long, and memory blocks holding
100 bytes. Note that this means that only 2 atoms fit into each memory
block and so isn't very efficient. */
mem_chunk = g_mem_chunk_new ("test mem chunk", 50, 100, G_ALLOC_AND_FREE);
/* Now allocate 10000 atoms. */
for (i = 0; i < 10000; i++)
{
mem[i] = g_chunk_new (gchar, mem_chunk);
/* Fill in the atom memory with some junk. */
for (j = 0; j < 50; j++)
mem[i][j] = i * j;
}
/* Now free all of the atoms. Note that since we are going to destroy the
GMemChunk, this wouldn't normally be used. */
for (i = 0; i < 10000; i++)
{
g_mem_chunk_free (mem_chunk, mem[i]);
}
/* We are finished with the GMemChunk, so we destroy it. */
g_mem_chunk_destroy (mem_chunk);
</programlisting></example>
<example>
<title>Using a GMemChunk with data structures.</title>
<programlisting>
GMemChunk *array_mem_chunk;
GRealArray *array;
/* Create a GMemChunk to hold GRealArray structures, using the
g_mem_chunk_create() convenience macro. We want 1024 atoms in each
memory block, and we want to be able to free individual atoms. */
array_mem_chunk = g_mem_chunk_create (GRealArray, 1024, G_ALLOC_AND_FREE);
/* Allocate one atom, using the g_chunk_new() convenience macro. */
array = g_chunk_new (GRealArray, array_mem_chunk);
/* We can now use array just like a normal pointer to a structure. */
array->data = NULL;
array->len = 0;
array->alloc = 0;
array->zero_terminated = (zero_terminated ? 1 : 0);
array->clear = (clear ? 1 : 0);
array->elt_size = elt_size;
/* We can free the element, so it can be reused. */
g_chunk_free (array, array_mem_chunk);
/* We destroy the GMemChunk when we are finished with it. */
g_mem_chunk_destroy (array_mem_chunk);
</programlisting></example>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GMemChunk ##### -->
<para>
The #GMemChunk struct is an opaque data structure representing a memory
chunk. It should be accessed only through the use of the following functions.
</para>
<!-- ##### MACRO G_ALLOC_AND_FREE ##### -->
<para>
Specifies the type of a #GMemChunk.
Used in g_mem_chunk_new() and g_mem_chunk_create() to specify that atoms
will be freed individually.
</para>
<!-- ##### MACRO G_ALLOC_ONLY ##### -->
<para>
Specifies the type of a #GMemChunk.
Used in g_mem_chunk_new() and g_mem_chunk_create() to specify that atoms
will never be freed individually.
</para>
<!-- ##### FUNCTION g_mem_chunk_new ##### -->
<para>
Creates a new #GMemChunk.
</para>
@name: a string to identify the #GMemChunk. It is not copied so it
should be valid for the lifetime of the #GMemChunk. It is only used in
g_mem_chunk_print(), which is used for debugging.
@atom_size: the size, in bytes, of each element in the #GMemChunk.
@area_size: the size, in bytes, of each block of memory allocated to contain
the atoms.
@type: the type of the #GMemChunk.
#G_ALLOC_AND_FREE is used if the atoms will be freed individually.
#G_ALLOC_ONLY should be used if atoms will never be freed individually.
#G_ALLOC_ONLY is quicker, since it does not need to track free atoms,
but it obviously wastes memory if you no longer need many of the atoms.
@Returns: the new #GMemChunk.
<!-- ##### FUNCTION g_mem_chunk_alloc ##### -->
<para>
Allocates an atom of memory from a #GMemChunk.
</para>
@mem_chunk: a #GMemChunk.
@Returns: a pointer to the allocated atom.
<!-- ##### FUNCTION g_mem_chunk_alloc0 ##### -->
<para>
Allocates an atom of memory from a #GMemChunk, setting the memory to 0.
</para>
@mem_chunk: a #GMemChunk.
@Returns: a pointer to the allocated atom.
<!-- ##### FUNCTION g_mem_chunk_free ##### -->
<para>
Frees an atom in a #GMemChunk.
This should only be called if the #GMemChunk was created with
#G_ALLOC_AND_FREE. Otherwise it will simply return.
</para>
@mem_chunk: a #GMemChunk.
@mem: a pointer to the atom to free.
<!-- ##### FUNCTION g_mem_chunk_destroy ##### -->
<para>
Frees all of the memory allocated for a #GMemChunk.
</para>
@mem_chunk: a #GMemChunk.
<!-- ##### MACRO g_mem_chunk_create ##### -->
<para>
A convenience macro for creating a new #GMemChunk.
It calls g_mem_chunk_new(), using the given type to create the #GMemChunk
name. The atom size is determined using <function>sizeof()</function>, and the
area size is calculated by multiplying the @pre_alloc parameter with
the atom size.
</para>
@type: the type of the atoms, typically a structure name.
@pre_alloc: the number of atoms to store in each block of memory.
@alloc_type: the type of the #GMemChunk.
#G_ALLOC_AND_FREE is used if the atoms will be freed individually.
#G_ALLOC_ONLY should be used if atoms will never be freed individually.
#G_ALLOC_ONLY is quicker, since it does not need to track free atoms,
but it obviously wastes memory if you no longer need many of the atoms.
@Returns: the new #GMemChunk.
<!-- ##### MACRO g_chunk_new ##### -->
<para>
A convenience macro to allocate an atom of memory from a #GMemChunk.
It calls g_mem_chunk_alloc() and casts the returned atom to a pointer to
the given type, avoiding a type cast in the source code.
</para>
@type: the type of the #GMemChunk atoms, typically a structure name.
@chunk: a #GMemChunk.
@Returns: a pointer to the allocated atom, cast to a pointer to @type.
<!-- ##### MACRO g_chunk_new0 ##### -->
<para>
A convenience macro to allocate an atom of memory from a #GMemChunk.
It calls g_mem_chunk_alloc0() and casts the returned atom to a pointer to
the given type, avoiding a type cast in the source code.
</para>
@type: the type of the #GMemChunk atoms, typically a structure name.
@chunk: a #GMemChunk.
@Returns: a pointer to the allocated atom, cast to a pointer to @type.
<!-- ##### MACRO g_chunk_free ##### -->
<para>
A convenience macro to free an atom of memory from a #GMemChunk.
It simply switches the arguments and calls g_mem_chunk_free()
It is included simply to complement the other convenience macros, g_chunk_new()
and g_chunk_new0().
</para>
@mem: a pointer to the atom to be freed.
@mem_chunk: a #GMemChunk.
<!-- ##### FUNCTION g_mem_chunk_reset ##### -->
<para>
Resets a GMemChunk to its initial state.
It frees all of the currently allocated blocks of memory.
</para>
@mem_chunk: a #GMemChunk.
<!-- ##### FUNCTION g_mem_chunk_clean ##### -->
<para>
Frees any blocks in a #GMemChunk which are no longer being used.
</para>
@mem_chunk: a #GMemChunk.
<!-- ##### FUNCTION g_blow_chunks ##### -->
<para>
Calls g_mem_chunk_clean() on all #GMemChunk objects.
</para>
<!-- ##### FUNCTION g_mem_chunk_info ##### -->
<para>
Outputs debugging information for all #GMemChunk objects currently in use.
It outputs the number of #GMemChunk objects currently allocated,
and calls g_mem_chunk_print() to output information on each one.
</para>
<!-- ##### FUNCTION g_mem_chunk_print ##### -->
<para>
Outputs debugging information for a #GMemChunk.
It outputs the name of the #GMemChunk (set with g_mem_chunk_new()),
the number of bytes used, and the number of blocks of memory allocated.
</para>
@mem_chunk: a #GMemChunk.

View File

@ -0,0 +1,262 @@
<!-- ##### SECTION Title ##### -->
Message Logging
<!-- ##### SECTION Short_Description ##### -->
versatile support for logging messages with different levels of importance.
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide support for logging error messages or messages
used for debugging.
</para>
<para>
There are several built-in levels of messages, defined in #GLogLevelFlags.
These can be extended with user-defined levels.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO G_LOG_DOMAIN ##### -->
<para>
Defines the log domain.
For applications, this is typically left as the default NULL (or "") domain.
Libraries should define this so that any messages which they log can
be differentiated from messages from other libraries and application code.
But be careful not to define it in any public header files.
</para>
<para>
For example, GTK uses this in its Makefile.am:
<informalexample><programlisting>
INCLUDES = \
-DG_LOG_DOMAIN=\"Gtk\"
</programlisting></informalexample>
</para>
<!-- ##### VARIABLE g_log_domain_glib ##### -->
<para>
</para>
<!-- ##### VARIABLE g_log_domain_gmodule ##### -->
<para>
</para>
<!-- ##### MACRO G_LOG_FATAL_MASK ##### -->
<para>
GLib log levels that are considered fatal by default.
</para>
<!-- ##### MACRO G_LOG_LEVEL_USER_SHIFT ##### -->
<para>
Log level shift offset for user defined log levels (0-7 are used by GLib).
</para>
<!-- ##### USER_FUNCTION GLogFunc ##### -->
<para>
Specifies the prototype of log handler functions.
</para>
@log_domain: the log domain of the message.
@log_level: the log level of the message.
@message: the message to process.
@user_data: user data, set in g_log_set_handler().
<!-- ##### ENUM GLogLevelFlags ##### -->
<para>
Flags specifying the level of log messages.
</para>
@G_LOG_FLAG_RECURSION:
@G_LOG_FLAG_FATAL:
@G_LOG_LEVEL_ERROR:
@G_LOG_LEVEL_CRITICAL:
@G_LOG_LEVEL_WARNING:
@G_LOG_LEVEL_MESSAGE:
@G_LOG_LEVEL_INFO:
@G_LOG_LEVEL_DEBUG:
@G_LOG_LEVEL_MASK:
<!-- ##### FUNCTION g_log ##### -->
<para>
Logs an error or debugging message.
If the log level has been set as fatal, the <function>abort()</function>
function is called to terminate the program.
</para>
@log_domain: the log domain, usually #G_LOG_DOMAIN.
@log_level: the log level, either from #GLogLevelFlags or a user-defined level.
@format: the message format. See the <function>printf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_logv ##### -->
<para>
Logs an error or debugging message.
If the log level has been set as fatal, the <function>abort()</function>
function is called to terminate the program.
</para>
@log_domain: the log domain.
@log_level: the log level.
@format: the message format. See the <function>printf()</function>
documentation.
@args: the parameters to insert into the format string.
<!-- ##### MACRO g_message ##### -->
<para>
A convenience function/macro to log a normal message.
</para>
@format: the message format. See the <function>printf()</function>
documentation.
@args...: the parameters to insert into the format string.
<!-- ##### MACRO g_warning ##### -->
<para>
A convenience function/macro to log a warning message.
</para>
@format: the message format. See the <function>printf()</function>
documentation.
@args...: the parameters to insert into the format string.
<!-- ##### MACRO g_error ##### -->
<para>
A convenience function/macro to log an error message.
Error messages are always fatal, resulting in a call to
<function>abort()</function> to terminate the application.
</para>
@format: the message format. See the <function>printf()</function>
documentation.
@args...: the parameters to insert into the format string.
<!-- ##### FUNCTION g_log_set_handler ##### -->
<para>
Sets the log handler for a domain and set of log levels.
</para>
@log_domain: the log domain, or NULL for the default "" application domain.
@log_levels: the levels to apply the log handler.
@log_func: the log handler function.
@user_data: data passed to the log handler.
@Returns: the id of the new handler.
<!-- ##### FUNCTION g_log_remove_handler ##### -->
<para>
Removes the log handler.
</para>
@log_domain: the log domain.
@handler_id: the id of the handler, which was returned in g_log_set_handler().
<!-- ##### FUNCTION g_log_set_always_fatal ##### -->
<para>
Sets the message levels which are always fatal, in any log domain.
When a message with any of these levels is logged the program terminates.
You can only set the levels defined by GLib to be fatal.
%G_LOG_LEVEL_ERROR is always fatal.
</para>
@fatal_mask: the mask containing bits set for each level of error which is
to be fatal.
@Returns: the old fatal mask.
<!-- ##### FUNCTION g_log_set_fatal_mask ##### -->
<para>
Sets the log levels which are fatal in the given domain.
%G_LOG_LEVEL_ERROR is always fatal.
</para>
@log_domain: the log domain.
@fatal_mask: the new fatal mask.
@Returns: the old fatal mask for the log domain.
<!-- ##### FUNCTION g_log_default_handler ##### -->
<para>
The default log handler.
This is used if no log handler has been set for the particular log domain
and log level combination. It outputs the message to stderr or stdout
and if the log level is fatal it calls <function>abort()</function>.
</para>
<para>
stderr is used for levels %G_LOG_LEVEL_ERROR, %G_LOG_LEVEL_CRITICAL, and
%G_LOG_LEVEL_WARNING. stdout is used for the rest.
(On the Windows platform, stdout is always used.)
</para>
@log_domain: the log domain of the message.
@log_level: the level of the message.
@message: the message.
@unused_data: data passed from g_log which is unused.
<!-- ##### FUNCTION g_set_error_handler ##### -->
<para>
Sets the function to be called to handle error messages.
This function is deprecated in favour of the new logging facilities.
</para>
@func: the function to be called to handle error messages.
@Returns: the old error handler.
<!-- ##### USER_FUNCTION GErrorFunc ##### -->
<para>
Specifies the type of function passed to g_set_error_handler().
</para>
@str: the error message.
<!-- ##### FUNCTION g_set_warning_handler ##### -->
<para>
Sets the function to be called to handle warning messages.
This function is deprecated in favour of the new logging facilities.
</para>
@func: the function to be called to handle warning messages.
@Returns: the old warning handler.
<!-- ##### USER_FUNCTION GWarningFunc ##### -->
<para>
Specifies the type of function passed to g_set_warning_handler().
</para>
@str: the warning message.
<!-- ##### FUNCTION g_set_message_handler ##### -->
<para>
Sets the function to be called to handle messages.
This function is deprecated in favour of the new logging facilities.
</para>
@func: the function to be called to handle normal messages.
@Returns: the old message handler.

View File

@ -0,0 +1,226 @@
<!-- ##### SECTION Title ##### -->
Miscellaneous Utility Functions
<!-- ##### SECTION Short_Description ##### -->
a selection of portable utility functions.
<!-- ##### SECTION Long_Description ##### -->
<para>
These are portable utility functions.
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### FUNCTION g_get_prgname ##### -->
<para>
Gets the name of the program.
(If you are using GDK or GTK the program name is set in gdk_init(), which
is called by gtk_init(). The program name is found by taking the last
component of argv[0].)
</para>
@Returns: the name of the program.
<!-- ##### FUNCTION g_set_prgname ##### -->
<para>
Sets the name of the program.
</para>
@prgname: the name of the program.
<!-- ##### FUNCTION g_getenv ##### -->
<para>
Returns an environment variable.
On windows systems the returned value is only valid until the next call to
g_getenv().
</para>
@variable: the environment variable to get.
@Returns: the value of the environment variable, or NULL if the environment
variable is not found.
<!-- ##### FUNCTION g_get_user_name ##### -->
<para>
Gets the user name of the current user.
</para>
@Returns: the user name of the current user.
<!-- ##### FUNCTION g_get_real_name ##### -->
<para>
Gets the real name of the user. This comes from the user's entry in the
passwd file.
</para>
@Returns: the user's real name.
<!-- ##### FUNCTION g_get_home_dir ##### -->
<para>
Gets the current user's home directory.
</para>
@Returns: the current user's home directory.
<!-- ##### FUNCTION g_get_tmp_dir ##### -->
<para>
Gets the directory to use for temporary files.
This is found from inspecting the environment variables TMPDIR, TMP, and TEMP
in that order. If none of those are defined "/tmp" is returned.
</para>
@Returns: the directory to use for temporary files.
<!-- ##### FUNCTION g_get_current_dir ##### -->
<para>
Gets the current directory.
The returned string should be freed when no longer needed.
</para>
@Returns: the current directory.
<!-- ##### FUNCTION g_basename ##### -->
<para>
Gets the name of the file without any leading directory components.
It returns a pointer into the given file name string.
</para>
@file_name: the name of the file.
@Returns: the name of the file without any leading directory components.
<!-- ##### FUNCTION g_dirname ##### -->
<para>
Gets the directory components of a file name.
If the file name has no directory components "." is returned.
The returned string should be freed when no longer needed.
</para>
@file_name: the name of the file.
@Returns: the directory components of the file.
<!-- ##### FUNCTION g_path_is_absolute ##### -->
<para>
Returns TRUE if the given @file_name is an absolute file name,
i.e. it contains a full path from the root directory such as '/usr/local'
or 'C:/windows' on windows systems.
</para>
@file_name: a file name.
@Returns: TRUE if @file_name is an absolute path.
<!-- ##### FUNCTION g_path_skip_root ##### -->
<para>
Returns a pointer into @file_name after the root component, i.e. after
the '/' in Unix or 'C:/' under Windows. If @file_name is not an absolute
path it returns NULL.
</para>
@file_name: a file name.
@Returns: a pointer into @file_name after the root component.
<!-- ##### FUNCTION g_bit_nth_lsf ##### -->
<para>
FIXME: I don't know what this does!
</para>
@mask:
@nth_bit:
@Returns:
<!-- ##### FUNCTION g_bit_nth_msf ##### -->
<para>
FIXME: I don't know what this does!
</para>
@mask:
@nth_bit:
@Returns:
<!-- ##### FUNCTION g_bit_storage ##### -->
<para>
Gets the number of bits used to hold @number,
e.g. if @number is 4, 3 bits are needed.
</para>
@number: a guint.
@Returns: the number of bits used to hold @number.
<!-- ##### FUNCTION g_spaced_primes_closest ##### -->
<para>
Gets the smallest prime number from a built-in array of primes which
is larger than @num. This is used within GLib to calculate the optimum
size of a #GHashTable.
</para>
<para>
The built-in array of primes ranges from 11 to 13845163 such that
each prime is approximately 1.5-2 times the previous prime.
</para>
@num: a guint.
@Returns: the smallest prime number from a built-in array of primes which is
larger than @num.
<!-- ##### FUNCTION g_atexit ##### -->
<para>
Specifies a function to be called at normal program termination.
</para>
@func: the function to call on normal program termination.
<!-- ##### FUNCTION g_parse_debug_string ##### -->
<para>
Parses a string containing debugging options separated by ':' into a guint
containing bit flags.
This is used within GDK and GTK to parse the debug options passed on the
command line or through environment variables.
</para>
@string: a list of debug options separated by ':' or "all" to set all flags.
@keys: pointer to an array of #GDebugKey which associate strings with
bit flags.
@nkeys: the number of #GDebugKey in the array.
@Returns: the combined set of bit flags.
<!-- ##### STRUCT GDebugKey ##### -->
<para>
Associates a string with a bit flag.
Used in g_parse_debug_string().
</para>
@key:
@value:
<!-- ##### USER_FUNCTION GVoidFunc ##### -->
<para>
Specifies the type of function passed to g_atexit().
</para>
<!-- ##### USER_FUNCTION GFreeFunc ##### -->
<para>
</para>
@data:

View File

@ -0,0 +1,176 @@
<!-- ##### SECTION Title ##### -->
Dynamic Loading of Modules
<!-- ##### SECTION Short_Description ##### -->
portable method for dynamically loading 'plug-ins'.
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide a portable way to dynamically load object files
(commonly known as 'plug-ins').
The current implementation supports all systems that provide
an implementation of dlopen() (e.g. Linux/Sun), as well as HP-UX via its
shl_load() mechanism, and Windows platforms via DLLs.
</para>
<para>
To use them you must first determine whether dynamic loading
is supported on the platform by calling g_module_supported().
If it is, you can open a module with g_module_open(),
find the module's symbols (e.g. function names) with g_module_symbol(),
and later close the module with g_module_close().
g_module_name() will return the file name of a currently opened module.
</para>
<para>
If any of the above functions fail, the error status can be found with
g_module_error().
</para>
<para>
The gmodule implementation features reference counting for opened modules,
and supports hook functions within a module which are called when the
module is loaded and unloaded (see #GModuleCheckInit and #GModuleUnload).
</para>
<para>
If your module introduces static data to common subsystems in the running
program, e.g. through calling g_quark_from_static_string ("my-module-stuff"),
it must ensure that it is never unloaded, by calling g_module_make_resident().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GModule ##### -->
<para>
The #GModule struct is an opaque data structure to represent a
<link linkend="glib-Dynamic-Loading-of-Modules">Dynamically-Loaded Module</link>.
It should only be accessed via the following functions.
</para>
<!-- ##### FUNCTION g_module_supported ##### -->
<para>
Checks if modules are supported on the current platform.
</para>
@Returns: TRUE if modules are supported.
<!-- ##### FUNCTION g_module_build_path ##### -->
<para>
</para>
@directory:
@module_name:
@Returns:
<!-- ##### FUNCTION g_module_open ##### -->
<para>
Opens a module.
If the module has already been opened, its reference count is incremented.
</para>
@file_name: the name of the file containing the module.
@flags: the flags used for opening the module. Currently this can be 0 or
G_MODULE_BIND_LAZY for lazy binding, where symbols are only bound when needed.
@Returns: a #GModule on success, or NULL on failure.
<!-- ##### ENUM GModuleFlags ##### -->
<para>
Flags passed to g_module_open().
G_MODULE_BIND_LAZY specifies that symbols are only resolved when needed.
The default action is to bind all symbols when the module is loaded.
(G_MODULE_BIND_LAZY is not supported on all platforms.)
</para>
@G_MODULE_BIND_LAZY:
@G_MODULE_BIND_MASK:
<!-- ##### FUNCTION g_module_symbol ##### -->
<para>
Gets a symbol pointer from a module.
</para>
@module: the module.
@symbol_name: the name of the symbol to find.
@symbol: returns the pointer to the symbol value.
@Returns: TRUE on success.
<!-- ##### FUNCTION g_module_name ##### -->
<para>
Gets the file name from a #GModule.
</para>
@module: the module.
@Returns: the file name of the module, or "main" if the module is the main
program itself.
<!-- ##### FUNCTION g_module_make_resident ##### -->
<para>
Ensures that a module will never be unloaded.
Any future g_module_close() calls on the module will be ignored.
</para>
@module: a module to make permanently resident.
<!-- ##### FUNCTION g_module_close ##### -->
<para>
Closes a module.
</para>
@module: the module to close.
@Returns: TRUE on success.
<!-- ##### FUNCTION g_module_error ##### -->
<para>
Gets a string describing the last module error.
</para>
@Returns: a string describing the last module error.
<!-- ##### USER_FUNCTION GModuleCheckInit ##### -->
<para>
Specifies the type of the module initialization function.
If a module contains a function named g_module_check_init() it is called
automatically when the module is loaded. It is passed the #GModule structure
and should return NULL on success or a string describing the initialization
error.
</para>
@module: the #GModule corresponding to the module which has just been loaded.
@Returns: NULL on success, or a string describing the initialization error.
<!-- ##### USER_FUNCTION GModuleUnload ##### -->
<para>
Specifies the type of the module function called when it is unloaded.
If a module contains a function named g_module_unload() it is called
automatically when the module is unloaded.
It is passed the #GModule structure.
</para>
@module: the module about to be unloaded.
<!-- ##### MACRO G_MODULE_EXPORT ##### -->
<para>
Used to declare functions exported by modules.
</para>
<!-- ##### MACRO G_MODULE_IMPORT ##### -->
<para>
Used to declare functions imported from modules.
</para>

View File

@ -0,0 +1,91 @@
<!-- ##### SECTION Title ##### -->
Quarks
<!-- ##### SECTION Short_Description ##### -->
a 2-way association between a string and a unique integer identifier.
<!-- ##### SECTION Long_Description ##### -->
<para>
Quarks are associations between strings and integer identifiers.
Given either the string or the #GQuark identifier it is possible to
retrieve the other.
</para>
<para>
Quarks are used for both
<link linkend="glib-datasets">Datasets</link> and
<link linkend="glib-keyed-data-lists">Keyed Data Lists</link>.
</para>
<para>
To create a new quark from a string, use g_quark_from_string() or
g_quark_from_static_string().
</para>
<para>
To find the string corresponding to a given #GQuark, use g_quark_to_string().
</para>
<para>
To find the #GQuark corresponding to a given string, use g_quark_try_string().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### TYPEDEF GQuark ##### -->
<para>
A GQuark is an integer which uniquely identifies a particular string.
</para>
<!-- ##### FUNCTION g_quark_from_string ##### -->
<para>
Gets the #GQuark identifying the given string.
If the string does not currently have an associated #GQuark, a new
#GQuark is created, using a copy of the string.
</para>
@string: a string.
@Returns: the #GQuark identifying the string.
<!-- ##### FUNCTION g_quark_from_static_string ##### -->
<para>
Gets the #GQuark identifying the given (static) string.
If the string does not currently have an associated #GQuark, a new
#GQuark is created, linked to the given string.
</para>
<para>
Note that this function is identical to g_quark_from_string() except
that if a new #GQuark is created the string itself is used rather than
a copy. This saves memory, but can only be used if the string will
always exist (if, for example, it is a statically-allocated string).
</para>
@string: a string.
@Returns: the #GQuark identifying the string.
<!-- ##### FUNCTION g_quark_to_string ##### -->
<para>
Gets the string associated with the given #GQuark.
</para>
@quark: a #GQuark.
@Returns: the string associated with the #GQuark.
<!-- ##### FUNCTION g_quark_try_string ##### -->
<para>
Gets the #GQuark associated with the given string, or 0 if the string has
no associated #GQuark.
</para>
<para>
If you want the GQuark to be created if it doesn't already exist, use
g_quark_from_string() or g_quark_from_static_string().
</para>
@string: a string.
@Returns: the #GQuark associated with the string, or 0 if there is no
#GQuark associated with the string.

View File

@ -0,0 +1,201 @@
<!-- ##### SECTION Title ##### -->
Relations and Tuples
<!-- ##### SECTION Short_Description ##### -->
tables of data which can be indexed on any number of fields.
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GRelation is a table of data which can be indexed on any number of fields,
rather like simple database tables. A #GRelation contains a number of
records, called tuples. Each record contains a number of fields.
Records are not ordered, so it is not possible to find the record at a
particular index.
</para>
<para>
Note that #GRelation tables are currently limited to 2 fields.
</para>
<para>
To create a GRelation, use g_relation_new().
</para>
<para>
To specify which fields should be indexed, use g_relation_index().
Note that this must be called before any tuples are added to the #GRelation.
</para>
<para>
To add records to a #GRelation use g_relation_insert().
</para>
<para>
To determine if a given record appears in a #GRelation, use
g_relation_exists(). Note that fields are compared directly, so pointers
must point to the exact same position (i.e. different copies of the same
string will not match.)
</para>
<para>
To count the number of records which have a particular value in a given
field, use g_relation_count().
</para>
<para>
To get all the records which have a particular value in a given field,
use g_relation_select(). To access fields of the resulting records,
use g_tuples_index(). To free the resulting records use g_tuples_destroy().
</para>
<para>
To delete all records which have a particular value in a given field,
use g_relation_delete().
</para>
<para>
To destroy the #GRelation, use g_relation_destroy().
</para>
<para>
To help debug #GRelation objects, use g_relation_print().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GRelation ##### -->
<para>
The #GRelation struct is an opaque data structure to represent a
<link linkend="glib-Relations-and-Tuples">Relation</link>.
It should only be accessed via the following functions.
</para>
<!-- ##### FUNCTION g_relation_new ##### -->
<para>
Creates a new #GRelation with the given number of fields.
Note that currently the number of fields must be 2.
</para>
@fields: the number of fields.
@Returns: a new #GRelation.
<!-- ##### FUNCTION g_relation_index ##### -->
<para>
Creates an index on the given field.
Note that this must be called before any records are added to the #GRelation.
</para>
@relation: a #GRelation.
@field: the field to index, counting from 0.
@hash_func: a function to produce a hash value from the field data.
@key_compare_func: a function to compare two values of the given field.
<!-- ##### FUNCTION g_relation_insert ##### -->
<para>
Inserts a record into a #GRelation.
</para>
@relation: a #GRelation.
@Varargs: the fields of the record to add. This must match the number of
fields in the #GRelation.
<!-- ##### FUNCTION g_relation_exists ##### -->
<para>
Returns TRUE if a record with the given values exists in a #GRelation.
Note that the values are compared directly, so that, for example, two
copies of the same string will not match.
</para>
@relation: a #GRelation.
@Varargs: the fields of the record to compare. The number must match the
number of fields in the #GRelation.
@Returns: TRUE if a record matches.
<!-- ##### FUNCTION g_relation_count ##### -->
<para>
Returns the number of tuples in a #GRelation that have the given value
in the given field.
</para>
@relation: a #GRelation.
@key: the value to compare with.
@field: the field of each record to match.
@Returns: the number of matches.
<!-- ##### FUNCTION g_relation_select ##### -->
<para>
Returns all of the tuples which have the given key in the given field.
Use g_tuples_index() to access the returned records.
The returned records should be freed with g_tuples_destroy().
</para>
@relation: a #GRelation.
@key: the value to compare with.
@field: the field of each record to match.
@Returns: the records (tuples) that matched.
<!-- ##### FUNCTION g_relation_delete ##### -->
<para>
Deletes any records from a GRelation that have the given key value in
the given field.
</para>
@relation: a #GRelation.
@key: the value to compare with.
@field: the field of each record to match.
@Returns: the number of records deleted.
<!-- ##### FUNCTION g_relation_destroy ##### -->
<para>
Destroys the #GRelation, freeing all memory allocated.
However, it does not free memory allocated for the
tuple data, so you should free that first if appropriate.
</para>
@relation: a #GRelation.
<!-- ##### FUNCTION g_relation_print ##### -->
<para>
Outputs information about all records in a #GRelation, as well as the indexes.
It is for debugging.
</para>
@relation: a #GRelation.
<!-- ##### STRUCT GTuples ##### -->
<para>
The #GTuples struct is used to return records (or tuples) from the
#GRelation by g_relation_select().
It only contains one public member - the number of records that matched.
To access the matched records, you must use g_tuples_index().
</para>
@len:
<!-- ##### FUNCTION g_tuples_destroy ##### -->
<para>
Frees the records which were returned by g_relation_select().
This should always be called after g_relation_select() when you are
finished with the records.
The records are not removed from the #GRelation.
</para>
@tuples: the tuple data to free.
<!-- ##### FUNCTION g_tuples_index ##### -->
<para>
Gets a field from the records returned by g_relation_select().
It returns the given field of the record at the given index.
The returned value should not be changed.
</para>
@tuples: the tuple data, returned by g_relation_select().
@index: the index of the record.
@field: the field to return.
@Returns: the field of the record.

View File

@ -0,0 +1,490 @@
<!-- ##### SECTION Title ##### -->
Lexical Scanner
<!-- ##### SECTION Short_Description ##### -->
a general purpose lexical scanner.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GScanner and its associated functions provide a general purpose
lexical scanner.
</para>
<para>
FIXME: really needs an example and more detail, but I don't completely
understand it myself. Look at gtkrc.c for some code using the scanner.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GScanner ##### -->
<para>
The data structure representing a lexical scanner.
</para>
<para>
You should set input_name after creating the scanner, since it is used
by the default message handler when displaying warnings and errors.
If you are scanning a file, the file name would be a good choice.
</para>
<para>
The <structfield>user_data</structfield> and
<structfield>derived_data</structfield> fields are not used.
If you need to associate extra data with the scanner you can place them here.
</para>
<para>
If you want to use your own message handler you can set the
<structfield>msg_handler</structfield> field. The type of the message
handler function is declared by #GScannerMsgFunc.
</para>
@user_data:
@max_parse_errors:
@parse_errors:
@input_name:
@derived_data:
@config:
@token:
@value:
@line:
@position:
@next_token:
@next_value:
@next_line:
@next_position:
@symbol_table:
@input_fd:
@text:
@text_end:
@buffer:
@scope_id:
@msg_handler:
<!-- ##### FUNCTION g_scanner_new ##### -->
<para>
Creates a new #GScanner.
The @config_templ structure specifies the initial settings of the scanner,
which are copied into the #GScanner <structfield>config</structfield> field.
If you pass NULL then the default settings are used.
(See g_scanner_config_template in gscanner.c for the defaults.)
</para>
@config_templ: the initial scanner settings.
@Returns: the new #GScanner.
<!-- ##### STRUCT GScannerConfig ##### -->
<para>
Specifies the #GScanner settings.
</para>
<para>
<structfield>cset_skip_characters</structfield> specifies which characters
should be skipped by the scanner (the default is the whitespace characters:
space, tab, carriage-return and line-feed).
</para>
<para>
<structfield>cset_identifier_first</structfield> specifies the characters
which can start identifiers.
(the default is #G_CSET_a_2_z, "_", and #G_CSET_A_2_Z).
</para>
<para>
<structfield>cset_identifier_nth</structfield> specifies the characters
which can be used in identifiers, after the first character.
The default is #G_CSET_a_2_z, "_0123456789", #G_CSET_A_2_Z, #G_CSET_LATINS,
#G_CSET_LATINC.
</para>
<para>
<structfield>cpair_comment_single</structfield> specifies the characters
at the start and end of single-line comments. The default is "#\n" which
means that single-line comments start with a '#' and continue until a '\n'
(end of line).
</para>
<para>
<structfield>case_sensitive</structfield> specifies if symbols are
case sensitive.
</para>
<para>
The rest of the fields are flags which turn features on or off.
FIXME: should describe these.
</para>
@cset_skip_characters:
@cset_identifier_first:
@cset_identifier_nth:
@cpair_comment_single:
@case_sensitive:
@skip_comment_multi:
@skip_comment_single:
@scan_comment_multi:
@scan_identifier:
@scan_identifier_1char:
@scan_identifier_NULL:
@scan_symbols:
@scan_binary:
@scan_octal:
@scan_float:
@scan_hex:
@scan_hex_dollar:
@scan_string_sq:
@scan_string_dq:
@numbers_2_int:
@int_2_float:
@identifier_2_string:
@char_2_token:
@symbol_2_token:
@scope_0_fallback:
<!-- ##### FUNCTION g_scanner_input_file ##### -->
<para>
Prepares to scan a file.
</para>
@scanner: a #GScanner.
@input_fd: a file descriptor.
<!-- ##### FUNCTION g_scanner_sync_file_offset ##### -->
<para>
</para>
@scanner:
<!-- ##### FUNCTION g_scanner_stat_mode ##### -->
<para>
Gets the file attributes.
This is the <structfield>st_mode</structfield> field from the
<structname>stat</structname> structure. See the <function>stat()</function>
documentation.
</para>
@filename: the file name.
@Returns: the file attributes.
<!-- ##### FUNCTION g_scanner_input_text ##### -->
<para>
Prepares to scan a text buffer.
</para>
@scanner: a #GScanner.
@text: the text buffer to scan.
@text_len: the length of the text buffer.
<!-- ##### FUNCTION g_scanner_peek_next_token ##### -->
<para>
Gets the next token, without removing it from the input stream.
The token data is placed in the
<structfield>next_token</structfield>,
<structfield>next_value</structfield>,
<structfield>next_line</structfield>, and
<structfield>next_position</structfield> fields of the #GScanner structure.
</para>
@scanner: a #GScanner.
@Returns: the type of the token.
<!-- ##### FUNCTION g_scanner_get_next_token ##### -->
<para>
Gets the next token, removing it from the input stream.
The token data is placed in the
<structfield>token</structfield>,
<structfield>value</structfield>,
<structfield>line</structfield>, and
<structfield>position</structfield> fields of the #GScanner structure.
</para>
@scanner: a #GScanner.
@Returns: the type of the token.
<!-- ##### FUNCTION g_scanner_cur_line ##### -->
<para>
Gets the current line in the input stream (counting from 1).
</para>
@scanner: a #GScanner.
@Returns: the current line.
<!-- ##### FUNCTION g_scanner_cur_position ##### -->
<para>
Gets the current position in the current line (counting from 0).
</para>
@scanner: a #GScanner.
@Returns: the current position on the line.
<!-- ##### FUNCTION g_scanner_cur_token ##### -->
<para>
Gets the current token type.
This is simply the <structfield>token</structfield> field in the #GScanner
structure.
</para>
@scanner: a #GScanner.
@Returns: the current token type.
<!-- ##### FUNCTION g_scanner_cur_value ##### -->
<para>
Gets the current token value.
This is simply the <structfield>value</structfield> field in the #GScanner
structure.
</para>
@scanner: a #GScanner.
@Returns: the current token value.
<!-- ##### FUNCTION g_scanner_eof ##### -->
<para>
Returns TRUE if the scanner has reached the end of the file or text buffer.
</para>
@scanner: a #GScanner.
@Returns: TRUE if the scanner has reached the end of the file or text buffer.
<!-- ##### FUNCTION g_scanner_set_scope ##### -->
<para>
Sets the current scope.
</para>
@scanner: a #GScanner.
@scope_id: the new scope id.
@Returns: the old scope id.
<!-- ##### FUNCTION g_scanner_scope_add_symbol ##### -->
<para>
Adds a symbol to the given scope.
</para>
@scanner: a #GScanner.
@scope_id: the scope id.
@symbol: the symbol to add.
@value: the value of the symbol.
<!-- ##### FUNCTION g_scanner_scope_foreach_symbol ##### -->
<para>
</para>
@scanner:
@scope_id:
@func:
@user_data:
<!-- # Unused Parameters # -->
@func_data:
<!-- ##### FUNCTION g_scanner_scope_lookup_symbol ##### -->
<para>
</para>
@scanner:
@scope_id:
@symbol:
@Returns:
<!-- ##### FUNCTION g_scanner_scope_remove_symbol ##### -->
<para>
</para>
@scanner:
@scope_id:
@symbol:
<!-- ##### FUNCTION g_scanner_freeze_symbol_table ##### -->
<para>
</para>
@scanner:
<!-- ##### FUNCTION g_scanner_thaw_symbol_table ##### -->
<para>
</para>
@scanner:
<!-- ##### FUNCTION g_scanner_lookup_symbol ##### -->
<para>
</para>
@scanner:
@symbol:
@Returns:
<!-- ##### FUNCTION g_scanner_warn ##### -->
<para>
Outputs a warning message, via the #GScanner message handler.
</para>
@scanner: a #GScanner.
@format: the message format. See the <function>printf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_scanner_error ##### -->
<para>
Outputs an error message, via the #GScanner message handler.
</para>
@scanner: a #GScanner.
@format: the message format. See the <function>printf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_scanner_unexp_token ##### -->
<para>
Outputs a message resulting from an unexpected token in the input stream.
FIXME: I don't understand the arguments here.
</para>
@scanner: a #GScanner.
@expected_token: the expected token.
@identifier_spec: a string describing the expected type of identifier,
or NULL to use the default "identifier" string.
@symbol_spec: a string describing the expected type of identifier,
or NULL to use the default "symbol" string.
@symbol_name:
@message: a message string to output at the end of the warning/error, or NULL.
@is_error: if TRUE it is output as an error. If False it is output as a
warning.
<!-- ##### USER_FUNCTION GScannerMsgFunc ##### -->
<para>
</para>
@scanner:
@message:
@error:
<!-- ##### FUNCTION g_scanner_destroy ##### -->
<para>
Frees all memory used by the #GScanner.
</para>
@scanner: a #GScanner.
<!-- ##### ENUM GTokenType ##### -->
<para>
The possible types of token returned from each g_scanner_get_next_token() call.
</para>
@G_TOKEN_EOF:
@G_TOKEN_LEFT_PAREN:
@G_TOKEN_RIGHT_PAREN:
@G_TOKEN_LEFT_CURLY:
@G_TOKEN_RIGHT_CURLY:
<!-- ##### UNION GTokenValue ##### -->
<para>
A union holding the value of the token.
</para>
<!-- ##### ENUM GErrorType ##### -->
<para>
The possible errors, used in the <structfield>v_error</structfield> field
of #GTokenValue, when the token is a G_TOKEN_ERROR.
</para>
@G_ERR_UNKNOWN:
@G_ERR_UNEXP_EOF:
@G_ERR_UNEXP_EOF_IN_STRING:
@G_ERR_UNEXP_EOF_IN_COMMENT:
@G_ERR_NON_DIGIT_IN_CONST:
@G_ERR_DIGIT_RADIX:
@G_ERR_FLOAT_RADIX:
@G_ERR_FLOAT_MALFORMED:
<!-- ##### MACRO G_CSET_a_2_z ##### -->
<para>
The set of lower-case ASCII alphabet characters.
Used for specifying valid identifier characters in #GScannerConfig.
</para>
<!-- ##### MACRO G_CSET_A_2_Z ##### -->
<para>
The set of upper-case ASCII alphabet characters.
Used for specifying valid identifier characters in #GScannerConfig.
</para>
<!-- ##### MACRO G_CSET_LATINC ##### -->
<para>
Part of the set of extended characters in the Latin character sets.
FIXME: lower case?
Used for specifying valid identifier characters in #GScannerConfig.
</para>
<!-- ##### MACRO G_CSET_LATINS ##### -->
<para>
Part of the set of extended characters in the Latin character sets.
FIXME: upper case?
Used for specifying valid identifier characters in #GScannerConfig.
</para>
<!-- ##### MACRO g_scanner_add_symbol ##### -->
<para>
Adds a symbol to the default scope.
Deprecated in favour of g_scanner_scope_add_symbol().
</para>
@scanner: a #GScanner.
@symbol: the symbol to add.
@value: the value of the symbol.
<!-- ##### MACRO g_scanner_remove_symbol ##### -->
<para>
Removes a symbol from the default scope.
Deprecated in favour of g_scanner_scope_remove_symbol().
</para>
@scanner: a #GScanner.
@symbol: the symbol to remove.
<!-- ##### MACRO g_scanner_foreach_symbol ##### -->
<para>
Calls a function for each symbol in the default scope.
Deprecated in favour of g_scanner_scope_foreach_symbol().
</para>
@scanner: a #GScanner.
@func: the function to call with each symbol.
@data: data to pass to the function.

View File

@ -0,0 +1,110 @@
<!-- ##### SECTION Title ##### -->
String Chunks
<!-- ##### SECTION Short_Description ##### -->
efficient storage of groups of strings.
<!-- ##### SECTION Long_Description ##### -->
<para>
String chunks are used to store groups of strings.
Memory is allocated in blocks, and as strings are added to the #GStringChunk
they are copied into the next free position in a block. When a block is
full a new block is allocated.
</para>
<para>
When storing a large number of strings, string chunks are more efficient
than using g_strdup() since fewer calls to <function>malloc()</function>
are needed, and less memory is wasted in memory allocation overheads.
</para>
<para>
By adding strings with g_string_chunk_insert_const() it is also possible
to remove duplicates.
</para>
<para>
To create a new #GStringChunk use g_string_chunk_new().
</para>
<para>
To add strings to a #GStringChunk use g_string_chunk_insert().
</para>
<para>
To add strings to a #GStringChunk, but without duplicating strings which are
already in the #GStringChunk, use g_string_chunk_insert_const().
</para>
<para>
To free the entire #GStringChunk use g_string_chunk_free().
It is not possible to free individual strings.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GStringChunk ##### -->
<para>
An opaque data structure representing String Chunks.
It should only be accessed by using the following functions.
</para>
<!-- ##### FUNCTION g_string_chunk_new ##### -->
<para>
Creates a new #GStringChunk.
</para>
@size: the default size of the blocks of memory which are allocated to store
the strings. If a particular string is larger than this default size, a larger
block of memory will be allocated for it.
@Returns: a new #GStringChunk.
<!-- ##### FUNCTION g_string_chunk_insert ##### -->
<para>
Adds a copy of @string to the #GStringChunk.
It returns a pointer to the new copy of the string in the #GStringChunk.
The characters in the string can be changed, if necessary, though you
should not change anything after the end of the string.
</para>
<para>
Unlike g_string_chunk_insert_const(), this function does not check for
duplicates. Also strings added with g_string_chunk_insert() will not be
searched by g_string_chunk_insert_const() when looking for duplicates.
</para>
@chunk: a #GStringChunk.
@string: the string to add.
@Returns: a pointer to the copy of @string within the #GStringChunk.
<!-- ##### FUNCTION g_string_chunk_insert_const ##### -->
<para>
Adds a copy of @string to the #GStringChunk, unless the same string has
already been added to the #GStringChunk with g_string_chunk_insert_const().
</para>
<para>
This function is useful if you need to copy a large number of strings
but do not want to waste space storing duplicates. But you must remember
that there may be several pointers to the same string, and so any changes
made to the strings should be done very carefully.
</para>
<para>
Note that g_string_chunk_insert_const() will not return a pointer to a string
added with g_string_chunk_insert(), even if they do match.
</para>
@chunk: a #GStringChunk.
@string: the string to add.
@Returns: a pointer to the new or existing copy of @string within the
#GStringChunk.
<!-- ##### FUNCTION g_string_chunk_free ##### -->
<para>
Frees all memory allocated by the #GStringChunk.
After calling g_string_chunk_free() it is not safe to
access any of the strings which were contained within it.
</para>
@chunk: a #GStringChunk.

View File

@ -0,0 +1,354 @@
<!-- ##### SECTION Title ##### -->
String Utility Functions
<!-- ##### SECTION Short_Description ##### -->
various string-related functions.
<!-- ##### SECTION Long_Description ##### -->
<para>
This section describes a number of utility functions for creating,
duplicating, and manipulating strings.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### FUNCTION g_strdup ##### -->
<para>
Duplicates a string.
The returned string should be freed when no longer needed.
</para>
@str: the string to duplicate.
@Returns: a newly-allocated copy of @str.
<!-- ##### FUNCTION g_strndup ##### -->
<para>
Duplicates the first @n characters of a string, and null-terminates it.
If @str is NULL, NULL is returned.
The returned string should be freed when no longer needed.
</para>
@str: the string to duplicate part of.
@n: the number of characters to copy, which must be less than or equal to the
length of @str.
@Returns: a newly-allocated copy of the first @n characters of @str,
null-terminated.
<!-- ##### FUNCTION g_strnfill ##### -->
<para>
Creates a new string @length characters long filled with @fill_char.
The returned string should be freed when no longer needed.
</para>
@length: the length of the new string.
@fill_char: the character to fill the string with.
@Returns: a newly-allocated string filled the @fill_char.
<!-- ##### FUNCTION g_strdup_printf ##### -->
<para>
Similar to the standard C <function>sprintf()</function> function
but safer, since it calculates the maximum space required and allocates
memory to hold the result.
The returned string should be freed when no longer needed.
</para>
@format: the standard <function>sprintf()</function> format string.
@Varargs: the parameters to insert into the format string.
@Returns: a newly-allocated string holding the result.
<!-- ##### FUNCTION g_strdup_vprintf ##### -->
<para>
Similar to the standard C <function>vsprintf()</function> function
but safer, since it calculates the maximum space required and allocates
memory to hold the result.
The returned string should be freed when no longer needed.
</para>
@format: the standard <function>sprintf()</function> format string.
@args: the list of parameters to insert into the format string.
@Returns: a newly-allocated string holding the result.
<!-- ##### FUNCTION g_snprintf ##### -->
<para>
A safer form of the standard <function>sprintf()</function> function.
The output is guaranteed to not exceed @n characters (including the
terminating NULL character), so it is easy to ensure that a buffer overflow
cannot occur.
</para>
<para>
See also g_strdup_printf().
</para>
<note>
<para>
In versions of GLib prior to 1.2.3, this function may return -1 if the output
was truncated, and the truncated string may not be NULL-terminated.
</para>
</note>
@string: the buffer to hold the output.
@n: the maximum number of characters to produce (including the terminating null
character).
@format: the format string. See the <function>sprintf()</function>
documentation.
@Varargs: the arguments to insert in the output.
@Returns: the length of the output string.
<!-- ##### FUNCTION g_vsnprintf ##### -->
<para>
A safer form of the standard <function>vsprintf()</function> function.
The output is guaranteed to not exceed @n characters (including the
terminating NULL character), so it is easy to ensure that a buffer overflow
cannot occur.
</para>
<para>
See also g_strdup_vprintf().
</para>
<note>
<para>
In versions of GLib prior to 1.2.3, this function may return -1 if the output
was truncated, and the truncated string may not be NULL-terminated.
</para>
</note>
@string: the buffer to hold the output.
@n: the maximum number of characters to produce (including the terminating null
character).
@format: the format string. See the <function>sprintf()</function>
documentation.
@args: the list of arguments to insert in the output.
@Returns: the length of the output string.
<!-- ##### FUNCTION g_printf_string_upper_bound ##### -->
<para>
Calculates the maximum space needed to store the output of the
<function>sprintf()</function> function.
</para>
@format: the format string. See the <function>printf()</function>
documentation.
@args: the parameters to be inserted into the format string.
@Returns: the maximum space needed to store the formatted string.
<!-- ##### FUNCTION g_strup ##### -->
<para>
Converts a string to upper case.
</para>
@string: the string to convert.
<!-- ##### FUNCTION g_strdown ##### -->
<para>
Converts a string to lower case.
</para>
@string: the string to convert.
<!-- ##### FUNCTION g_strcasecmp ##### -->
<para>
A case-insensitive string comparison, corresponding to the standard
<function>strcasecmp()</function> function on platforms which support it.
</para>
@s1: a string.
@s2: a string to compare with @s1.
@Returns: 0 if the strings match, a negative value if @s1 < @s2, or a positive
value if @s1 > @s2.
<!-- ##### FUNCTION g_strncasecmp ##### -->
<para>
A case-insensitive string comparison, corresponding to the standard
<function>strncasecmp()</function> function on platforms which support it.
It is similar to g_strcasecmp() except it only compares the first @n characters
of the strings.
</para>
@s1: a string.
@s2: a string to compare with @s1.
@n: the maximum number of characters to compare.
@Returns: 0 if the strings match, a negative value if @s1 < @s2, or a positive
value if @s1 > @s2.
<!-- ##### FUNCTION g_strreverse ##### -->
<para>
Reverses all of the characters in a string.
For example, g_strreverse ("abcdef") would be "fedcba".
</para>
@string: the string to reverse.
<!-- ##### FUNCTION g_strtod ##### -->
<para>
Converts a string to a gdouble value.
It calls the standard <function>strtod()</function> function
to handle the conversion, but if the string is not completely converted
it attempts the conversion again in the "C" locale, and returns the best
match.
</para>
@nptr: the string to convert to a numeric value.
@endptr: if non-NULL, it returns the character after the last character used
in the conversion.
@Returns: the gdouble value.
<!-- ##### FUNCTION g_strchug ##### -->
<para>
Removes leading whitespace from a string, by moving the rest of the
characters forward.
</para>
@string: a string to remove the leading whitespace from.
@Returns: @string.
<!-- ##### FUNCTION g_strchomp ##### -->
<para>
Removes trailing whitespace from a string.
</para>
@string: a string to remove the trailing whitespace from.
@Returns: @string.
<!-- ##### MACRO g_strstrip ##### -->
<para>
Removes leading and trailing whitespace from a string.
</para>
@string: a string to remove the leading and trailing whitespace from.
<!-- ##### FUNCTION g_strdelimit ##### -->
<para>
Converts any delimiter characters in @string to @new_delimiter.
Any characters in @string which are found in @delimiters are changed
to the @new_delimiter character.
</para>
@string: the string to convert.
@delimiters: a string containing the current delimiters, or NULL to use the
standard delimiters defined in #G_STR_DELIMITERS.
@new_delimiter: the new delimiter character.
@Returns:
<!-- ##### MACRO G_STR_DELIMITERS ##### -->
<para>
The standard delimiters, used in #g_strdelimit.
</para>
<!-- ##### FUNCTION g_strescape ##### -->
<para>
Escapes all backslash characters, '\' in a string, by inserting a second '\'.
</para>
@string: a string to escape the backslashes in.
@Returns: a newly allocated copy of @string, with all backslash characters
escaped using a second backslash.
<!-- ##### FUNCTION g_strsplit ##### -->
<para>
Splits a string into a maximum of @max_tokens pieces, using the given
@delimiter. If @max_tokens is reached, the final string in the returned
string array contains the remainder of @string.
</para>
@string: a string to split.
@delimiter: a string which specifies the places at which to split the string.
The delimiter is not included in any of the resulting strings, unless
max_tokens is reached.
@max_tokens: the maximum number of strings to split @string into. If this is
less than 1, the string is split completely.
@Returns: a newly-allocated array of strings. Use g_strfreev() to free it.
<!-- ##### FUNCTION g_strfreev ##### -->
<para>
Frees a NULL-terminated array of strings, and the array itself.
</para>
@str_array: a NULL-terminated array of strings to free.
<!-- ##### FUNCTION g_strconcat ##### -->
<para>
Concatenates all of the given strings into one long string.
The returned string should be freed when no longer needed.
</para>
@string1: The first string to add, which must not be NULL.
@Varargs: a NULL-terminated list of strings to append to the string.
@Returns: a newly-allocated string containing all the string arguments.
<!-- ##### FUNCTION g_strjoin ##### -->
<para>
Joins a number of strings together to form one long string, with the optional
@separator inserted between each of them.
</para>
@separator: a string to insert between each of the strings, or NULL.
@Varargs: a NULL-terminated list of strings to join.
@Returns: a newly-allocated string containing all of the strings joined
together, with @separator between them.
<!-- ##### FUNCTION g_strjoinv ##### -->
<para>
Joins a number of strings together to form one long string, with the optional
@separator inserted between each of them.
</para>
@separator: a string to insert between each of the strings, or NULL.
@str_array: a NULL-terminated array of strings to join.
@Returns: a newly-allocated string containing all of the strings joined
together, with @separator between them.
<!-- ##### FUNCTION g_strerror ##### -->
<para>
Returns a string corresponding to the given error code, e.g. "no such process".
This function is included since not all platforms support the
<function>strerror()</function> function.
</para>
@errnum: the system error number. See the standard C %errno
documentation.
@Returns: a string describing the error code.
If the error code is unknown, it returns "unknown error (&lt;code&gt;)".
The string can only be used until the next call to g_strerror.
<!-- ##### FUNCTION g_strsignal ##### -->
<para>
Returns a string describing the given signal, e.g. "Segmentation fault".
This function is included since not all platforms support the
<function>strsignal()</function> function.
</para>
@signum: the signal number. See the <literal>signal</literal>
documentation.
@Returns: a string describing the signal.
If the signal is unknown, it returns "unknown signal (&lt;signum&gt;)".
The string can only be used until the next call to g_strsignal.

View File

@ -0,0 +1,209 @@
<!-- ##### SECTION Title ##### -->
Strings
<!-- ##### SECTION Short_Description ##### -->
text buffers which grow automatically as text is added.
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GString is similar to a standard C string, except that it grows
automatically as text is appended or inserted.
</para>
<para>
The space allocated for the string is always a power of two, so as the
string grows it will occupy 2, 4, 8, 16, 32, 64, 128 etc. characters.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GString ##### -->
<para>
The #GString struct contains the public fields of a #GString.
The <structfield>str</structfield> field points to the character data.
It may move as text is added.
The <structfield>len</structfield> field contains the length of the string,
not including the terminating null character.
</para>
<para>
The str field is zero-terminated and so can be used as an ordinary C
string. But it may be moved when text is appended or inserted into the
string.
</para>
@str:
@len:
<!-- ##### FUNCTION g_string_new ##### -->
<para>
Creates a new #GString, initialized with the given string.
</para>
@init: the initial text to copy into the string.
@Returns: the new #GString.
<!-- ##### FUNCTION g_string_sized_new ##### -->
<para>
Creates a new GString, with enough space for @dfl_size characters.
This is useful if you are going to add a lot of text to the string and
don't want it to be reallocated too often.
</para>
@dfl_size: the default size of the space allocated to hold the string.
@Returns: the new #GString.
<!-- ##### FUNCTION g_string_assign ##### -->
<para>
Copies the characters from one #GString into another, destroying any previous
contents. It is rather like the standard strcpy() function, except that
you do not have to worry about having enough space to copy the string.
</para>
@lval: the destination #GString. Its current contents are destroyed.
@rval: the source #GString.
@Returns: the destination #GString.
<!-- ##### FUNCTION g_string_sprintf ##### -->
<para>
Writes a formatted string into a #GString.
This is similar to the standard <function>sprintf()</function> function,
except that the GString buffer automatically expands to contain the results.
The previous contents of the GString are destroyed.
</para>
@string: a #GString.
@format: the string format. See the <function>sprintf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_string_sprintfa ##### -->
<para>
Appends a formatted string onto the end of a #GString.
This function is is similar to g_string_sprintf() except that
the text is appended to the GString.
</para>
@string: a #GString.
@format: the string format. See the <function>sprintf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_string_append ##### -->
<para>
Adds a string onto the end of a #GString, expanding it if necessary.
</para>
@string: a #GString.
@val: the string to append onto the end of the #GString.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_append_c ##### -->
<para>
Adds a character onto the end of a #GString, expanding it if necessary.
</para>
@string: a #GString.
@c: the character to append onto the end of the #GString.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_prepend ##### -->
<para>
Adds a string on to the start of a #GString, expanding it if necessary.
</para>
@string: a #GString.
@val: the string to prepend on the start of the #GString.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_prepend_c ##### -->
<para>
Adds a character onto the start of a #GString, expanding it if necessary.
</para>
@string: a #GString.
@c: the character to prepend on the start of the #GString.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_insert ##### -->
<para>
Inserts a copy of a string into a #GString, expanding it if necessary.
</para>
@string: a #GString.
@pos: the position to insert the copy of the string.
@val: the string to insert.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_insert_c ##### -->
<para>
Inserts a character into a #GString, expanding it if necessary.
</para>
@string: a #GString.
@pos: the position to insert the character.
@c: the character to insert.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_erase ##### -->
<para>
Removes @len characters from a #GString, starting at position @pos.
The rest of the #GString is shifted down to fill the gap.
</para>
@string: a #GString.
@pos: the position of the characters to remove.
@len: the number of characters to remove.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_truncate ##### -->
<para>
Cuts off the end of the GString, leaving the first @len characters.
</para>
@string: a #GString.
@len: the new size of the #GString.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_free ##### -->
<para>
Frees the memory allocated for the #GString.
If free_segment is TRUE it also frees the character data.
</para>
@string: a #GString.
@free_segment: if TRUE the actual character data is freed as well.
<!-- ##### FUNCTION g_string_up ##### -->
<para>
Converts a #GString to upper case.
</para>
@string: a #GString.
@Returns: the #GString.
<!-- ##### FUNCTION g_string_down ##### -->
<para>
Converts a #GString to lower case.
</para>
@string: a #GString.
@Returns: the #GString.

View File

@ -0,0 +1,939 @@
<!-- ##### SECTION Title ##### -->
Threads
<!-- ##### SECTION Short_Description ##### -->
thread abstraction; including mutexes, conditions and thread private data.
<!-- ##### SECTION Long_Description ##### -->
<para>
Threads act almost like processes, but unlike processes all threads of
one process share the same memory. This is good, as it provides easy
communication between the involved threads via this shared memory, and
it is bad, because strange things (so called Heisenbugs) might happen,
when the program is not carefully designed. Especially bad is, that due
to the concurrent nature of threads no assumptions on the order of
execution of different threads can be done unless explictly forced by
the programmer through synchronization primitives.
</para>
<para>
The aim of the thread related functions in GLib is to provide a
portable means for writing multithread safe software. There are
primitives for mutexes to protect the access to portions of memory
(#GMutex, #GStaticMutex, #G_LOCK_DEFINE and friends), there are
primitives for condition variables to allow synchronization of threads
(#GCond) and finally there are primitives for thread-private data,
that every thread has a private instance of (#GPrivate,
#GStaticPrivate).
</para>
<para>
Currently there is only as much thread support included in GLib as is
necessary to make GLib itself multithread safe. Future versions of
GLib might contain functions to actually create threads and the
like. For now the most portable way to create threads is to require
the macro #G_THREADS_IMPL_POSIX to be defined and use POSIX threads
then. This will work on almost all platforms (except most notably
Solaris).
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO G_THREADS_ENABLED ##### -->
<para>
This macro is defined, if GLib was compiled with thread support. This
does not necessarily mean, that there is a thread implementation
available, but the infrastructure is in place and once you provide a
thread implementation to g_thread_init(), GLib will be multithread
safe. It isn't and can't be, if #G_THREADS_ENABLED is not defined.
</para>
<!-- ##### MACRO G_THREADS_IMPL_POSIX ##### -->
<para>
This macro is defined, if POSIX style threads are used.
</para>
<!-- ##### MACRO G_THREADS_IMPL_SOLARIS ##### -->
<para>
This macro is defined, if the SOLARIS thread system is used.
</para>
<!-- ##### MACRO G_THREADS_IMPL_NSPR ##### -->
<para>
This macro is defined, if the NSPR thread implementation is used.
NSPR is the cross platform library of mozilla.
</para>
<!-- ##### MACRO G_THREADS_IMPL_NONE ##### -->
<para>
This macro is defined, if no thread implementation is used. You can
however provide one to g_thread_init() to make GLib multithread safe.
</para>
<!-- ##### STRUCT GThreadFunctions ##### -->
<para>
This function table is used by g_thread_init() to initialize the
thread system. The functions in that table are directly used by their
g_* prepended counterparts, that are described here, e.g. if you call
g_mutex_new() then mutex_new() from the table provided to
g_thread_init() will be called.
</para>
<note>
<para>
This struct should only be used, if you know, what you are doing.
</para>
</note>
@mutex_new:
@mutex_lock:
@mutex_trylock:
@mutex_unlock:
@mutex_free:
@cond_new:
@cond_signal:
@cond_broadcast:
@cond_wait:
@cond_timed_wait:
@cond_free:
@private_new:
@private_get:
@private_set:
<!-- ##### FUNCTION g_thread_init ##### -->
<para>
Before you use a thread related function in GLib, you should
initialize the thread system. This is done by calling
g_thread_init(). Most of the time you will only have to call
g_thread_init(NULL).
</para>
<note>
<para>
You should only call g_thread_init() with a non-NULL parameter, if you
really know, what you are doing.
</para>
</note>
<note>
<para>
g_thread_init() must not be called directly or indirectly as a
callback from GLib.
</para>
</note>
<para>
g_thread_init() might only be called once. On the second call
it will abort with an error. If you want to make sure, that the thread
system is initialized, you can do that too:
</para>
<para>
<informalexample>
<programlisting>
if (!g_thread_supported ()) g_thread_init (NULL);
</programlisting>
</informalexample>
</para>
<para>
After that line either the thread system is initialized or the program
will abort, if no thread system is available in GLib, i.e. either
#G_THREADS_ENABLED is not defined or #G_THREADS_IMPL_NONE is defined.
</para>
<para>
If no thread system is available and @vtable is NULL or if not all
elements of @vtable are non-NULL, then g_thread_init() will abort.
</para>
<note>
<para>
To use g_thread_init() in your program, you have to link with the
libraries, that the command "glib-config --libs gthread" outputs. This
is not the case for all the other thread related functions of
GLib. Those can be used without having to link with the thread
libraries.
</para>
</note>
@vtable: a function table of type #GThreadFunctions, that provides the
entry points to the thread system to be used.
<!-- ##### MACRO g_thread_supported ##### -->
<para>
This function returns, whether the thread system is initialized or
not.
</para>
<note>
<para>
This function is actually a macro. Apart from taking the address of it
you can however use it as if it was a function.
</para>
</note>
@Returns: TRUE, if the thread system is initialized.
<!-- ##### STRUCT GMutex ##### -->
<para>
The #GMutex struct is an opaque data structure to represent a mutex
(mutual exclusion). It can be used to protect data against shared
access. Take for example the following function:
<para>
<example>
<title>A function which will not work in a threaded environment</title>
<programlisting>
int give_me_next_number ()
{
static int current_number = 0;
/* now do a very complicated calculation to calculate the new number,
this might for example be a random number generator */
current_number = calc_next_number (current_number);
return current_number;
}
</programlisting>
</example>
</para>
<para>
It is easy to see, that this won't work in a multithreaded
application. There current_number must be protected against shared
access. A first naive implementation would be:
</para>
<para>
<example>
<title>The wrong way to write a thread-safe function</title>
<programlisting>
int give_me_next_number ()
{
static int current_number = 0;
int ret_val;
static GMutex * mutex = NULL;
if (!mutex)
mutex = g_mutex_new ();
g_mutex_lock (mutex);
ret_val = current_number = calc_next_number (current_number);
g_mutex_unlock (mutex);
return ret_val;
}
</programlisting>
</example>
</para>
<para>
This looks like it would work, but there is a race condition while
constructing the mutex and this code can't work reliable. So please do
not use such constructs in your own programs. One working solution is:
</para>
<para>
<example>
<title>A correct thread-safe function</title>
<programlisting>
static GMutex *give_me_next_number_mutex = NULL;
/* this function must be called before any call to give_me_next_number ()
it must be called exactly once. */
void init_give_me_next_number ()
{
g_assert (give_me_next_number_mutex == NULL);
give_me_next_number_mutex = g_mutex_new ();
}
int give_me_next_number ()
{
static int current_number = 0;
int ret_val;
g_mutex_lock (give_me_next_number_mutex);
ret_val = current_number = calc_next_number (current_number);
g_mutex_unlock (give_me_next_number_mutex);
return ret_val;
}
</programlisting>
</example>
</para>
<para>
#GStaticMutex provides a simpler and safer way of doing this.
</para>
<para>
A #GMutex should only be accessed via the following functions.
</para>
<note>
<para>
All of the g_mutex_* functions are actually macros. Apart from taking
the addresses of them, you can however use them as if they were functions.
</para>
</note>
<!-- ##### MACRO g_mutex_new ##### -->
<para>
Creates a new #GMutex.
</para>
<note>
<para>
This function will abort, if g_thread_init() has not been called yet.
</para>
</note>
@Returns: a new #GMutex.
<!-- ##### MACRO g_mutex_lock ##### -->
<para>
Locks the #GMutex. If the #GMutex is already locked by another thread,
the current thread will block until the #GMutex is unlocked by the
other thread.
</para>
<para>
This function can also be used, if g_thread_init() has not yet been
called and will do nothing then.
</para>
<note>
<para>
#GMutex is not guaranteed to be recursive, i.e. a thread might block,
if it already has locked the #GMutex. It will deadlock then, of
course.
</para>
</note>
@mutex: a #GMutex.
<!-- ##### MACRO g_mutex_trylock ##### -->
<para>
Tries to lock the #GMutex. If the #GMutex is already locked by another
thread, it immediately returns FALSE. Otherwise it locks the #GMutex
and returns TRUE.
</para>
<para>
This function can also be used, if g_thread_init() has not yet been
called and will immediately return TRUE then.
</para>
@mutex: a #GMutex.
@Returns: TRUE, if the #GMutex could be locked.
<!-- ##### MACRO g_mutex_unlock ##### -->
<para>
Unlocks the #GMutex. If another thread is blocked in a g_mutex_lock()
call, it will be woken and can lock the #GMutex itself. This function
can also be used, if g_thread_init() has not yet been called and will
do nothing then.
</para>
@mutex: a #GMutex.
<!-- ##### MACRO g_mutex_free ##### -->
<para>
Destroys the #GMutex.
</para>
@mutex: a #GMutex.
<!-- ##### STRUCT GStaticMutex ##### -->
<para>
A #GStaticMutex works like a #GMutex, but it has one significant
advantage. It doesn't need to be created at run-time like a #GMutex,
but can be defined at compile-time. Here is a shorter, easier and
safer version of our give_me_next_number() example:
</para>
<para>
<example>
<title>Using GStaticMutex to simplify thread-safe programming</title>
<programlisting>
int give_me_next_number ()
{
static int current_number = 0;
int ret_val;
static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
g_static_mutex_lock (&amp;mutex);
ret_val = current_number = calc_next_number (current_number);
g_static_mutex_unlock (&amp;mutex);
return ret_val;
}
</programlisting>
</example>
</para>
<para>
Even though #GStaticMutex is not opaque, it should only be used with
the following functions, as it is defined differently on different
platforms.
</para>
<para>All of the g_static_mutex_* functions can also be used, if
g_thread_init() has not yet.
</para>
<note>
<para>
All of the g_static_mutex_* functions are actually macros. Apart from
taking the addresses of them, you can however use them as if they were
functions.
</para>
</note>
@runtime_mutex:
<!-- ##### MACRO G_STATIC_MUTEX_INIT ##### -->
<para>
Every #GStaticMutex must be initialized with this macro, before it can
be used.
</para>
<para>
<example>
<title>Initializing a GStaticMutext</title>
<programlisting>
GStaticMutex my_mutex = G_STATIC_MUTEX_INIT;
</programlisting>
</example>
</para>
<!-- ##### MACRO g_static_mutex_lock ##### -->
<para>
works like g_mutex_lock(), but for a #GStaticMutex.
</para>
@mutex: a #GStaticMutex.
<!-- ##### MACRO g_static_mutex_trylock ##### -->
<para>
works like g_mutex_trylock(), but for a #GStaticMutex.
</para>
@mutex: a #GStaticMutex.
@Returns: TRUE, if the #GStaticMutex could be locked.
<!-- ##### MACRO g_static_mutex_unlock ##### -->
<para>
works like g_mutex_unlock(), but for a #GStaticMutex.
</para>
@mutex: a #GStaticMutex.
<!-- ##### MACRO g_static_mutex_get_mutex ##### -->
<para>
For some operations (like g_cond_wait()) you must have a #GMutex
instead of a #GStaticMutex. This function will return the
corresponding #GMutex for every #GStaticMutex.
</para>
@mutex: a #GStaticMutex.
@Returns: the corresponding #GMutex.
<!-- ##### MACRO G_LOCK_DEFINE ##### -->
<para>
The G_LOCK_* macros provide a convenient interface to #GStaticMutex
with the advantage that they will expand to nothing in programs
compiled against a thread-disabled GLib, saving code and memory
there. #G_LOCK_DEFINE defines a lock. It can occur, where variable
definitions may occur in programs, i.e. in the first block of a
function or outside of functions. The @name parameter will be mangled
to get the name of the #GStaticMutex. This means, that you can use
names of existing variables as the parameter, e.g. the name of the
variable you intent to protect with the lock. Look at our
give_me_next_number() example using the G_LOCK_* macros:
</para>
<para>
<example>
<title>Using the G_LOCK_* convenience macros</title>
<programlisting>
int give_me_next_number ()
{
static int current_number = 0;
int ret_val;
G_LOCK_DEFINE_STATIC (current_number);
G_LOCK (current_number);
ret_val = current_number = calc_next_number (current_number);
G_UNLOCK (current_number);
return ret_val;
}
</programlisting>
</example>
</para>
@name: the name of the lock.
<!-- ##### MACRO G_LOCK_DEFINE_STATIC ##### -->
<para>
This works like #G_LOCK_DEFINE, but it creates a static object.
</para>
@name: the name of the lock.
<!-- ##### MACRO G_LOCK_EXTERN ##### -->
<para>
This declares a lock, that is defined with #G_LOCK_DEFINE in another module.
</para>
@name: the name of the lock.
<!-- ##### MACRO G_LOCK ##### -->
<para>
works like g_mutex_lock(), but for a lock defined with #G_LOCK_DEFINE.
</para>
@name: the name of the lock.
<!-- ##### MACRO G_TRYLOCK ##### -->
<para>
works like g_mutex_trylock(), but for a lock defined with #G_LOCK_DEFINE.
</para>
@name: the name of the lock.
@Returns: TRUE, if the lock could be locked.
<!-- ##### MACRO G_UNLOCK ##### -->
<para>
works like g_mutex_unlock(), but for a lock defined with #G_LOCK_DEFINE.
</para>
@name: the name of the lock.
<!-- ##### STRUCT GCond ##### -->
<para>
The #GCond struct is an opaque data structure to represent a
condition. A #GCond is an object, that threads can block on, if they
find a certain condition to be false. If other threads change the
state of this condition they can signal the #GCond, such that the
waiting thread is woken up.
</para>
<para>
<example>
<title>Using GCond to block a thread until a condition is satisfied</title>
<programlisting>
GCond* data_cond = NULL; /* Must be initialized somewhere */
GMutex* data_mutex = NULL; /* Must be initialized somewhere */
gpointer current_data = NULL;
void push_data (gpointer data)
{
g_mutex_lock (data_mutex);
current_data = data;
g_cond_signal (data_cond);
g_mutex_unlock (data_mutex);
}
gpointer pop_data ()
{
gpointer data;
g_mutex_lock (data_mutex);
while (!current_data)
g_cond_wait (data_cond, data_mutex);
data = current_data;
current_data = NULL;
g_mutex_unlock (data_mutex);
return data;
}
</programlisting>
</example>
</para>
<para>
Whenever a thread calls pop_data() now, it will wait until
current_data is non-NULL, i.e. until some other thread has called
push_data().
</para>
<note>
<para>
It is important to use the g_cond_wait() and g_cond_timed_wait()
functions only inside a loop, which checks for the condition to be
true as it is not guaranteed that the waiting thread will find it
fulfilled, even if the signaling thread left the condition
in that state. This is because another thread can have altered the
condition, before the waiting thread got the chance to be woken up,
even if the condition itself is protected by a #GMutex, like above.
</para>
</note>
<para>
A #GCond should only be accessed via the following functions.
</para>
<note>
<para>
All of the g_cond_* functions are actually macros. Apart from taking
the addresses of them, you can however use them as if they were functions.
</para>
</note>
<!-- ##### MACRO g_cond_new ##### -->
<para>
Creates a new #GCond. This function will abort, if g_thread_init()
has not been called yet.
</para>
@Returns: a new #GCond.
<!-- ##### MACRO g_cond_signal ##### -->
<para>
If threads are waiting for @cond, exactly one of them is woken up. It
is good practice to hold the same lock as the waiting thread, while
calling this function, though not required.
</para>
<para>
This function can also be used, if g_thread_init() has
not yet been called and will do nothing then.
</para>
@cond: a #GCond.
<!-- ##### MACRO g_cond_broadcast ##### -->
<para>
If threads are waiting for @cond, all of them are woken up. It is good
practice to lock the same mutex as the waiting threads, while calling
this function, though not required.
</para>
<para>
This function can also be used, if g_thread_init() has
not yet been called and will do nothing then.
</para>
@cond: a #GCond.
<!-- ##### MACRO g_cond_wait ##### -->
<para>
Waits until this thread is woken up on the #GCond. The #GMutex is
unlocked before falling asleep and locked again before resuming.
</para>
<para>
This function can also be used, if g_thread_init() has not yet been
called and will immediately return then.
</para>
@cond: a #GCond.
@mutex: the #GMutex, that is currently locked.
<!-- ##### MACRO g_cond_timed_wait ##### -->
<para>
Waits until this thread is woken up on the #GCond, but not longer than
until the time, that is specified by @abs_time. The #GMutex is
unlocked before falling asleep and locked again before resuming.
</para>
<para>
If @abs_time is NULL, g_cond_timed_wait() acts like g_cond_wait().
</para>
<para>
This function can also be used, if g_thread_init() has not yet been
called and will immediately return TRUE then.
</para>
@cond: a #GCond.
@mutex: the #GMutex, that is currently locked.
@abs_time: a #GTimeVal, determining the final time.
@Returns: TRUE, if the thread is woken up in time.
<!-- ##### MACRO g_cond_free ##### -->
<para>
Destroys the #GCond.
</para>
@cond: a #GCond.
<!-- ##### STRUCT GPrivate ##### -->
<para>
The #GPrivate struct is an opaque data structure to represent a thread
private data key. Threads can thereby obtain and set a pointer, which
is private to the current thread. Take our give_me_next_number()
example from above. Now we don't want current_number to be shared
between the threads, but to be private to each thread. This can be
done as follows:
<para>
<example>
<title>Using GPrivate for per-thread data</title>
<programlisting>
GPrivate* current_number_key = NULL; /* Must be initialized somewhere */
/* with g_private_new (g_free); */
int give_me_next_number ()
{
int *current_number = g_private_get (current_number_key);
if (!current_number)
{
current_number = g_new (int,1);
*current_number = 0;
g_private_set (current_number_key, current_number);
}
*current_number = calc_next_number (*current_number);
return *current_number;
}
</programlisting>
</example>
</para>
<para>
Here the pointer belonging to the key current_number_key is read. If
it is NULL, it has not been set yet. Then get memory for an integer
value, assign this memory to the pointer and write the pointer
back. Now we have an integer value, that is private to the current
thread.
</para>
<para>
The #GPrivate struct should only be accessed via the following functions.
</para>
<note>
<para>
All of the g_private_* functions are actually macros. Apart from taking
the addresses of them, you can however use them as if they were functions.
</para>
</note>
<!-- ##### MACRO g_private_new ##### -->
<para>
Creates a new #GPrivate. If @destructor is non-NULL, it is a pointer
to a destructor function. Whenever a thread ends and the corresponding
pointer keyed to this instance of #GPrivate is non-NULL, the
destructor is called with this pointer as the argument.
</para>
<note>
<para>
The @destructor is working quite differently from @notify in
g_static_private_set().
</para>
</note>
<note>
<para>
A #GPrivate can not be destroyed. Reuse it instead, if you can to
avoid shortage.
</para>
</note>
<note>
<para>
This function will abort, if g_thread_init() has not been called yet.
</para>
</note>
@destructor: a function to handle the data keyed to #GPrivate, when a
thread ends.
<!-- ##### MACRO g_private_get ##### -->
<para>
Returns the pointer keyed to @private_key for the current thread. This
pointer is NULL, when g_private_set() hasn't been called for the
current @private_key and thread yet.
</para>
<para>
This function can also be used, if g_thread_init() has not yet been
called and will return the value of @private_key casted to #gpointer then.
</para>
@private_key: a #GPrivate.
@Returns: the corresponding pointer.
<!-- ##### MACRO g_private_set ##### -->
<para>
Sets the pointer keyed to @private_key for the current thread.
</para>
<para>
This function can also be used, if g_thread_init() has not yet been
called and will set @private_key to @data casted to #GPrivate* then.
</para>
@private_key: a #GPrivate.
@value:
<!-- # Unused Parameters # -->
@data: the new pointer.
<!-- ##### STRUCT GStaticPrivate ##### -->
<para>
A #GStaticPrivate works almost like a #GPrivate, but it has one
significant advantage. It doesn't need to be created at run-time like
a #GPrivate, but can be defined at compile-time. This is similar to
the difference between #GMutex and #GStaticMutex. Now look at our
give_me_next_number() example with #GStaticPrivate:
</para>
<para>
<example>
<title>Using GStaticPrivate for per-thread data</title>
<programlisting>
int give_me_next_number ()
{
static GStaticPrivate current_number_key = G_STATIC_PRIVATE_INIT;
int *current_number = g_static_private_get (&amp;current_number_key);
if (!current_number)
{
current_number = g_new (int,1);
*current_number = 0;
g_static_private_set (&amp;current_number_key, current_number, g_free);
}
*current_number = calc_next_number (*current_number);
return *current_number;
}
</programlisting>
</example>
</para>
@index:
<!-- ##### MACRO G_STATIC_PRIVATE_INIT ##### -->
<para>
Every #GStaticPrivate must be initialized with this macro, before it can
be used.
</para>
<para>
<informalexample>
<programlisting>
GStaticPrivate my_private = G_STATIC_PRIVATE_INIT;
</programlisting>
</informalexample>
</para>
<!-- ##### FUNCTION g_static_private_get ##### -->
<para>
Works like g_private_get() only for a #GStaticPrivate.
</para>
<para>
This function also works, if g_thread_init() has not yet been called.
</para>
@private_key: a #GStaticPrivate.
@Returns: the corresponding pointer.
<!-- ##### FUNCTION g_static_private_set ##### -->
<para>
Sets the pointer keyed to @private_key for the current thread and the
function @notify to be called with that pointer (NULL or non-NULL),
whenever the pointer is set again or whenever the current thread ends.
</para>
<para>
This function also works, if g_thread_init() has not yet been
called. If g_thread_init() is called later, the @data keyed to
@private_key will be inherited only by the main thread, i.e. the one that
called g_thread_init().
</para>
<note>
<para>
The @notify is working quite differently from @destructor in
g_private_new().
</para>
</note>
@private_key: a #GStaticPrivate.
@data: the new pointer.
@notify: a function to be called with the pointer, whenever the
current thread ends or sets this pointer again.

View File

@ -0,0 +1,75 @@
<!-- ##### SECTION Title ##### -->
Timers
<!-- ##### SECTION Short_Description ##### -->
functions to time operations.
<!-- ##### SECTION Long_Description ##### -->
<para>
Timers can be used to time operations, in a similar way to a stopwatch.
Call g_timer_new () to create the timer, g_timer_start () to start it,
g_timer_elapsed () to determine the time which has elapsed since the timer
was started, and g_timer_stop () to stop the timer.
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GTimer ##### -->
<para>
An opaque data structure which holds the timer information.
</para>
<!-- ##### FUNCTION g_timer_new ##### -->
<para>
Creates a new timer.
</para>
@Returns: the new timer.
<!-- ##### FUNCTION g_timer_start ##### -->
<para>
Starts the timer.
</para>
@timer: the timer.
<!-- ##### FUNCTION g_timer_stop ##### -->
<para>
Stops the timer.
</para>
@timer: the timer.
<!-- ##### FUNCTION g_timer_elapsed ##### -->
<para>
</para>
@timer: the timer.
@microseconds: if non-NULL, this will be set to the microseconds component
of the elapsed time (it does not include the number of seconds elapsed).
@Returns: the elapsed time in seconds, as a double.
<!-- ##### FUNCTION g_timer_reset ##### -->
<para>
Resets the elapsed time to 0, leaving the timer running.
</para>
@timer: the timer.
<!-- ##### FUNCTION g_timer_destroy ##### -->
<para>
Destroys the timer, freeing the memory allocated for it.
</para>
@timer: the timer.

View File

@ -0,0 +1,228 @@
<!-- ##### SECTION Title ##### -->
Balanced Binary Trees
<!-- ##### SECTION Short_Description ##### -->
a sorted collection of key/value pairs optimised for searching
and traversing in order.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GTree structure and its associated functions provide a sorted collection
of key/value pairs optimised for searching and traversing in order.
</para>
<para>
To create a new #GTree use g_tree_new().
</para>
<para>
To insert a key/value pair into a #GTree use g_tree_insert().
</para>
<para>
To lookup the value corresponding to a given key, use g_tree_lookup().
</para>
<para>
To find out the number of nodes in a #GTree, use g_tree_nnodes().
To get the height of a #GTree, use g_tree_height().
</para>
<para>
To traverse a #GTree, calling a function for each node visited in the
traversal, use g_tree_traverse().
</para>
<para>
To remove a key/value pair use g_tree_remove().
</para>
<para>
To destroy a #GTree, use g_tree_destroy().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GTree ##### -->
<para>
The #GTree struct is an opaque data structure representing a
<link linkend="glib-Balanced-Binary-Trees">Balanced Binary Tree</link>.
It should be accessed only by using the following functions.
</para>
<!-- ##### FUNCTION g_tree_new ##### -->
<para>
Creates a new GTree.
</para>
@key_compare_func: the function used to order the nodes in the #GTree.
It should return values similar to the standard <function>strcmp()</function>
function -
0 if the two arguments are equal, a negative value if the first argument comes
before the second, or a positive value if the first argument comes after the
second.
@Returns: a new #GTree.
<!-- ##### FUNCTION g_tree_insert ##### -->
<para>
Inserts a key/value pair into a #GTree.
If the given key already exists in the #GTree it is set to the new value.
(If you are using dynamically allocated keys and values you should be careful
to ensure that the old values are freed.)
</para>
<para>
The tree is automatically 'balanced' as new key/value pairs are added,
so that the distance from the root to every leaf is as small as possible.
</para>
@tree: a #GTree.
@key: the key to insert.
@value: the value corresponding to the key.
<!-- ##### FUNCTION g_tree_nnodes ##### -->
<para>
Gets the number of nodes in a #GTree.
</para>
@tree: a #GTree.
@Returns: the number of nodes in the #GTree.
<!-- ##### FUNCTION g_tree_height ##### -->
<para>
Gets the height of a #GTree.
</para>
<para>
If the #GTree contains no nodes, the height is 0.
If the #GTree contains only one root node the height is 1.
If the root node has children the height is 2, etc.
</para>
@tree: a #GTree.
@Returns: the height of the #GTree.
<!-- ##### FUNCTION g_tree_lookup ##### -->
<para>
Gets the value corresponding to the given key.
Since a #GTree is automatically balanced as key/value pairs are
added, key lookup is very fast.
</para>
@tree: a #GTree.
@key: the key to look up.
@Returns: the value corresponding to the key.
<!-- ##### FUNCTION g_tree_search ##### -->
<para>
Searches a #GTree using an alternative form of the comparison function.
</para>
<para>
This function is not as useful as it sounds.
It allows you to use a different function for performing the lookup of
a key. However, since the tree is ordered according to the @key_compare_func
function passed to g_tree_new(), the function you pass to g_tree_search() must
return exactly the same value as would be returned by the comparison function,
for each pair of tree nodes, or the search will not work.
</para>
<para>
To search for a specific value, you can use g_tree_traverse().
</para>
@tree: a #GTree.
@search_func: the comparison function used to search the #GTree.
@data: the data passed as the second argument to the @search_func function.
@Returns: the value corresponding to the found key, or NULL if the key is
not found.
<!-- ##### USER_FUNCTION GSearchFunc ##### -->
<para>
Specifies the type of function passed to g_tree_search().
</para>
@key: a key from a #GTree.
@data: the data to compare with the key.
@Returns: 0 if the desired key has been found, a negative number if the
desired key comes before @key in the sort order of the #GTree, or a positive
value if the desired key comes after @key.
<!-- ##### FUNCTION g_tree_traverse ##### -->
<para>
Calls the given function for each node in the GTree.
</para>
@tree: a #GTree.
@traverse_func: the function to call for each node visited. If this function
returns TRUE, the traversal is stopped.
@traverse_type: the order in which nodes are visited, one of %G_IN_ORDER,
%G_PRE_ORDER and %G_POST_ORDER.
@data: user data to pass to the traverse function.
<!-- ##### USER_FUNCTION GTraverseFunc ##### -->
<para>
Specifies the type of function passed to g_tree_traverse().
It is passed the key and value of each node, together with
the @user_data parameter passed to g_tree_traverse().
If the function returns TRUE, the traversal is stopped.
</para>
@key: a key of a #GTree node.
@value: the value corresponding to the key.
@data: user data passed to g_tree_traverse().
@Returns: TRUE to stop the traversal.
<!-- ##### ENUM GTraverseType ##### -->
<para>
Specifies the type of traveral performed by g_tree_traverse(),
g_node_traverse() and g_node_find().
<itemizedlist>
<listitem><para>
%G_PRE_ORDER visits a node, then its children.
</para></listitem>
<listitem><para>
%G_IN_ORDER vists a node's left child first, then the node itself, then its
right child. This is the one to use if you want the output sorted according
to the compare function.
</para></listitem>
<listitem><para>
%G_POST_ORDER visits the node's children, then the node itself.
</para></listitem>
<listitem><para>
%G_LEVEL_ORDER is not implemented for
<link linkend="glib-Balanced-Binary-Trees">Balanced Binary Trees</link>.
For <link linkend="glib-N-ary-Trees">N-ary Trees</link>
it calls the function for each child of the node, then it recursively visits
each child.
</para></listitem>
</itemizedlist>
</para>
@G_IN_ORDER:
@G_PRE_ORDER:
@G_POST_ORDER:
@G_LEVEL_ORDER:
<!-- ##### FUNCTION g_tree_remove ##### -->
<para>
Removes a key/value pair from a #GTree.
If the key or value is dynamically allocated you must remember to free them
yourself.
</para>
@tree: a #GTree.
@key: the key to remove.
<!-- ##### FUNCTION g_tree_destroy ##### -->
<para>
Destroys the #GTree, freeing all of the memory allocated.
But it doesn't free keys or values.
</para>
@tree: a #GTree.

View File

@ -0,0 +1,493 @@
<!-- ##### SECTION Title ##### -->
N-ary Trees
<!-- ##### SECTION Short_Description ##### -->
trees of data with any number of branches.
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GNode struct and its associated functions provide a N-ary tree data
structure, where nodes in the tree can contain arbitrary data.
</para>
<para>
To create a new tree use g_node_new().
</para>
<para>
To insert a node into a tree use g_node_insert(), g_node_insert_before(),
g_node_append() and g_node_prepend().
</para>
<para>
To create a new node and insert it into a tree use g_node_insert_data(),
g_node_insert_data_before(), g_node_append_data() and g_node_prepend_data().
</para>
<para>
To reverse the children of a node use g_node_reverse_children().
</para>
<para>
To find a node use g_node_get_root(), g_node_find(), g_node_find_child(),
g_node_child_index(), g_node_child_position(),
g_node_first_child(), g_node_last_child(),
g_node_nth_child(), g_node_first_sibling(), g_node_prev_sibling(),
g_node_next_sibling() or g_node_last_sibling().
</para>
<para>
To get information about a node or tree use G_NODE_IS_LEAF(),
G_NODE_IS_ROOT(), g_node_depth(), g_node_n_nodes(), g_node_n_children(),
g_node_is_ancestor() or g_node_max_height().
</para>
<para>
To traverse a tree, calling a function for each node visited in the
traversal, use g_node_traverse() or g_node_children_foreach().
</para>
<para>
To remove a node or subtree from a tree use g_node_unlink() or
g_node_destroy().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT GNode ##### -->
<para>
The #GNode struct represents one node in a
<link linkend="glib-N-ary-Trees">N-ary Tree</link>.
The <structfield>data</structfield> field contains the actual data of the node.
The <structfield>next</structfield> and <structfield>prev</structfield>
fields point to the node's siblings (a sibling is another #GNode with the
same parent).
The <structfield>parent</structfield> field points to the parent of the #GNode,
or is NULL if the #GNode is the root of the tree.
The <structfield>children</structfield> field points to the first child of the
#GNode. The other children are accessed by using the
<structfield>next</structfield> pointer of each child.
</para>
@data:
@next:
@prev:
@parent:
@children:
<!-- ##### FUNCTION g_node_new ##### -->
<para>
Creates a new #GNode containing the given data.
Used to create the first node in a tree.
</para>
@data: the data of the new node.
@Returns: a new #GNode.
<!-- ##### FUNCTION g_node_insert ##### -->
<para>
Inserts a #GNode beneath the parent at the given position.
</para>
@parent: the #GNode to place @node under.
@position: the position to place @node at, with respect to its siblings.
If position is -1, @node is inserted as the last child of @parent.
@node: the #GNode to insert.
@Returns: the inserted #GNode.
<!-- ##### FUNCTION g_node_insert_before ##### -->
<para>
Inserts a #GNode beneath the parent before the given sibling.
</para>
@parent: the #GNode to place @node under.
@sibling: the sibling #GNode to place @node before. If sibling is NULL,
the node is inserted as the last child of @parent.
@node: the #GNode to insert.
@Returns: the inserted #GNode.
<!-- ##### MACRO g_node_append ##### -->
<para>
Inserts a #GNode as the last child of the given parent.
</para>
@parent: the #GNode to place the new #GNode under.
@node: the #GNode to insert.
@Returns: the inserted #GNode.
<!-- ##### FUNCTION g_node_prepend ##### -->
<para>
Inserts a #GNode as the first child of the given parent.
</para>
@parent: the #GNode to place the new #GNode under.
@node: the #GNode to insert.
@Returns: the inserted #GNode.
<!-- ##### MACRO g_node_insert_data ##### -->
<para>
Inserts a new #GNode at the given position.
</para>
@parent: the #GNode to place the new #GNode under.
@position: the position to place the new #GNode at.
If position is -1, the new #GNode is inserted as the last child of @parent.
@data: the data for the new #GNode.
@Returns: the new #GNode.
<!-- ##### MACRO g_node_insert_data_before ##### -->
<para>
Inserts a new #GNode before the given sibling.
</para>
@parent: the #GNode to place the new #GNode under.
@sibling: the sibling #GNode to place the new #GNode before.
@data: the data for the new #GNode.
@Returns: the new #GNode.
<!-- ##### MACRO g_node_append_data ##### -->
<para>
Inserts a new #GNode as the last child of the given parent.
</para>
@parent: the #GNode to place the new #GNode under.
@data: the data for the new #GNode.
@Returns: the new #GNode.
<!-- ##### MACRO g_node_prepend_data ##### -->
<para>
Inserts a new #GNode as the first child of the given parent.
</para>
@parent: the #GNode to place the new #GNode under.
@data: the data for the new #GNode.
@Returns: the new #GNode.
<!-- ##### FUNCTION g_node_reverse_children ##### -->
<para>
Reverses the order of the children of a #GNode.
(It doesn't change the order of the grandchildren.)
</para>
@node: a #GNode.
<!-- ##### FUNCTION g_node_traverse ##### -->
<para>
Traverses a tree starting at the given root #GNode.
It calls the given function for each node visited.
The traversal can be halted at any point by returning TRUE from @func.
</para>
@root: the root #GNode of the tree to traverse.
@order: the order in which nodes are visited - %G_IN_ORDER, %G_PRE_ORDER,
%G_POST_ORDER, or %G_LEVEL_ORDER.
@flags: which types of children are to be visited, one of %G_TRAVERSE_ALL,
%G_TRAVERSE_LEAFS and %G_TRAVERSE_NON_LEAFS.
@max_depth: the maximum depth of the traversal. Nodes below this
depth will not be visited. If max_depth is -1 all nodes in the tree are
visited. If depth is 1, only the root is visited. If depth is 2, the root
and its children are visited. And so on.
@func: the function to call for each visited #GNode.
@data: user data to pass to the function.
<!-- ##### ENUM GTraverseFlags ##### -->
<para>
Specifies which nodes are visited during several of the tree functions,
including g_node_traverse() and g_node_find().
<itemizedlist>
<listitem><para>
%G_TRAVERSE_LEAFS specifies that only leaf nodes should be visited.
</para></listitem>
<listitem><para>
%G_TRAVERSE_NON_LEAFS specifies that only non-leaf nodes should be visited.
</para></listitem>
<listitem><para>
%G_TRAVERSE_ALL specifies that all nodes should be visited.
</para></listitem>
</itemizedlist>
</para>
@G_TRAVERSE_LEAFS:
@G_TRAVERSE_NON_LEAFS:
@G_TRAVERSE_ALL:
@G_TRAVERSE_MASK:
<!-- ##### USER_FUNCTION GNodeTraverseFunc ##### -->
<para>
Specifies the type of function passed to g_node_traverse().
The function is called with each of the nodes visited, together with the
user data passed to g_node_traverse().
If the function returns TRUE, then the traversal is stopped.
</para>
@node: a #GNode.
@data: user data passed to g_node_traverse().
@Returns: TRUE to stop the traversal.
<!-- ##### FUNCTION g_node_children_foreach ##### -->
<para>
Calls a function for each of the children of a #GNode.
Note that it doesn't descend beneath the child nodes.
</para>
@node: a #GNode.
@flags: which types of children are to be visited, one of %G_TRAVERSE_ALL,
%G_TRAVERSE_LEAFS and %G_TRAVERSE_NON_LEAFS.
@func: the function to call for each visited node.
@data: user data to pass to the function.
<!-- ##### USER_FUNCTION GNodeForeachFunc ##### -->
<para>
Specifies the type of function passed to g_node_children_foreach().
The function is called with each child node, together with the user data
passed to g_node_children_foreach().
</para>
@node: a #GNode.
@data: user data passed to g_node_children_foreach().
<!-- ##### FUNCTION g_node_get_root ##### -->
<para>
Gets the root of a tree.
</para>
@node: a #GNode.
@Returns: the root of the tree.
<!-- ##### FUNCTION g_node_find ##### -->
<para>
Finds a #GNode in a tree.
</para>
@root: the root #GNode of the tree to search.
@order: the order in which nodes are visited - %G_IN_ORDER, %G_PRE_ORDER,
%G_POST_ORDER, or %G_LEVEL_ORDER.
@flags: which types of children are to be searched, one of %G_TRAVERSE_ALL,
%G_TRAVERSE_LEAFS and %G_TRAVERSE_NON_LEAFS.
@data: the data to find.
@Returns: the found #GNode, or NULL if the data is not found.
<!-- ##### FUNCTION g_node_find_child ##### -->
<para>
Finds the first child of a #GNode with the given data.
</para>
@node: a #GNode.
@flags: which types of children are to be searched, one of %G_TRAVERSE_ALL,
%G_TRAVERSE_LEAFS and %G_TRAVERSE_NON_LEAFS.
@data: the data to find.
@Returns: the found child #GNode, or NULL if the data is not found.
<!-- ##### FUNCTION g_node_child_index ##### -->
<para>
Gets the position of the first child of a #GNode which contains the given data.
</para>
@node: a #GNode.
@data: the data to find.
@Returns: the index of the child of @node which contains @data, or -1
if the data is not found.
<!-- ##### FUNCTION g_node_child_position ##### -->
<para>
Gets the position of a #GNode with respect to its siblings.
@child must be a child of @node.
The first child is numbered 0, the second 1, and so on.
</para>
@node: a #GNode.
@child: a child of @node.
@Returns: the position of @child with respect to its siblings.
<!-- ##### MACRO g_node_first_child ##### -->
<para>
Gets the first child of a #GNode.
</para>
@node: a #GNode.
@Returns: the last child of @node, or NULL if @node is NULL or has no children.
<!-- ##### FUNCTION g_node_last_child ##### -->
<para>
Gets the last child of a #GNode.
</para>
@node: a #GNode (must not be NULL).
@Returns: the last child of @node, or NULL if @node has no children.
<!-- ##### FUNCTION g_node_nth_child ##### -->
<para>
Gets a child of a #GNode, using the given index.
The first child is at index 0. If the index is too big, NULL is returned.
</para>
@node: a #GNode.
@n: the index of the desired child.
@Returns: the child of @node at index @n.
<!-- ##### FUNCTION g_node_first_sibling ##### -->
<para>
Gets the first sibling of a #GNode.
This could possibly be the node itself.
</para>
@node: a #GNode.
@Returns: the first sibling of @node.
<!-- ##### MACRO g_node_next_sibling ##### -->
<para>
Gets the next sibling of a #GNode.
</para>
@node: a #GNode.
@Returns: the next sibling of @node, or NULL if @node is NULL.
<!-- ##### MACRO g_node_prev_sibling ##### -->
<para>
Gets the previous sibling of a #GNode.
</para>
@node: a #GNode.
@Returns: the previous sibling of @node, or NULL if @node is NULL.
<!-- ##### FUNCTION g_node_last_sibling ##### -->
<para>
Gets the last sibling of a #GNode.
This could possibly be the node itself.
</para>
@node: a #GNode.
@Returns: the last sibling of @node.
<!-- ##### MACRO G_NODE_IS_LEAF ##### -->
<para>
Returns TRUE if a #GNode is a leaf node.
</para>
@node: a #GNode.
@Returns: TRUE if the #GNode is a leaf node (i.e. it has no children).
<!-- ##### MACRO G_NODE_IS_ROOT ##### -->
<para>
Returns TRUE if a #GNode is the root of a tree.
</para>
@node: a #GNode.
@Returns: TRUE if the #GNode is the root of a tree (i.e. it has no parent
or siblings).
<!-- ##### FUNCTION g_node_depth ##### -->
<para>
Gets the depth of a #GNode.
</para>
<para>
If @node is NULL the depth is 0.
The root node has a depth of 1.
For the children of the root node the depth is 2. And so on.
</para>
@node: a #GNode.
@Returns: the depth of the #GNode.
<!-- ##### FUNCTION g_node_n_nodes ##### -->
<para>
Gets the number of nodes in a tree.
</para>
@root: a #GNode.
@flags: which types of children are to be counted, one of %G_TRAVERSE_ALL,
%G_TRAVERSE_LEAFS and %G_TRAVERSE_NON_LEAFS.
@Returns: the number of nodes in the tree.
<!-- ##### FUNCTION g_node_n_children ##### -->
<para>
Gets the number of children of a #GNode.
</para>
@node: a #GNode.
@Returns: the number of children of @node.
<!-- ##### FUNCTION g_node_is_ancestor ##### -->
<para>
Returns TRUE if @node is an ancestor of @descendant.
This is true if node is the parent of descendant, or if node is the
grandparent of descendant etc.
</para>
@node: a #GNode.
@descendant: a #GNode.
@Returns: TRUE if @node is an ancestor of @descendant.
<!-- ##### FUNCTION g_node_max_height ##### -->
<para>
Gets the maximum height of all branches beneath a #GNode.
This is the maximum distance from the #GNode to all leaf nodes.
</para>
<para>
If @root is NULL, 0 is returned. If @root has no children, 1 is returned.
If @root has children, 2 is returned. And so on.
</para>
@root: a #GNode.
@Returns: the maximum height of the tree beneath @root.
<!-- ##### FUNCTION g_node_unlink ##### -->
<para>
Unlinks a #GNode from a tree, resulting in two separate trees.
</para>
@node: the #GNode to unlink, which becomes the root of a new tree.
<!-- ##### FUNCTION g_node_destroy ##### -->
<para>
Removes the #GNode and its children from the tree, freeing any memory
allocated.
</para>
@root: the root of the tree/subtree to destroy.
<!-- ##### FUNCTION g_node_pop_allocator ##### -->
<para>
</para>
<!-- ##### FUNCTION g_node_push_allocator ##### -->
<para>
</para>
@allocator:

View File

@ -0,0 +1,78 @@
<!-- ##### SECTION Title ##### -->
Type Conversion Macros
<!-- ##### SECTION Short_Description ##### -->
a portable method for storing #gint &amp; #guint values in #gpointer variables.
<!-- ##### SECTION Long_Description ##### -->
<para>
These macros provide a portable method of storing #gint and #guint values in
#gpointer variables.
</para>
<para>
Many of the GLib data types are based on storing #gpointer values,
e.g. #GHashTable, #GList, #GSList, #GTree, and #GNode.
By using the type conversion macros described below you can store #gint and
#guint values inside a #gpointer. So you can, for example, create
a hash table of #gint values, or a linked list of #guint values.
</para>
<para>
The type conversion macros are necessary because the size of a #gpointer can
vary across different platforms. So the type conversion has to be done
carefully.
</para>
<para>
Note that the reverse operation, storing #gpointer values in
integer variables, is not supported, since an integer is not guaranteed to
be large enough to store #gpointer values across all platforms.
</para>
<para>
To convert an integer value, a #gint, to a #gpointer, use #GINT_TO_POINTER.
To convert it back to a #gint, use #GPOINTER_TO_INT.
</para>
<para>
To convert an unsigned integer, a #guint, to a #gpointer, use
#GUINT_TO_POINTER. To convert it back to a #guint, use #GPOINTER_TO_UINT.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO GINT_TO_POINTER ##### -->
<para>
Converts a #gint to a #gpointer.
</para>
@i: a #gint value.
@Returns: the value converted to a #gpointer.
<!-- ##### MACRO GPOINTER_TO_INT ##### -->
<para>
Converts a #gpointer to a #gint.
</para>
@p: a #gpointer value.
@Returns: the value converted to a #gint.
<!-- ##### MACRO GUINT_TO_POINTER ##### -->
<para>
Converts a #guint to a #gpointer.
</para>
@u: a #guint value.
@Returns: the value converted to a #gpointer.
<!-- ##### MACRO GPOINTER_TO_UINT ##### -->
<para>
Converts a #gpointer to a #guint.
</para>
@p: a #gpointer value.
@Returns: the value converted to a #guint.

View File

@ -0,0 +1,216 @@
<!-- ##### SECTION Title ##### -->
Basic Types
<!-- ##### SECTION Short_Description ##### -->
standard GLib types, defined for ease-of-use and portability.
<!-- ##### SECTION Long_Description ##### -->
<para>
GLib defines a number of commonly used types, which can be divided into
4 groups:
<itemizedlist>
<listitem><para>
New types which are not part of standard C - #gboolean, #gsize, #gssize.
</para></listitem>
<listitem><para>
Integer types which are guaranteed to be the same size across all platforms -
#gint8, #guint8, #gint16, #guint16, #gint32, #guint32, #gint64, #guint64.
</para></listitem>
<listitem><para>
Types which are easier to use than their standard C counterparts -
#gpointer, #gconstpointer, #guchar, #guint, #gushort, #gulong.
</para></listitem>
<listitem><para>
Types which correspond exactly to standard C types, but are included
for completeness - #gchar, #gint, #gshort, #glong, #gfloat, #gdouble.
</para></listitem>
</itemizedlist>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### TYPEDEF gboolean ##### -->
<para>
A standard <type>boolean</type> type.
Variables of this type should only contain the value #TRUE or #FALSE.
</para>
<!-- ##### TYPEDEF gpointer ##### -->
<para>
An untyped pointer.
#gpointer looks better and is easier to use than <type>void*</type>.
</para>
<!-- ##### TYPEDEF gconstpointer ##### -->
<para>
An untyped pointer to constant data.
The data pointed to should not be changed.
</para>
<para>
This is typically used in function prototypes to indicate that the
data pointed to will not be altered by the function.
</para>
<!-- ##### TYPEDEF gchar ##### -->
<para>
Corresponds to the standard C <type>char</type> type.
</para>
<!-- ##### TYPEDEF guchar ##### -->
<para>
Corresponds to the standard C <type>unsigned char</type> type.
</para>
<!-- ##### TYPEDEF gint ##### -->
<para>
Corresponds to the standard C <type>int</type> type.
Values of this type can range from #G_MININT to #G_MAXINT.
</para>
<!-- ##### TYPEDEF guint ##### -->
<para>
Corresponds to the standard C <type>unsigned int</type> type.
</para>
<!-- ##### TYPEDEF gshort ##### -->
<para>
Corresponds to the standard C <type>short</type> type.
Values of this type can range from #G_MINSHORT to #G_MAXSHORT.
</para>
<!-- ##### TYPEDEF gushort ##### -->
<para>
Corresponds to the standard C <type>unsigned short</type> type.
</para>
<!-- ##### TYPEDEF glong ##### -->
<para>
Corresponds to the standard C <type>long</type> type.
Values of this type can range from #G_MINLONG to #G_MAXLONG.
</para>
<!-- ##### TYPEDEF gulong ##### -->
<para>
Corresponds to the standard C <type>unsigned long</type> type.
</para>
<!-- ##### TYPEDEF gint8 ##### -->
<para>
A signed integer guaranteed to be 8 bits on all platforms.
Values of this type can range from -128 to 127.
</para>
<!-- ##### TYPEDEF guint8 ##### -->
<para>
An unsigned integer guaranteed to be 8 bits on all platforms.
Values of this type can range from 0 to 255.
</para>
<!-- ##### TYPEDEF gint16 ##### -->
<para>
A signed integer guaranteed to be 16 bits on all platforms.
Values of this type can range from -32,768 to 32,767.
</para>
<!-- ##### TYPEDEF guint16 ##### -->
<para>
An unsigned integer guaranteed to be 16 bits on all platforms.
Values of this type can range from 0 to 65,535.
</para>
<!-- ##### TYPEDEF gint32 ##### -->
<para>
A signed integer guaranteed to be 32 bits on all platforms.
Values of this type can range from -2,147,483,648 to 2,147,483,647.
</para>
<!-- ##### TYPEDEF guint32 ##### -->
<para>
An unsigned integer guaranteed to be 32 bits on all platforms.
Values of this type can range from 0 to 4,294,967,295.
</para>
<!-- ##### MACRO G_HAVE_GINT64 ##### -->
<para>
This macro is defined if 64-bit signed and unsigned integers are available
on the platform.
</para>
<!-- ##### TYPEDEF gint64 ##### -->
<para>
A signed integer guaranteed to be 64 bits on all platforms on which it is
available (see #G_HAVE_GINT64).
Values of this type can range from -9,223,372,036,854,775,808 to
9,223,372,036,854,775,807.
</para>
<!-- ##### TYPEDEF guint64 ##### -->
<para>
An unsigned integer guaranteed to be 64 bits on all platforms on which it is
available (see #G_HAVE_GINT64).
Values of this type can range from 0 to 18,446,744,073,709,551,615.
</para>
<!-- ##### MACRO G_GINT64_CONSTANT ##### -->
<para>
This macro is used to insert 64-bit integer literals into the source code.
</para>
@val: a literal integer value, e.g. 0x1d636b02300a7aa7U.
<!-- ##### TYPEDEF gfloat ##### -->
<para>
Corresponds to the standard C <type>float</type> type.
Values of this type can range from #G_MINFLOAT to #G_MAXFLOAT.
</para>
<!-- ##### TYPEDEF gdouble ##### -->
<para>
Corresponds to the standard C <type>double</type> type.
Values of this type can range from #G_MINDOUBLE to #G_MAXDOUBLE.
</para>
<!-- ##### TYPEDEF gsize ##### -->
<para>
An unsigned 32-bit integer intended to represent sizes of data structures.
</para>
<!-- ##### TYPEDEF gssize ##### -->
<para>
A signed 32-bit integer intended to represent sizes of data structures.
</para>

View File

@ -0,0 +1,187 @@
<!-- ##### SECTION Title ##### -->
Message Output and Debugging Functions
<!-- ##### SECTION Short_Description ##### -->
functions to output messages and help debug applications.
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide support for outputting messages.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### FUNCTION g_print ##### -->
<para>
Outputs a formatted message via the print handler.
The default print handler simply outputs the message to stdout.
</para>
<para>
g_print() should not be used from within libraries for debugging messages,
since it may be redirected by applications to special purpose message
windows or even files.
Instead, libraries should use g_log(), or the convenience functions
g_message(), g_warning() and g_error().
</para>
@format: the message format. See the <function>printf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_set_print_handler ##### -->
<para>
Sets the print handler.
Any messages passed to g_print() will be output via the new handler.
The default handler simply outputs the message to stdout.
By providing your own handler you can redirect the output, to a GTK
widget or a log file for example.
</para>
@func: the new print handler.
@Returns: the old print handler.
<!-- ##### USER_FUNCTION GPrintFunc ##### -->
<para>
Specifies the type of the print handler functions.
These are called with the complete formatted string to output.
</para>
@string: the message to be output.
<!-- ##### FUNCTION g_printerr ##### -->
<para>
Outputs a formatted message via the error message handler.
The default handler simply outputs the message to stderr.
</para>
<para>
g_printerr() should not be used from within libraries. Instead g_log() should
be used, or the convenience functions g_message(), g_warning() and g_error().
</para>
@format: the message format. See the <function>printf()</function>
documentation.
@Varargs: the parameters to insert into the format string.
<!-- ##### FUNCTION g_set_printerr_handler ##### -->
<para>
Sets the handler for printing error messages.
Any messages passed to g_printerr() will be output via the new handler.
The default handler simply outputs the message to stderr.
By providing your own handler you can redirect the output, to a GTK
widget or a log file for example.
</para>
@func: the new error message handler.
@Returns: the old error message handler.
<!-- ##### MACRO g_return_if_fail ##### -->
<para>
Returns from the current function if the expression is not true.
If the expression evaluates to FALSE, a critical message is logged and
the function returns. This can only be used in functions which do not return
a value.
</para>
@expr: the expression to check.
<!-- ##### MACRO g_return_val_if_fail ##### -->
<para>
Returns from the current function, returning the value @val, if the expression
is not true.
If the expression evaluates to FALSE, a critical message is logged and
@val is returned.
</para>
@expr: the expression to check.
@val: the value to return from the current function if the expression is not
true.
<!-- ##### MACRO g_assert ##### -->
<para>
Debugging macro to terminate the application if the assertion fails.
If the assertion fails (i.e. the expression is not true), an error message
is logged and the application is terminated.
</para>
<para>
The macro can be turned off in final releases of code by defining
G_DISABLE_ASSERT when compiling the application.
</para>
@expr: the expression to check.
<!-- ##### MACRO g_assert_not_reached ##### -->
<para>
Debugging macro to terminate the application if it is ever reached.
If it is reached, an error message is logged and the application is terminated.
</para>
<para>
The macro can be turned off in final releases of code by defining
G_DISABLE_ASSERT when compiling the application.
</para>
<!-- ##### FUNCTION g_on_error_query ##### -->
<para>
Prompts the user with "[E]xit, [H]alt, show [S]tack trace or [P]roceed".
This function is intended to be used for debugging use only.
FIXME: How do you set it up?
</para>
<para>
If Exit is selected, the application terminates with a call to
<function>_exit(0)</function>.
</para>
<para>
If Halt is selected, the application enters an infinite loop.
The infinite loop can only be stopped by killing the application,
or by setting glib_on_error_halt to FALSE (possibly via a debugger).
</para>
<para>
If Stack trace is selected, g_on_error_stack_trace() is called. This
invokes gdb, which attaches to the current process and shows a stack trace.
The prompt is then shown again.
</para>
<para>
If Proceed is selected, the function returns.
</para>
<para>
This function may cause different actions on non-unix platforms.
</para>
@prg_name: the program name, needed by gdb for the [S]tack trace option.
If @prg_name is NULL, g_get_prgname() is called to get the program name
(which will work correctly if gdk_init() or gtk_init() has been called).
<!-- ##### FUNCTION g_on_error_stack_trace ##### -->
<para>
Invokes gdb, which attaches to the current process and shows a stack trace.
Called by g_on_error_query() when the [S]tack trace option is selected.
</para>
<para>
This function may cause different actions on non-unix platforms.
</para>
@prg_name: the program name, needed by gdb for the [S]tack trace option.
If @prg_name is NULL, g_get_prgname() is called to get the program name
(which will work correctly if gdk_init() or gtk_init() has been called).
<!-- ##### MACRO G_BREAKPOINT ##### -->
<para>
Inserts a breakpoint instruction into the code (on x86 machines only).
</para>

View File

@ -0,0 +1,170 @@
<!-- ##### SECTION Title ##### -->
Windows Compatability Functions
<!-- ##### SECTION Short_Description ##### -->
functions to support portability to the Windows environment.
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions and macros are provided in the GLib library when compiled
on the Windows platform.
</para>
<para>
Many of the macros simply rename available windows functions
so that they use the same name as the standard Unix functions.
This means that code written for the Unix platform will work without change
under Windows.
</para>
<para>
A few additional constants, types, and functions are also provided,
to provide a common base set of functions across both the Unix and Windows
environments.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### MACRO MAXPATHLEN ##### -->
<para>
</para>
<!-- ##### MACRO NAME_MAX ##### -->
<para>
</para>
<!-- ##### MACRO getcwd ##### -->
<para>
</para>
<!-- ##### MACRO getpid ##### -->
<para>
</para>
<!-- ##### TYPEDEF pid_t ##### -->
<para>
</para>
<!-- ##### MACRO access ##### -->
<para>
</para>
<!-- ##### MACRO open ##### -->
<para>
</para>
<!-- ##### MACRO read ##### -->
<para>
</para>
<!-- ##### MACRO write ##### -->
<para>
</para>
<!-- ##### MACRO lseek ##### -->
<para>
</para>
<!-- ##### MACRO close ##### -->
<para>
</para>
<!-- ##### MACRO pipe ##### -->
<para>
</para>
@phandles:
<!-- ##### MACRO popen ##### -->
<para>
</para>
<!-- ##### MACRO pclose ##### -->
<para>
</para>
<!-- ##### MACRO fdopen ##### -->
<para>
</para>
<!-- ##### MACRO ftruncate ##### -->
<para>
</para>
@fd:
@size:
<!-- ##### MACRO opendir ##### -->
<para>
</para>
<!-- ##### MACRO readdir ##### -->
<para>
</para>
<!-- ##### MACRO rewinddir ##### -->
<para>
</para>
<!-- ##### MACRO closedir ##### -->
<para>
</para>