On Wed, Apr 19, 2006 at 12:43:47PM +0200, Alexander Malysh wrote:
> Heh, and again nack. see below...
> 
> indentation
> 
> >+    else +          item=GET(list, list->len-1);
> 
> ditto

all right the new way?

> 
> > +/*
> >+ * Return the item at position `pos'.
> >+ */
> 
> wrong comment
> 
changed to "Return the last item in the list."

Wilfried G?sgens

--- ../../_gateway/gwlib/list.c 2005-02-11 16:35:48.000000000 +0100
+++ list.c      2006-04-19 16:16:29.000000000 +0200
@@ -298,6 +298,19 @@
     return item;
 }
 
+void *gwlist_get_last(List *list)
+{
+    void *item;
+
+    lock(list);
+       if (list->len==0)
+        item=NULL;
+       else 
+      item=GET(list, list->len-1);
+    unlock(list);
+    return item;
+}
+
 
 void *gwlist_extract_first(List *list)
 {
@@ -315,6 +328,22 @@
     return item;
 }
 
+void *gwlist_extract_last(List *list)
+{
+    void *item;
+
+    gw_assert(list != NULL);
+    lock(list);
+    if (list->len == 0)
+        item = NULL;
+    else {
+        item = GET(list, list->len-1);
+        delete_items_from_list(list, list->len-1, 1);
+    }
+    unlock(list);
+    return item;
+}
+
 
 List *gwlist_extract_matching(List *list, void *pat, gwlist_item_matches_t 
*cmp)
 {
--- ../../_gateway/gwlib/list.h 2005-02-11 16:35:48.000000000 +0100
+++ list.h      2006-04-19 16:14:25.000000000 +0200
@@ -199,6 +199,11 @@
  */
 void *gwlist_get(List *list, long pos);
 
+/*
+ * Return the last item in the list.
+ */
+void *gwlist_get_last(List *list);
+
 
 /*
  * Remove and return the first item in the list. Return NULL if list is
@@ -207,6 +212,13 @@
  */
 void *gwlist_extract_first(List *list);
 
+/*
+ * Remove and return the last item in the list. Return NULL if list is
+ * empty. Note that unlike gwlist_consume, this won't sleep until there is
+ * something in the list.
+ */
+void *gwlist_extract_last(List *list);
+
 
 /*
  * Create a new list with items from `list' that match a pattern. The items

Reply via email to