[PATCH] lib: fwts_list: optimize list functions a little, make small helper funcs inline

IvanHu ivan.hu at canonical.com
Thu Jan 31 08:48:58 UTC 2013


On 01/10/2013 06:07 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Make fwts_list_init(), fwts_list_new(), fwts_list_len() inline'd as they are
> just one-liner functions.   Make some minor code optimisations.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/lib/include/fwts_list.h | 31 +++++++++++++++++++++++---
>   src/lib/src/fwts_list.c     | 54 ++++++++++-----------------------------------
>   2 files changed, 40 insertions(+), 45 deletions(-)
>
> diff --git a/src/lib/include/fwts_list.h b/src/lib/include/fwts_list.h
> index ec0c826..454eddc 100644
> --- a/src/lib/include/fwts_list.h
> +++ b/src/lib/include/fwts_list.h
> @@ -62,13 +62,38 @@ typedef int  (fwts_list_compare)(void *data1, void *data2);
>   #define fwts_list_null(list)	\
>   		((list) == NULL)
>
> -void		   fwts_list_init(fwts_list *list);
> -fwts_list         *fwts_list_new(void);
> -int 		   fwts_list_len(fwts_list *list);
>   void		   fwts_list_free_items(fwts_list *list, fwts_list_link_free data_free);
>   void               fwts_list_free(fwts_list *list, fwts_list_link_free data_free);
>   void               fwts_list_iterate(fwts_list *list, fwts_list_foreach_callback callback, void *private);
>   fwts_list_link 	  *fwts_list_append(fwts_list *list, void *data);
>   fwts_list_link    *fwts_list_add_ordered(fwts_list *list, void *new_data, fwts_list_compare compare);
>
> +/*
> + *  fwts_list_init()
> + *      initialize a list header
> + */
> +static inline void fwts_list_init(fwts_list *list)
> +{
> +	memset(list, 0, sizeof(fwts_list));
> +}
> +
> +/*
> + *  fwts_list_new()
> + *      allocate and initialise a list header, return NULL if failed
> + */
> +static inline fwts_list *fwts_list_new(void)
> +{
> +        /* calloc already zero's the list */
> +	return calloc(1, sizeof(fwts_list));
> +}
> +
> +/*
> + *  fwts_list_len()
> + *      return list length, return 0 if list is NULL
> + */
> +static inline int fwts_list_len(fwts_list *list)
> +{
> +	return list ? list->len : 0;
> +}
> +
>   #endif
> diff --git a/src/lib/src/fwts_list.c b/src/lib/src/fwts_list.c
> index c6958cf..2b4c81a 100644
> --- a/src/lib/src/fwts_list.c
> +++ b/src/lib/src/fwts_list.c
> @@ -24,34 +24,6 @@
>   #include "fwts.h"
>
>   /*
> - *  fwts_list_init()
> - *	initialize a list header
> - */
> -void fwts_list_init(fwts_list *list)
> -{
> -	memset(list, 0, sizeof(fwts_list));
> -}
> -
> -/*
> - *  fwts_list_new()
> - *	allocate and initialise a list header, return NULL if failed
> - */
> -fwts_list *fwts_list_new(void)
> -{
> -	/* calloc already zero's the list */
> -	return calloc(1, sizeof(fwts_list));
> -}
> -
> -/*
> - *  fwts_list_len()
> - *	return list length, return 0 if list is NULL
> - */
> -int fwts_list_len(fwts_list *list)
> -{
> -	return list ? list->len : 0;
> -}
> -
> -/*
>    *  fwts_list_iterate()
>    *	iterate over items in list, call callback function to operate on each
>    *	item, and pass private data over to callback. private may be NULL if not used
> @@ -60,7 +32,7 @@ void fwts_list_iterate(fwts_list *list, fwts_list_foreach_callback callback, voi
>   {
>   	fwts_list_link *item;
>
> -	if (list == NULL)
> +	if (!list)
>   		return;
>
>   	fwts_list_foreach(item, list)
> @@ -78,12 +50,12 @@ void fwts_list_free_items(fwts_list *list, fwts_list_link_free data_free)
>   	fwts_list_link *item;
>   	fwts_list_link *next;
>
> -	if (list == NULL)
> +	if (!list)
>   		return;
>
> -	for (item = list->head; item != NULL; item = next) {
> +	for (item = list->head; item; item = next) {
>   		next = item->next;
> -		if ((item->data != NULL) && (data_free != NULL))
> +		if (item->data && data_free)
>   			data_free(item->data);
>   		free(item);
>   	}
> @@ -110,7 +82,7 @@ fwts_list_link *fwts_list_append(fwts_list *list, void *data)
>   {
>   	fwts_list_link *link;
>
> -	if (list == NULL)
> +	if (!list)
>   		return NULL;
>
>   	if ((link = calloc(1,sizeof(fwts_list_link))) == NULL)
> @@ -118,13 +90,12 @@ fwts_list_link *fwts_list_append(fwts_list *list, void *data)
>
>   	link->data = data;
>
> -	if (list->head == NULL) {
> -		list->head = link;
> -		list->tail = link;
> -	} else {
> +	if (list->head)
>   		list->tail->next = link;
> -		list->tail = link;
> -	}
> +	else
> +		list->head = link;
> +
> +	list->tail = link;
>   	list->len++;
>
>   	return link;
> @@ -144,18 +115,17 @@ fwts_list_link *fwts_list_add_ordered(fwts_list *list, void *new_data, fwts_list
>
>   	new_list_item->data = new_data;
>
> -	for (list_item = &list->head; *list_item != NULL; list_item = &(*list_item)->next) {
> +	for (list_item = &list->head; *list_item; list_item = &(*list_item)->next) {
>   		void *data = (void *)(*list_item)->data;
>   		if (compare(data, new_data) >= 0) {
>   			new_list_item->next = (*list_item);
>   			break;
>   		}
>   	}
> -	if (new_list_item->next == NULL)
> +	if (!new_list_item->next)
>   		list->tail = new_list_item;
>
>   	*list_item = new_list_item;
> -
>   	list->len++;
>
>   	return new_list_item;
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>



More information about the fwts-devel mailing list