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