diff options
Diffstat (limited to 'src/server.h')
-rw-r--r-- | src/server.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/server.h b/src/server.h index c96c1c743..3af135114 100644 --- a/src/server.h +++ b/src/server.h @@ -2318,12 +2318,15 @@ typedef struct { robj *subject; unsigned char encoding; unsigned char direction; /* Iteration direction */ - quicklistIter *iter; + + unsigned char *lpi; /* listpack iterator */ + quicklistIter *iter; /* quicklist iterator */ } listTypeIterator; /* Structure for an entry while iterating over a list. */ typedef struct { listTypeIterator *li; + unsigned char *lpe; /* Entry in listpack */ quicklistEntry entry; /* Entry in quicklist */ } listTypeEntry; @@ -2603,18 +2606,27 @@ robj *listTypePop(robj *subject, int where); unsigned long listTypeLength(const robj *subject); listTypeIterator *listTypeInitIterator(robj *subject, long index, unsigned char direction); void listTypeReleaseIterator(listTypeIterator *li); -void listTypeSetIteratorDirection(listTypeIterator *li, unsigned char direction); +void listTypeSetIteratorDirection(listTypeIterator *li, listTypeEntry *entry, unsigned char direction); int listTypeNext(listTypeIterator *li, listTypeEntry *entry); robj *listTypeGet(listTypeEntry *entry); +unsigned char *listTypeGetValue(listTypeEntry *entry, size_t *vlen, long long *lval); void listTypeInsert(listTypeEntry *entry, robj *value, int where); void listTypeReplace(listTypeEntry *entry, robj *value); int listTypeEqual(listTypeEntry *entry, robj *o); void listTypeDelete(listTypeIterator *iter, listTypeEntry *entry); robj *listTypeDup(robj *o); -int listTypeDelRange(robj *o, long start, long stop); +void listTypeDelRange(robj *o, long start, long stop); void unblockClientWaitingData(client *c); void popGenericCommand(client *c, int where); void listElementsRemoved(client *c, robj *key, int where, robj *o, long count, int signal, int *deleted); +typedef enum { + LIST_CONV_AUTO, + LIST_CONV_GROWING, + LIST_CONV_SHRINKING, +} list_conv_type; +typedef void (*beforeConvertCB)(void *data); +void listTypeTryConversion(robj *o, list_conv_type lct, beforeConvertCB fn, void *data); +void listTypeTryConversionAppend(robj *o, robj **argv, int start, int end, beforeConvertCB fn, void *data); /* MULTI/EXEC/WATCH... */ void unwatchAllKeys(client *c); @@ -2656,6 +2668,7 @@ robj *createStringObjectFromLongLong(long long value); robj *createStringObjectFromLongLongForValue(long long value); robj *createStringObjectFromLongDouble(long double value, int humanfriendly); robj *createQuicklistObject(void); +robj *createListListpackObject(void); robj *createSetObject(void); robj *createIntsetObject(void); robj *createSetListpackObject(void); |