summaryrefslogtreecommitdiff
path: root/lib/gl_list.h
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2020-05-02 21:14:29 +0200
committerBruno Haible <bruno@clisp.org>2020-05-02 23:22:13 +0200
commitda5396455733d383a4ac4d0cf7eb4cd191072352 (patch)
tree1ee388f461968b045e34f6f86bb6b2128688a363 /lib/gl_list.h
parent792c2571d96142bfb97b690579da25fd734735b3 (diff)
downloadgnulib-da5396455733d383a4ac4d0cf7eb4cd191072352.tar.gz
list: Remove redundant code for remove_first and remove_last operations.
* lib/gl_list.h (struct gl_list_implementation): Remove fields remove_first, remove_last. (gl_list_remove_first, gl_list_remove_last): Implement in a generic way. * lib/gl_array_list.c: Revert last change. * lib/gl_carray_list.c: Likewise. * lib/gl_anylinked_list2.h: Likewise. * lib/gl_linked_list.c: Likewise. * lib/gl_linkedhash_list.c: Likewise. * lib/gl_anytree_list2.h: Likewise. * lib/gl_avltree_list.c: Likewise. * lib/gl_avltreehash_list.c: Likewise. * lib/gl_rbtree_list.c: Likewise. * lib/gl_rbtreehash_list.c: Likewise. * lib/gl_sublist.c: Likewise.
Diffstat (limited to 'lib/gl_list.h')
-rw-r--r--lib/gl_list.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/gl_list.h b/lib/gl_list.h
index ea5018d34e..8094006dd3 100644
--- a/lib/gl_list.h
+++ b/lib/gl_list.h
@@ -518,8 +518,6 @@ struct gl_list_implementation
const void *elt);
bool (*remove_node) (gl_list_t list, gl_list_node_t node);
bool (*remove_at) (gl_list_t list, size_t position);
- bool (*remove_first) (gl_list_t list);
- bool (*remove_last) (gl_list_t list);
bool (*remove_elt) (gl_list_t list, const void *elt);
void (*list_free) (gl_list_t list);
/* gl_list_iterator_t functions. */
@@ -762,15 +760,21 @@ gl_list_remove_at (gl_list_t list, size_t position)
GL_LIST_INLINE bool
gl_list_remove_first (gl_list_t list)
{
- return ((const struct gl_list_impl_base *) list)->vtable
- ->remove_first (list);
+ size_t size = gl_list_size (list);
+ if (size > 0)
+ return gl_list_remove_at (list, 0);
+ else
+ return false;
}
GL_LIST_INLINE bool
gl_list_remove_last (gl_list_t list)
{
- return ((const struct gl_list_impl_base *) list)->vtable
- ->remove_last (list);
+ size_t size = gl_list_size (list);
+ if (size > 0)
+ return gl_list_remove_at (list, size - 1);
+ else
+ return false;
}
GL_LIST_INLINE bool