Module Name:    othersrc
Committed By:   dholland
Date:           Sat Mar 23 17:56:58 UTC 2013

Modified Files:
        othersrc/usr.bin/dholland-make2: suff.c

Log Message:
More arrays, fewer lists.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 othersrc/usr.bin/dholland-make2/suff.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: othersrc/usr.bin/dholland-make2/suff.c
diff -u othersrc/usr.bin/dholland-make2/suff.c:1.13 othersrc/usr.bin/dholland-make2/suff.c:1.14
--- othersrc/usr.bin/dholland-make2/suff.c:1.13	Sat Mar 23 17:47:11 2013
+++ othersrc/usr.bin/dholland-make2/suff.c	Sat Mar 23 17:56:58 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: suff.c,v 1.13 2013/03/23 17:47:11 dholland Exp $	*/
+/*	$NetBSD: suff.c,v 1.14 2013/03/23 17:56:58 dholland Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -131,7 +131,7 @@
 #include	  "hash.h"
 #include	  "dir.h"
 
-MAKE_RCSID("$NetBSD: suff.c,v 1.13 2013/03/23 17:47:11 dholland Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.14 2013/03/23 17:56:58 dholland Exp $");
 
 #define CLEANUP
 
@@ -205,7 +205,7 @@ static struct sufflist sufflist;	/* all 
 static struct sufflist suffClean;	/* suffixes to be cleaned */
 #endif
 static struct srclist srclist;		/* sources */
-static Lst       transforms;	/* Lst of transformation rules */
+static GList transforms;		/* transformation rules */
 
 static int        sNum = 0;	/* Counter for assigning suffix numbers */
 
@@ -216,13 +216,12 @@ static Suff 	    *emptySuff;	/* The empt
 
 static const char *SuffStrIsPrefix(const char *, const char *);
 static const char *SuffSuffIsSuffix(const Suff *, const SuffixCmpData *);
-static int SuffGNHasNameP(const void *, const void *);
 static void SuffUnRef(struct sufflist *, Suff *);
 static void SuffFree(void *);
 static void SuffInsert(struct sufflist *, Suff *);
 static void SuffRemove(struct sufflist *, Suff *);
 static Boolean SuffParseTransform(char *, Suff **, Suff **);
-static int SuffRebuildGraph(void *, void *);
+static void SuffRebuildGraph(GNode *, Suff *);
 static void SuffAddSrc(Suff *, struct srclist *, Src *);
 static int SuffRemoveSrc(struct srclist *);
 static void SuffAddLevel(struct srclist *, Src *);
@@ -236,7 +235,7 @@ static void SuffFindArchiveDeps(GNode *,
 static void SuffFindNormalDeps(GNode *, struct srclist *);
 static void SuffPrintName(Suff *);
 static void SuffPrintSuff(Suff *);
-static int SuffPrintTrans(void *, void *);
+static void SuffPrintTrans(GNode *);
 
 	/*************** Lst Predicates ****************/
 /*-
@@ -306,24 +305,33 @@ SuffSuffIsSuffix(const Suff *s, const Su
 
 /*-
  *-----------------------------------------------------------------------
- * SuffGNHasNameP  --
- *	See if the graph node has the desired name
+ * findtransform --
+ *	find an entry in transforms[] by name
  *
  * Input:
- *	gn		current node we're looking at
- *	name		name we're looking for
+ *	name		name of node we're looking for
  *
  * Results:
- *	0 if it does. non-zero if it doesn't
+ *	the GNode, or NULL if it's not there
  *
  * Side Effects:
  *	None
  *-----------------------------------------------------------------------
  */
-static int
-SuffGNHasNameP(const void *gn, const void *name)
+static GNode *
+findtransform(const char *name)
 {
-    return (strcmp(name, ((const GNode *)gn)->name));
+	unsigned i, num;
+	GNode *gn;
+
+	num = glist_num(&transforms);
+	for (i=0; i<num; i++) {
+		gn = glist_get(&transforms, i);
+		if (!strcmp(name, gn->name)) {
+			return gn;
+		}
+	}
+	return NULL;
 }
 
  	    /*********** Maintenance Functions ************/
@@ -638,7 +646,7 @@ Suff_IsTransform(char *str)
  *	The node created for the transformation in the transforms list
  *
  * Side Effects:
- *	The node is placed on the end of the transforms Lst and links are
+ *	The node is placed on the end of transforms[] and links are
  *	made between the two suffixes mentioned in the target name
  *-----------------------------------------------------------------------
  */
@@ -648,16 +656,15 @@ Suff_AddTransform(char *line)
     GNode         *gn;		/* GNode of transformation rule */
     Suff          *s,		/* source suffix */
                   *t;		/* target suffix */
-    LstNode 	  ln;	    	/* Node for existing transformation */
 
-    ln = Lst_Find(transforms, line, SuffGNHasNameP);
-    if (ln == NULL) {
+    gn = findtransform(line);
+    if (gn == NULL) {
 	/*
 	 * Make a new graph node for the transformation. It will be filled in
 	 * by the Parse module.
 	 */
 	gn = Targ_NewGN(line);
-	(void)Lst_AtEnd(transforms, gn);
+	glist_add(&transforms, gn, NULL);
     } else {
 	/*
 	 * New specification for transformation rule. Just nuke the old list
@@ -665,7 +672,6 @@ Suff_AddTransform(char *line)
 	 * free the commands themselves, because a given command can be
 	 * attached to several different transformations.
 	 */
-	gn = (GNode *)Lst_Datum(ln);
 	stringarray_setsize(&gn->commands, 0);
 	glist_setsize(&gn->children, 0);
     }
@@ -783,11 +789,9 @@ Suff_EndTransform(void *gnp, void *dummy
  *
  *-----------------------------------------------------------------------
  */
-static int
-SuffRebuildGraph(void *transformp, void *sp)
+static void
+SuffRebuildGraph(GNode *transform, Suff *s)
 {
-    GNode   	*transform = (GNode *)transformp;
-    Suff    	*s = (Suff *)sp;
     const char 	*cp;
     Suff  	*s2;
     SuffixCmpData sd;
@@ -810,7 +814,7 @@ SuffRebuildGraph(void *transformp, void 
 		 */
 		SuffInsert(&s2->children, s);
 		SuffInsert(&s->parents, s2);
-		return 0;
+		return;
 	    }
 	}
     }
@@ -844,7 +848,6 @@ SuffRebuildGraph(void *transformp, void 
 	    }
 	}
     }
-    return(0);
 }
 
 /*-
@@ -1007,7 +1010,10 @@ Suff_AddSuffix(char *str, GNode **gn)
 	 * Look for any existing transformations from or to this suffix.
 	 * XXX: Only do this after a Suff_ClearSuffixes?
 	 */
-	Lst_ForEach(transforms, SuffRebuildGraph, s);
+	num = glist_num(&transforms);
+	for (i=0; i<num; i++) {
+	    SuffRebuildGraph(glist_get(&transforms, i), s);
+	}
 }
 
 /*-
@@ -1846,7 +1852,6 @@ Suff_FindPath(GNode* gn)
 static Boolean
 SuffApplyTransform(GNode *tGn, GNode *sGn, Suff *t, Suff *s)
 {
-    LstNode 	ln;    /* General node */
     char    	*tname;	    /* Name of transformation rule */
     GNode   	*gn;	    /* Node for same */
     unsigned pos, i;
@@ -1862,10 +1867,10 @@ SuffApplyTransform(GNode *tGn, GNode *sG
      * Locate the transformation rule itself
      */
     tname = str_concat(s->name, t->name, 0);
-    ln = Lst_Find(transforms, tname, SuffGNHasNameP);
+    gn = findtransform(tname);
     free(tname);
 
-    if (ln == NULL) {
+    if (gn == NULL) {
 	/*
 	 * Not really such a transformation rule (can happen when we're
 	 * called to link an OP_MEMBER and OP_ARCHV node), so return
@@ -1874,8 +1879,6 @@ SuffApplyTransform(GNode *tGn, GNode *sG
 	return(FALSE);
     }
 
-    gn = (GNode *)Lst_Datum(ln);
-
     if (DEBUG(SUFF)) {
 	fprintf(debug_file, "\tapplying %s -> %s to \"%s\"\n", s->name, t->name, tGn->name);
     }
@@ -2595,7 +2598,7 @@ Suff_Init(void)
     sufflist_init(&suffClean);
 #endif
     srclist_init(&srclist);
-    transforms = Lst_Init(FALSE);
+    glist_init(&transforms);
 
     sNum = 0;
     /*
@@ -2655,7 +2658,8 @@ Suff_End(void)
 	if (suffNull)
 		SuffFree(suffNull);
 	srclist_cleanup(&srclist);
-    Lst_Destroy(transforms, NULL);
+	glist_setsize(&transforms, 0);
+	glist_cleanup(&transforms);
 #endif
 }
 
@@ -2718,10 +2722,9 @@ SuffPrintSuff(Suff *s)
     fputc('\n', debug_file);
 }
 
-static int
-SuffPrintTrans(void *tp, void *dummy)
+static void
+SuffPrintTrans(GNode *t)
 {
-    GNode   *t = (GNode *)tp;
     unsigned i;
 
     fprintf(debug_file, "%-16s: ", t->name);
@@ -2731,7 +2734,6 @@ SuffPrintTrans(void *tp, void *dummy)
 	Targ_PrintCmd(stringarray_get(&t->commands, i));
     }
     fputc('\n', debug_file);
-    return(dummy ? 0 : 0);
 }
 
 void
@@ -2746,5 +2748,8 @@ Suff_PrintAll(void)
     }
 
     fprintf(debug_file, "#*** Transformations:\n");
-    Lst_ForEach(transforms, SuffPrintTrans, NULL);
+    num = glist_num(&transforms);
+    for (i=0; i<num; i++) {
+	    SuffPrintTrans(glist_get(&transforms, i));
+    }
 }

Reply via email to