From f2ad4dea7bd528778bba32fde3feefe43faad26d Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Tue, 29 Jul 2003 17:43:42 +0000 Subject: [PATCH] add removeItemAtHead and removeItemAtTail --- ruamoko/include/List.h | 4 +++- ruamoko/lib/List.r | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/ruamoko/include/List.h b/ruamoko/include/List.h index feac1bfc2..0c6ae2c13 100644 --- a/ruamoko/include/List.h +++ b/ruamoko/include/List.h @@ -22,7 +22,9 @@ struct list_bucket_t = { - (id) tail; - (void) addItemAtHead: (id) item; - (void) addItemAtTail: (id) item; -- (void) removeItem: (id) item; +- (id) removeItem: (id) item; +- (id) removeItemAtHead; +- (id) removeItemAtTail; - (integer) count; -(void)makeObjectsPerformSelector:(SEL)selector; -(void)makeObjectsPerformSelector:(SEL)selector withObject:(id)arg; diff --git a/ruamoko/lib/List.r b/ruamoko/lib/List.r index 1589825c7..9bdc53b9f 100644 --- a/ruamoko/lib/List.r +++ b/ruamoko/lib/List.r @@ -68,7 +68,7 @@ tail = &e.next; } -- (void) removeItem: (id) item +- (id) removeItem: (id) item { local list_bucket_t [] e; @@ -77,9 +77,43 @@ e.prev[0] = e.next; if (e.next) e.next.prev = e.prev; - return; + obj_free (e); + return item; } } + return NIL; +} + +- (id) removeItemAtHead +{ + local list_bucket_t [] e; + local id obj; + + if (!count) + return NIL; + e = head; + obj = e.obj; + e.prev[0] = e.next; + if (e.next) + e.next.prev = e.prev; + obj_free (e); + return obj; +} + +- (id) removeItemAtTail +{ + local list_bucket_t [] e; + local id obj; + + if (!count) + return NIL; + e = (list_bucket_t []) tail; + obj = e.obj; + e.prev[0] = e.next; + if (e.next) + e.next.prev = e.prev; + obj_free (e); + return obj; } - (integer) count