Use typedefs for the types of the functions that are passed as arguments

to the list functions for better readability.

Submitted by:	Max Okumoto <okumoto@ucsd.edu>
This commit is contained in:
Hartmut Brandt 2004-11-29 12:17:13 +00:00
parent ac06cb0ad3
commit 1734fd27b4
10 changed files with 22 additions and 17 deletions

View File

@ -293,6 +293,6 @@ For_Run(int lineno)
Lst_ForEach(arg.lst, ForExec, (void *) &arg); Lst_ForEach(arg.lst, ForExec, (void *) &arg);
free(arg.var); free(arg.var);
Lst_Destroy(arg.lst, (void (*)(void *)) free); Lst_Destroy(arg.lst, free);
Buf_Destroy(arg.buf, TRUE); Buf_Destroy(arg.buf, TRUE);
} }

View File

@ -93,13 +93,18 @@ struct Lst {
}; };
typedef struct Lst *Lst; typedef struct Lst *Lst;
typedef int CompareProc(void *, void *);
typedef int DoProc(void *, void *);
typedef void *DuplicateProc(void *);
typedef void FreeProc(void *);
/* /*
* NOFREE can be used as the freeProc to Lst_Destroy when the elements are * NOFREE can be used as the freeProc to Lst_Destroy when the elements are
* not to be freed. * not to be freed.
* NOCOPY performs similarly when given as the copyProc to Lst_Duplicate. * NOCOPY performs similarly when given as the copyProc to Lst_Duplicate.
*/ */
#define NOFREE ((void (*)(void *)) 0) #define NOFREE ((FreeProc *)NULL)
#define NOCOPY ((void * (*)(void *)) 0) #define NOCOPY ((DuplicateProc *)NULL)
#define LST_CONCNEW 0 /* create new LstNode's when using Lst_Concat */ #define LST_CONCNEW 0 /* create new LstNode's when using Lst_Concat */
#define LST_CONCLINK 1 /* relink LstNode's when using Lst_Concat */ #define LST_CONCLINK 1 /* relink LstNode's when using Lst_Concat */
@ -110,9 +115,9 @@ typedef struct Lst *Lst;
/* Create a new list */ /* Create a new list */
Lst Lst_Init(Boolean); Lst Lst_Init(Boolean);
/* Duplicate an existing list */ /* Duplicate an existing list */
Lst Lst_Duplicate(Lst, void * (*)(void *)); Lst Lst_Duplicate(Lst, DuplicateProc *);
/* Destroy an old one */ /* Destroy an old one */
void Lst_Destroy(Lst, void (*)(void *)); void Lst_Destroy(Lst, FreeProc *);
/* /*
* Functions to modify a list * Functions to modify a list
@ -148,22 +153,22 @@ void * Lst_Datum(LstNode);
* Functions for entire lists * Functions for entire lists
*/ */
/* Find an element in a list */ /* Find an element in a list */
LstNode Lst_Find(Lst, void *, int (*)(void *, void *)); LstNode Lst_Find(Lst, void *, CompareProc *);
/* Find an element starting from somewhere */ /* Find an element starting from somewhere */
LstNode Lst_FindFrom(Lst, LstNode, void *, int (*cProc)(void *, void *)); LstNode Lst_FindFrom(Lst, LstNode, void *, CompareProc *);
/* /*
* See if the given datum is on the list. Returns the LstNode containing * See if the given datum is on the list. Returns the LstNode containing
* the datum * the datum
*/ */
LstNode Lst_Member(Lst, void *); LstNode Lst_Member(Lst, void *);
/* Apply a function to all elements of a lst */ /* Apply a function to all elements of a lst */
void Lst_ForEach(Lst, int (*)(void *, void *), void *); void Lst_ForEach(Lst, DoProc *, void *);
/* /*
* Apply a function to all elements of a lst starting from a certain point. * 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 * If the list is circular, the application will wrap around to the
* beginning of the list again. * beginning of the list again.
*/ */
void Lst_ForEachFrom(Lst, LstNode, int (*)(void *, void *), void *); void Lst_ForEachFrom(Lst, LstNode, DoProc *, void *);
/* /*
* these functions are for dealing with a list as a table, of sorts. * these functions are for dealing with a list as a table, of sorts.
* An idea of the "current element" is kept and used by all the functions * An idea of the "current element" is kept and used by all the functions

View File

@ -65,7 +65,7 @@ __FBSDID("$FreeBSD$");
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
void void
Lst_Destroy(Lst list, void (*freeProc)(void *)) Lst_Destroy(Lst list, FreeProc *freeProc)
{ {
LstNode ln; LstNode ln;
LstNode tln = NULL; LstNode tln = NULL;

View File

@ -68,7 +68,7 @@ __FBSDID("$FreeBSD$");
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
Lst Lst
Lst_Duplicate(Lst list, void *(*copyProc)(void *)) Lst_Duplicate(Lst list, DuplicateProc *copyProc)
{ {
Lst nl; Lst nl;
LstNode ln; LstNode ln;

View File

@ -64,7 +64,7 @@ __FBSDID("$FreeBSD$");
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
LstNode LstNode
Lst_Find(Lst l, void *d, int (*cProc)(void *, void *)) Lst_Find(Lst l, void *d, CompareProc *cProc)
{ {
return (Lst_FindFrom (l, Lst_First(l), d, cProc)); return (Lst_FindFrom (l, Lst_First(l), d, cProc));

View File

@ -65,7 +65,7 @@ __FBSDID("$FreeBSD$");
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
LstNode LstNode
Lst_FindFrom(Lst l, LstNode ln, void *d, int (*cProc)(void *, void *)) Lst_FindFrom(Lst l, LstNode ln, void *d, CompareProc *cProc)
{ {
LstNode tln; LstNode tln;
Boolean found = FALSE; Boolean found = FALSE;

View File

@ -65,7 +65,7 @@ __FBSDID("$FreeBSD$");
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
void void
Lst_ForEach(Lst l, int (*proc)(void *, void *), void *d) Lst_ForEach(Lst l, DoProc *proc, void *d)
{ {
Lst_ForEachFrom(l, Lst_First(l), proc, d); Lst_ForEachFrom(l, Lst_First(l), proc, d);

View File

@ -66,7 +66,7 @@ __FBSDID("$FreeBSD$");
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
void void
Lst_ForEachFrom(Lst list, LstNode ln, int (*proc)(void *, void *), void *d) Lst_ForEachFrom(Lst list, LstNode ln, DoProc *proc, void *d)
{ {
LstNode next; LstNode next;
Boolean done; Boolean done;

View File

@ -874,7 +874,7 @@ main(int argc, char **argv)
Lst_Destroy(variables, NOFREE); Lst_Destroy(variables, NOFREE);
Lst_Destroy(makefiles, NOFREE); Lst_Destroy(makefiles, NOFREE);
Lst_Destroy(create, (void (*)(void *)) free); Lst_Destroy(create, free);
/* print the graph now it's been processed if the user requested it */ /* print the graph now it's been processed if the user requested it */
if (DEBUG(GRAPH2)) if (DEBUG(GRAPH2))

View File

@ -2536,7 +2536,7 @@ Parse_Init (void)
void void
Parse_End (void) Parse_End (void)
{ {
Lst_Destroy(targCmds, (void (*)(void *)) free); Lst_Destroy(targCmds, free);
if (targets) if (targets)
Lst_Destroy(targets, NOFREE); Lst_Destroy(targets, NOFREE);
Lst_Destroy(sysIncPath, Dir_Destroy); Lst_Destroy(sysIncPath, Dir_Destroy);