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);
+ }
}
////////////////////////////////////////////////////////////