Module Name:    othersrc
Committed By:   dholland
Date:           Sat Mar 23 21:28:04 UTC 2013

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

Log Message:
Switch the toBeMade logic to an array instead of a linked list.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 othersrc/usr.bin/dholland-make2/make.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/make.c
diff -u othersrc/usr.bin/dholland-make2/make.c:1.10 othersrc/usr.bin/dholland-make2/make.c:1.11
--- othersrc/usr.bin/dholland-make2/make.c:1.10	Sat Mar 23 21:27:23 2013
+++ othersrc/usr.bin/dholland-make2/make.c	Sat Mar 23 21:28:04 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.c,v 1.10 2013/03/23 21:27:23 dholland Exp $	*/
+/*	$NetBSD: make.c,v 1.11 2013/03/23 21:28:04 dholland Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -111,12 +111,12 @@
 #include    "dir.h"
 #include    "job.h"
 
-MAKE_RCSID("$NetBSD: make.c,v 1.10 2013/03/23 21:27:23 dholland Exp $");
+MAKE_RCSID("$NetBSD: make.c,v 1.11 2013/03/23 21:28:04 dholland Exp $");
 
 typedef struct {
-	Lst data;
+	GList data;
 	Boolean hasmark;
-	LstNode mark;
+	unsigned markpos;
 } MakeQ;
 
 static unsigned int checked = 1;/* Sequence # to detect recursion */
@@ -146,31 +146,37 @@ static void MakeBuildParent(GNode *, Boo
 static void
 MakeQ_Init(MakeQ *q)
 {
-    q->data = Lst_Init(FALSE);
-    q->hasmark = FALSE;
-    q->mark = NULL;
+	glist_init(&q->data);
+	q->hasmark = FALSE;
+	q->markpos = 0;
 }
 
 static Boolean
 MakeQ_IsEmpty(MakeQ *q)
 {
-	return Lst_IsEmpty(q->data);
+	return glist_num(&q->data) == 0;
 }
 
 static void
 MakeQ_AddTail(MakeQ *q, GNode *gn)
 {
-	(void)Lst_EnQueue(q->data, gn);
+	if (q->hasmark && q->markpos >= glist_num(&q->data)) {
+		q->markpos++;
+	}
+	glist_add(&q->data, gn, NULL);
 }
 
 static void
 MakeQ_AddBeforeMark(MakeQ *q, GNode *gn)
 {
 	assert(q->hasmark);
-	if (q->mark == NULL) {
-		Lst_AtEnd(q->data, gn);
+	if (q->markpos >= glist_num(&q->data)) {
+		glist_add(&q->data, gn, NULL);
+		q->markpos++;
 	} else {
-		Lst_InsertBefore(q->data, q->mark, gn);
+		glist_insert(&q->data, q->markpos);
+		glist_set(&q->data, q->markpos, gn);
+		q->markpos++;
 	}
 }
 
@@ -179,11 +185,7 @@ MakeQ_SetMark(MakeQ *q)
 {
 	assert(!q->hasmark);
 	q->hasmark = TRUE;
-	if (Lst_IsEmpty(q->data)) {
-		q->mark = NULL;
-	} else {
-		q->mark = Lst_First(q->data);
-	}
+	q->markpos = 0;
 }
 
 static void
@@ -191,19 +193,31 @@ MakeQ_ClearMark(MakeQ *q)
 {
 	assert(q->hasmark);
 	q->hasmark = FALSE;
-	q->mark = NULL;
+	q->markpos = 0;
 }
 
 static GNode *
 MakeQ_PopHead(MakeQ *q)
 {
-	return (GNode *)Lst_DeQueue(q->data);
+	GNode *ret;
+
+	if (glist_num(&q->data) == 0) {
+		return NULL;
+	}
+	ret = glist_get(&q->data, 0);
+	glist_remove(&q->data, 0);
+	return ret;
 }
 
 static void
 MakeQ_ForEach(MakeQ *q, int (*func)(void *, void *), void *ptr)
 {
-	Lst_ForEach(q->data, func, ptr);
+	unsigned i, num;
+
+	num = glist_num(&q->data);
+	for (i=0; i<num; i++) {
+		func(glist_get(&q->data, i), ptr);
+	}
 }
 
 ////////////////////////////////////////////////////////////

Reply via email to