[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/geas/src/classdef classdef.c classdef.h gc...
From: |
Reinhard Mueller |
Subject: |
gnue/geas/src/classdef classdef.c classdef.h gc... |
Date: |
Fri, 28 Sep 2001 15:35:31 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Reinhard Mueller <address@hidden> 01/09/28 15:35:31
Modified files:
geas/src/classdef: classdef.c classdef.h gcdinfo.c
Log message:
Added classlists.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/classdef.c.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/classdef.h.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/gcdinfo.c.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/geas/src/classdef/classdef.c
diff -u gnue/geas/src/classdef/classdef.c:1.12
gnue/geas/src/classdef/classdef.c:1.13
--- gnue/geas/src/classdef/classdef.c:1.12 Fri Sep 28 14:37:37 2001
+++ gnue/geas/src/classdef/classdef.c Fri Sep 28 15:35:31 2001
@@ -19,7 +19,7 @@
along with GEAS; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- $Id: classdef.c,v 1.12 2001/09/28 18:37:37 reinhard Exp $
+ $Id: classdef.c,v 1.13 2001/09/28 19:35:31 reinhard Exp $
*/
#include "config.h"
@@ -40,6 +40,12 @@
GHashTable *types;
};
+struct _geas_cd_classlist
+{
+ GList *list;
+ GList *current;
+};
+
struct _geas_cd_class
{
GHashTable *parent; /* hash table containing this class */
@@ -336,6 +342,78 @@
g_hash_table_remove (_modules, m->name);
_free_module (m);
+}
+
+/* ========================================================================= *\
+ * Classlist
+\* ========================================================================= */
+
+/* ------------------------------------------------------------------------- *\
+ * Append a class to a GList (called by g_hash_table_foreach)
+\* ------------------------------------------------------------------------- */
+static void
+_hf_append_class (gpointer key, gpointer value, gpointer user_data)
+{
+ *(GList **)user_data = g_list_append (*(GList **)user_data, value);
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Append all classes of a module to a GList (called by g_hash_table_foreach)
+\* ------------------------------------------------------------------------- */
+static void
+_hf_append_classes (gpointer key, gpointer value, gpointer user_data)
+{
+ g_hash_table_foreach (((geas_cd_module *)value)->classes, _hf_append_class,
+ user_data);
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Create a new classlist
+\* ------------------------------------------------------------------------- */
+geas_cd_classlist *
+geas_cd_classlist_new (void)
+{
+ geas_cd_classlist *cl;
+
+ cl = g_new0 (geas_cd_classlist, 1);
+ g_hash_table_foreach (_modules, _hf_append_classes, &(cl->list));
+ return (cl);
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Get the next item of the classlist
+\* ------------------------------------------------------------------------- */
+geas_cd_class *
+geas_cd_classlist_next (geas_cd_classlist *cl)
+{
+ g_return_val_if_fail (cl, NULL);
+
+ if (!cl->current)
+ {
+ cl->current = cl->list;
+ }
+ else
+ {
+ cl->current = cl->current->next;
+ }
+ if (cl->current)
+ {
+ return (geas_cd_class *)(cl->current->data);
+ }
+ else
+ {
+ return (NULL);
+ }
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Free a classlist
+\* ------------------------------------------------------------------------- */
+void
+geas_cd_classlist_free (geas_cd_classlist *cl)
+{
+ g_list_free (cl->list);
+ g_free (cl);
}
/* ========================================================================= *\
Index: gnue/geas/src/classdef/classdef.h
diff -u gnue/geas/src/classdef/classdef.h:1.9
gnue/geas/src/classdef/classdef.h:1.10
--- gnue/geas/src/classdef/classdef.h:1.9 Fri Sep 28 14:37:37 2001
+++ gnue/geas/src/classdef/classdef.h Fri Sep 28 15:35:31 2001
@@ -19,7 +19,7 @@
along with GEAS; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- $Id: classdef.h,v 1.9 2001/09/28 18:37:37 reinhard Exp $
+ $Id: classdef.h,v 1.10 2001/09/28 19:35:31 reinhard Exp $
*/
/* ------------------------------------------------------------------------- *\
@@ -51,10 +51,11 @@
GEAS_CD_DATATYPE_COMPOUND
} geas_cd_datatype;
-typedef struct _geas_cd_module geas_cd_module;
-typedef struct _geas_cd_class geas_cd_class;
-typedef struct _geas_cd_type geas_cd_type;
-typedef struct _geas_cd_field geas_cd_field;
+typedef struct _geas_cd_module geas_cd_module;
+typedef struct _geas_cd_classlist geas_cd_classlist;
+typedef struct _geas_cd_class geas_cd_class;
+typedef struct _geas_cd_type geas_cd_type;
+typedef struct _geas_cd_field geas_cd_field;
/* ------------------------------------------------------------------------- *\
* General functions
@@ -82,6 +83,14 @@
geas_cd_type *geas_cd_module_find_type (const geas_cd_module *m,
const char *name);
void geas_cd_module_free (geas_cd_module *m);
+
+/* ------------------------------------------------------------------------- *\
+ * Classlists
+\* ------------------------------------------------------------------------- */
+
+geas_cd_classlist *geas_cd_classlist_new (void);
+geas_cd_class *geas_cd_classlist_next (geas_cd_classlist *cl);
+void geas_cd_classlist_free (geas_cd_classlist *cl);
/* ------------------------------------------------------------------------- *\
* Classes
Index: gnue/geas/src/classdef/gcdinfo.c
diff -u gnue/geas/src/classdef/gcdinfo.c:1.1
gnue/geas/src/classdef/gcdinfo.c:1.2
--- gnue/geas/src/classdef/gcdinfo.c:1.1 Fri Sep 28 14:41:02 2001
+++ gnue/geas/src/classdef/gcdinfo.c Fri Sep 28 15:35:31 2001
@@ -19,15 +19,28 @@
along with GEAS; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- $Id: gcdinfo.c,v 1.1 2001/09/28 18:41:02 reinhard Exp $
+ $Id: gcdinfo.c,v 1.2 2001/09/28 19:35:31 reinhard Exp $
*/
+#include <stdio.h>
#include "classdef.h"
#include "read-gcd.h"
int main (void)
{
+ geas_cd_classlist *cl;
+ geas_cd_class *c;
+
geas_cd_init ();
geas_cd_read_gcd ("../../../gnue-config");
+
+ cl = geas_cd_classlist_new ();
+ while ((c = geas_cd_classlist_next (cl)))
+ {
+ printf ("CLASS %s [%s]\n(file %s)\n", geas_cd_class_get_name_full (c),
+ geas_cd_class_get_name_db (c), geas_cd_class_get_filename (c));
+ }
+ geas_cd_classlist_free (cl);
+
return (0);
}
- gnue/geas/src/classdef classdef.c classdef.h gc...,
Reinhard Mueller <=