Now that there are no users of Lst_ForEach and Lst_ForEachFrom are left

delete these two macros and all the associated stuff.
This commit is contained in:
harti 2005-03-16 16:11:11 +00:00
parent df4f9cb09a
commit 3d5967d365
2 changed files with 3 additions and 89 deletions

View File

@ -69,7 +69,6 @@ Lst_Append(Lst *list, LstNode *ln, void *d)
nLNode = emalloc(sizeof(*nLNode));
nLNode->datum = d;
nLNode->useCount = nLNode->flags = 0;
if (ln == NULL) {
nLNode->nextPtr = nLNode->prevPtr = NULL;
@ -161,7 +160,6 @@ Lst_Concat(Lst *list1, Lst *list2, int flags)
list1->firstPtr = nln;
}
nln->prevPtr = last;
nln->flags = nln->useCount = 0;
last = nln;
}
@ -313,62 +311,6 @@ Lst_FindFrom(Lst *l, LstNode *ln, const void *d, CompareProc *cProc)
}
}
/*-
*-----------------------------------------------------------------------
* Lst_ForEachFrom --
* Apply the given function to each element of the given list. The
* function should return 0 if traversal should continue and non-
* zero if it should abort.
*
* Results:
* None.
*
* Side Effects:
* Only those created by the passed-in function.
*
*-----------------------------------------------------------------------
*/
void
Lst_ForEachFrom(Lst *list, LstNode *ln, DoProc *proc, void *d)
{
LstNode *next;
Boolean done;
int result;
if (!Lst_Valid(list) || Lst_IsEmpty(list)) {
return;
}
do {
/*
* Take care of having the current element deleted out from under
* us.
*/
next = ln->nextPtr;
ln->useCount++;
result = (*proc)(ln->datum, d);
ln->useCount--;
/*
* We're done with the traversal if
* - nothing's been added after the current node and
* - the next node to examine is the first in the queue or
* doesn't exist.
*/
done = (next == ln->nextPtr &&
(next == NULL || next == list->firstPtr));
next = ln->nextPtr;
if (ln->flags & LN_DELETED) {
free(ln);
}
ln = next;
} while (!result && !Lst_IsEmpty(list) && !done);
}
/*-
*-----------------------------------------------------------------------
* Lst_Insert --
@ -393,7 +335,6 @@ Lst_Insert(Lst *list, LstNode *ln, void *d)
nLNode = emalloc(sizeof(*nLNode));
nLNode->datum = d;
nLNode->useCount = nLNode->flags = 0;
if (ln == NULL) {
nLNode->prevPtr = nLNode->nextPtr = NULL;
@ -472,9 +413,5 @@ Lst_Remove(Lst *list, LstNode *ln)
* note that the datum is unmolested. The caller must free it as
* necessary and as expected.
*/
if (ln->useCount == 0) {
free(ln);
} else {
ln->flags |= LN_DELETED;
}
}

View File

@ -56,22 +56,10 @@
struct LstNode {
struct LstNode *prevPtr; /* previous element in list */
struct LstNode *nextPtr; /* next in list */
int useCount:8; /* Count of functions using the node. Node may not
* be deleted until count goes to 0 */
int flags:8; /* Node status flags */
void *datum; /* datum associated with this element */
};
typedef struct LstNode LstNode;
/*
* Flags required for synchronization
*/
#define LN_DELETED 0x0001 /* List node should be removed when done */
typedef enum {
LstHead, LstMiddle, LstTail, LstUnknown
} LstWhere;
/*
* The list itself
*/
@ -82,7 +70,6 @@ struct Lst {
typedef struct Lst Lst;
typedef int CompareProc(const void *, const void *);
typedef int DoProc(void *, void *);
typedef void *DuplicateProc(void *);
typedef void FreeProc(void *);
@ -159,21 +146,11 @@ LstNode *Lst_FindFrom(Lst *, LstNode *, const void *, CompareProc *);
* the datum
*/
LstNode *Lst_Member(Lst *, void *);
/* Apply a function to all elements of a lst */
void Lst_ForEach(Lst *, DoProc *, void *);
#define Lst_ForEach(LST, FN, D) (Lst_ForEachFrom((LST), Lst_First(LST), \
(FN), (D)))
/* Loop through a list. Note, that you may not delete the list element. */
#define LST_FOREACH(PTR, LST) \
for ((PTR) = (LST)->firstPtr; (PTR) != NULL; (PTR) = (PTR)->nextPtr)
/*
* Apply a function to all elements of a lst starting from a certain point.
* If the list is circular, the application will wrap around to the
* beginning of the list again.
*/
void Lst_ForEachFrom(Lst *, LstNode *, DoProc *, void *);
/*
* for using the list as a queue
*/