]> git.saurik.com Git - redis.git/blobdiff - adlist.c
code to delete an inner range from the ziplist
[redis.git] / adlist.c
index 1f978c7b26e66243a0860167d20221e307e640a6..fd2d6fd142790c5331b1d1450866875f11c6796a 100644 (file)
--- a/adlist.c
+++ b/adlist.c
@@ -1,6 +1,6 @@
 /* adlist.c - A generic doubly linked list implementation
  *
- * Copyright (c) 2006-2009, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2006-2010, Salvatore Sanfilippo <antirez at gmail dot com>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -143,7 +143,7 @@ void listDelNode(list *list, listNode *node)
 }
 
 /* Returns a list iterator 'iter'. After the initialization every
- * call to listNextElement() will return the next element of the list.
+ * call to listNext() will return the next element of the list.
  *
  * This function can't fail. */
 listIter *listGetIterator(list *list, int direction)
@@ -164,6 +164,17 @@ void listReleaseIterator(listIter *iter) {
     zfree(iter);
 }
 
+/* Create an iterator in the list private iterator structure */
+void listRewind(list *list, listIter *li) {
+    li->next = list->head;
+    li->direction = AL_START_HEAD;
+}
+
+void listRewindTail(list *list, listIter *li) {
+    li->next = list->tail;
+    li->direction = AL_START_TAIL;
+}
+
 /* Return the next element of an iterator.
  * It's valid to remove the currently returned element using
  * listDelNode(), but not to remove other elements.
@@ -178,7 +189,7 @@ void listReleaseIterator(listIter *iter) {
  * }
  *
  * */
-listNode *listNextElement(listIter *iter)
+listNode *listNext(listIter *iter)
 {
     listNode *current = iter->next;
 
@@ -211,7 +222,7 @@ list *listDup(list *orig)
     copy->free = orig->free;
     copy->match = orig->match;
     iter = listGetIterator(orig, AL_START_HEAD);
-    while((node = listNextElement(iter)) != NULL) {
+    while((node = listNext(iter)) != NULL) {
         void *value;
 
         if (copy->dup) {
@@ -248,7 +259,7 @@ listNode *listSearchKey(list *list, void *key)
     listNode *node;
 
     iter = listGetIterator(list, AL_START_HEAD);
-    while((node = listNextElement(iter)) != NULL) {
+    while((node = listNext(iter)) != NULL) {
         if (list->match) {
             if (list->match(node->value, key)) {
                 listReleaseIterator(iter);