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

Keng-Yu Lin kengyu at canonical.com
Tue Jan 29 05:28:42 UTC 2013


On Thu, Jan 10, 2013 at 6:07 PM, Colin King <colin.king at canonical.com> 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;
> --
> 1.8.0
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>



More information about the fwts-devel mailing list