3151d2baac119dc711a865202d9f04b6e1d43831
[debian/amanda] / common-src / glib-util.h
1 /*
2  * Copyright (c) 2005 Zmanda, Inc.  All Rights Reserved.
3  * 
4  * This library is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License version 2.1 as 
6  * published by the Free Software Foundation.
7  * 
8  * This library is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
11  * License for more details.
12  * 
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this library; if not, write to the Free Software Foundation,
15  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA.
16  * 
17  * Contact information: Zmanda Inc., 505 N Mathlida Ave, Suite 120
18  * Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
19  */
20 /*
21  * Utilities that aren't quite included in glib
22  *
23  * Author: Dustin J. Mitchell <dustin@zmanda.com>, Ian Turner <ian@zmanda.com>
24  */
25
26 #ifndef GLIB_UTIL_H
27 #define GLIB_UTIL_H
28
29 #include <glib.h>
30 #include <glib-object.h>
31
32 /* like g_[s]list_foreach, but with a function taking only
33  * one argument.
34  */
35 #define g_list_foreach_nodata(list, func)                               \
36     g_list_foreach((list), _glib_util_foreach_glue, (gpointer)(func));
37 #define g_slist_foreach_nodata(list, func)                              \
38     g_slist_foreach((list), _glib_util_foreach_glue, (gpointer)(func));
39 void _glib_util_foreach_glue(gpointer data, gpointer func);
40
41 /* This function takes a GValue, which may be zero-filled or
42  * initialized. In either case, this function causes the GValue to be
43  * initialized with the given type. Note that this function lacks the
44  * safety of the standard g_value_ functions; it assumes that the
45  * passed value is zeroed or valid.
46  *
47  * Returns its first argument.*/
48 GValue* g_value_unset_init(GValue* val, GType type);
49
50 /* This does the same thing but also copies the contents of one value
51  * into another. Note that this function lacks the safety of the
52  * standard g_value_ functions; it assumes that the passed value is
53  * zeroed or valid.
54  *
55  * Returns its second (reset) argument.*/
56 GValue* g_value_unset_copy(const GValue* from, GValue * to);
57
58 /* These functions all take a GLib container, and call free() on all the
59  * pointers in the container before free()ing the container itself. */
60 void g_list_free_full(GList * list);
61 void g_slist_free_full(GSList * list);
62 void g_queue_free_full(GQueue * queue);
63 void g_ptr_array_free_full(GPtrArray * array);
64
65 /* g_value_compare() does what you expect. It returns TRUE if and
66    only if the two values have the same type and the same value. Note
67    that it will return FALSE if the same value is stored with two
68    different types: For example, a GValue with a UCHAR of 1 and a
69    GValue with a CHAR of 1 will be considered inequal. Also, this is a
70    'shallow' comparison; pointers to distinct but equivalent objects
71    are considered inequal. */
72 gboolean g_value_compare(GValue * a, GValue * b);
73
74 /* Given a string and a GValue, parse the string and store it in the
75    GValue. The GValue should be pre-initalized to whatever type you want
76    parsed. */
77 gboolean g_value_set_from_string(GValue * val, char * string);
78
79 /* A GCompareFunc that will sort strings alphabetically (using strcmp) */
80 gint g_compare_strings(gconstpointer a, gconstpointer b);
81
82 /* These functions all take a Flags class and stringify it. They
83  * return a NULL-terminated array of strings that can be
84  * passed to g_strjoinv(), g_strfreev(), g_strdupv(), and
85  * g_strv_length(). Example output looks like:
86  * - g_flags_name_to_strv() -> "MEDIA_ACCESS_MODE_READ_ONLY"
87  * - g_flags_short_name_to_strv() -> "READ_ONLY"
88  * - g_flags_nick_to_strv() -> "read-only"
89  */
90
91 char ** g_flags_name_to_strv(int value, GType type);
92 char ** g_flags_short_name_to_strv(int value, GType type);
93 char ** g_flags_nick_to_strv(int value, GType type);
94
95 /* Just like g_strjoinv, but frees the array as well. */
96 char * g_strjoinv_and_free(char ** strv, const char * seperator);
97
98 /* Just like g_strjoinv, but joins like an English list. The string would
99  * usually be "and" or "or". */
100 char * g_english_strjoinv(char ** strv, const char * conjunction);
101
102 /* Just like g_english_strjoinv, but also frees the array. */
103 char * g_english_strjoinv_and_free(char ** strv, const char * conjunction);
104
105 /* Replacement for built-in functions. */
106 #if !(GLIB_CHECK_VERSION(2,6,0))
107 guint g_strv_length(gchar ** strv);
108 #endif
109
110 #endif
111