1.1 --- a/epoc32/include/stdapis/glib-2.0/glib/gnode.h Tue Nov 24 13:55:44 2009 +0000
1.2 +++ b/epoc32/include/stdapis/glib-2.0/glib/gnode.h Tue Mar 16 16:12:26 2010 +0000
1.3 @@ -1,1 +1,174 @@
1.4 -gnode.h
1.5 +/* GLIB - Library of useful routines for C programming
1.6 + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
1.7 + * Portions copyright (c) 2006 Nokia Corporation. All rights reserved.
1.8 + *
1.9 + * This library is free software; you can redistribute it and/or
1.10 + * modify it under the terms of the GNU Lesser General Public
1.11 + * License as published by the Free Software Foundation; either
1.12 + * version 2 of the License, or (at your option) any later version.
1.13 + *
1.14 + * This library is distributed in the hope that it will be useful,
1.15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1.17 + * Lesser General Public License for more details.
1.18 + *
1.19 + * You should have received a copy of the GNU Lesser General Public
1.20 + * License along with this library; if not, write to the
1.21 + * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
1.22 + * Boston, MA 02111-1307, USA.
1.23 + */
1.24 +
1.25 +/*
1.26 + * Modified by the GLib Team and others 1997-2000. See the AUTHORS
1.27 + * file for a list of people on the GLib Team. See the ChangeLog
1.28 + * files for a list of changes. These files are distributed with
1.29 + * GLib at ftp://ftp.gtk.org/pub/gtk/.
1.30 + */
1.31 +
1.32 +#ifndef __G_NODE_H__
1.33 +#define __G_NODE_H__
1.34 +
1.35 +#include <_ansi.h>
1.36 +#include <glib/gmem.h>
1.37 +
1.38 +G_BEGIN_DECLS
1.39 +
1.40 +typedef struct _GNode GNode;
1.41 +
1.42 +/* Tree traverse flags */
1.43 +typedef enum
1.44 +{
1.45 + G_TRAVERSE_LEAVES = 1 << 0,
1.46 + G_TRAVERSE_NON_LEAVES = 1 << 1,
1.47 + G_TRAVERSE_ALL = G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES,
1.48 + G_TRAVERSE_MASK = 0x03,
1.49 + G_TRAVERSE_LEAFS = G_TRAVERSE_LEAVES,
1.50 + G_TRAVERSE_NON_LEAFS = G_TRAVERSE_NON_LEAVES
1.51 +} GTraverseFlags;
1.52 +
1.53 +/* Tree traverse orders */
1.54 +typedef enum
1.55 +{
1.56 + G_IN_ORDER,
1.57 + G_PRE_ORDER,
1.58 + G_POST_ORDER,
1.59 + G_LEVEL_ORDER
1.60 +} GTraverseType;
1.61 +
1.62 +typedef gboolean (*GNodeTraverseFunc) (GNode *node,
1.63 + gpointer data);
1.64 +typedef void (*GNodeForeachFunc) (GNode *node,
1.65 + gpointer data);
1.66 +typedef gpointer (*GCopyFunc) (gconstpointer src,
1.67 + gpointer data);
1.68 +
1.69 +/* N-way tree implementation
1.70 + */
1.71 +struct _GNode
1.72 +{
1.73 + gpointer data;
1.74 + GNode *next;
1.75 + GNode *prev;
1.76 + GNode *parent;
1.77 + GNode *children;
1.78 +};
1.79 +
1.80 +#define G_NODE_IS_ROOT(node) (((GNode*) (node))->parent == NULL && \
1.81 + ((GNode*) (node))->prev == NULL && \
1.82 + ((GNode*) (node))->next == NULL)
1.83 +#define G_NODE_IS_LEAF(node) (((GNode*) (node))->children == NULL)
1.84 +
1.85 +IMPORT_C GNode* g_node_new (gpointer data);
1.86 +IMPORT_C void g_node_destroy (GNode *root);
1.87 +IMPORT_C void g_node_unlink (GNode *node);
1.88 +IMPORT_C GNode* g_node_copy_deep (GNode *node,
1.89 + GCopyFunc copy_func,
1.90 + gpointer data);
1.91 +IMPORT_C GNode* g_node_copy (GNode *node);
1.92 +IMPORT_C GNode* g_node_insert (GNode *parent,
1.93 + gint position,
1.94 + GNode *node);
1.95 +IMPORT_C GNode* g_node_insert_before (GNode *parent,
1.96 + GNode *sibling,
1.97 + GNode *node);
1.98 +IMPORT_C GNode* g_node_insert_after (GNode *parent,
1.99 + GNode *sibling,
1.100 + GNode *node);
1.101 +IMPORT_C GNode* g_node_prepend (GNode *parent,
1.102 + GNode *node);
1.103 +IMPORT_C guint g_node_n_nodes (GNode *root,
1.104 + GTraverseFlags flags);
1.105 +IMPORT_C GNode* g_node_get_root (GNode *node);
1.106 +IMPORT_C gboolean g_node_is_ancestor (GNode *node,
1.107 + GNode *descendant);
1.108 +IMPORT_C guint g_node_depth (GNode *node);
1.109 +IMPORT_C GNode* g_node_find (GNode *root,
1.110 + GTraverseType order,
1.111 + GTraverseFlags flags,
1.112 + gpointer data);
1.113 +
1.114 +/* convenience macros */
1.115 +#define g_node_append(parent, node) \
1.116 + g_node_insert_before ((parent), NULL, (node))
1.117 +#define g_node_insert_data(parent, position, data) \
1.118 + g_node_insert ((parent), (position), g_node_new (data))
1.119 +#define g_node_insert_data_before(parent, sibling, data) \
1.120 + g_node_insert_before ((parent), (sibling), g_node_new (data))
1.121 +#define g_node_prepend_data(parent, data) \
1.122 + g_node_prepend ((parent), g_node_new (data))
1.123 +#define g_node_append_data(parent, data) \
1.124 + g_node_insert_before ((parent), NULL, g_node_new (data))
1.125 +
1.126 +/* traversal function, assumes that `node' is root
1.127 + * (only traverses `node' and its subtree).
1.128 + * this function is just a high level interface to
1.129 + * low level traversal functions, optimized for speed.
1.130 + */
1.131 +IMPORT_C void g_node_traverse (GNode *root,
1.132 + GTraverseType order,
1.133 + GTraverseFlags flags,
1.134 + gint max_depth,
1.135 + GNodeTraverseFunc func,
1.136 + gpointer data);
1.137 +
1.138 +/* return the maximum tree height starting with `node', this is an expensive
1.139 + * operation, since we need to visit all nodes. this could be shortened by
1.140 + * adding `guint height' to struct _GNode, but then again, this is not very
1.141 + * often needed, and would make g_node_insert() more time consuming.
1.142 + */
1.143 +IMPORT_C guint g_node_max_height (GNode *root);
1.144 +
1.145 +IMPORT_C void g_node_children_foreach (GNode *node,
1.146 + GTraverseFlags flags,
1.147 + GNodeForeachFunc func,
1.148 + gpointer data);
1.149 +IMPORT_C void g_node_reverse_children (GNode *node);
1.150 +IMPORT_C guint g_node_n_children (GNode *node);
1.151 +IMPORT_C GNode* g_node_nth_child (GNode *node,
1.152 + guint n);
1.153 +IMPORT_C GNode* g_node_last_child (GNode *node);
1.154 +IMPORT_C GNode* g_node_find_child (GNode *node,
1.155 + GTraverseFlags flags,
1.156 + gpointer data);
1.157 +IMPORT_C gint g_node_child_position (GNode *node,
1.158 + GNode *child);
1.159 +IMPORT_C gint g_node_child_index (GNode *node,
1.160 + gpointer data);
1.161 +
1.162 +IMPORT_C GNode* g_node_first_sibling (GNode *node);
1.163 +IMPORT_C GNode* g_node_last_sibling (GNode *node);
1.164 +
1.165 +#define g_node_prev_sibling(node) ((node) ? \
1.166 + ((GNode*) (node))->prev : NULL)
1.167 +#define g_node_next_sibling(node) ((node) ? \
1.168 + ((GNode*) (node))->next : NULL)
1.169 +#define g_node_first_child(node) ((node) ? \
1.170 + ((GNode*) (node))->children : NULL)
1.171 +
1.172 +#ifndef G_DISABLE_DEPRECATED
1.173 +IMPORT_C void g_node_push_allocator (gpointer dummy);
1.174 +IMPORT_C void g_node_pop_allocator (void);
1.175 +#endif
1.176 +G_END_DECLS
1.177 +
1.178 +#endif /* __G_NODE_H__ */