epoc32/include/stdapis/glib-2.0/glib/gnode.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
     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__ */