commit-gnue
[Top][All Lists]
Advanced

[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);
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]