diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2026-01-21 22:52:54 +0100 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2026-01-21 22:52:54 +0100 |
| commit | dcacc00e3750300617ba6e16eb346713f91a783a (patch) | |
| tree | 38e2d4fb5ed9d119711d4295c6eda4b014af73fd /examples/redis-unstable/src/sds.h | |
| parent | 58dac10aeb8f5a041c46bddbeaf4c7966a99b998 (diff) | |
| download | crep-dcacc00e3750300617ba6e16eb346713f91a783a.tar.gz | |
Remove testing data
Diffstat (limited to 'examples/redis-unstable/src/sds.h')
| -rw-r--r-- | examples/redis-unstable/src/sds.h | 340 |
1 files changed, 0 insertions, 340 deletions
diff --git a/examples/redis-unstable/src/sds.h b/examples/redis-unstable/src/sds.h deleted file mode 100644 index 3c02d7d..0000000 --- a/examples/redis-unstable/src/sds.h +++ /dev/null @@ -1,340 +0,0 @@ -/* SDSLib 2.0 -- A C dynamic strings library - * - * Copyright (c) 2006-Present, Redis Ltd. - * All rights reserved. - * - * Copyright (c) 2024-present, Valkey contributors. - * All rights reserved. - * - * Licensed under your choice of (a) the Redis Source Available License 2.0 - * (RSALv2); or (b) the Server Side Public License v1 (SSPLv1); or (c) the - * GNU Affero General Public License v3 (AGPLv3). - */ - -#ifndef __SDS_H -#define __SDS_H - -#define SDS_MAX_PREALLOC (1024*1024) -extern const char *SDS_NOINIT; - -#include <sys/types.h> -#include <stdarg.h> -#include <stdint.h> - -typedef char *sds; - -/* Note: sdshdr5 is never used, we just access the flags byte directly. - * However is here to document the layout of type 5 SDS strings. */ -struct __attribute__ ((__packed__)) sdshdr5 { - unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ - char buf[]; -}; -struct __attribute__ ((__packed__)) sdshdr8 { - uint8_t len; /* used */ - uint8_t alloc; /* excluding the header and null terminator */ - unsigned char flags; /* 3 lsb of type, 5 unused bits */ - char buf[]; -}; -struct __attribute__ ((__packed__)) sdshdr16 { - uint16_t len; /* used */ - uint16_t alloc; /* excluding the header and null terminator */ - unsigned char flags; /* 3 lsb of type, 5 unused bits */ - char buf[]; -}; -struct __attribute__ ((__packed__)) sdshdr32 { - uint32_t len; /* used */ - uint32_t alloc; /* excluding the header and null terminator */ - unsigned char flags; /* 3 lsb of type, 5 unused bits */ - char buf[]; -}; -struct __attribute__ ((__packed__)) sdshdr64 { - uint64_t len; /* used */ - uint64_t alloc; /* excluding the header and null terminator */ - unsigned char flags; /* 3 lsb of type, 5 unused bits */ - char buf[]; -}; - -#define SDS_TYPE_5 0 -#define SDS_TYPE_8 1 -#define SDS_TYPE_16 2 -#define SDS_TYPE_32 3 -#define SDS_TYPE_64 4 -#define SDS_TYPE_MASK 7 -#define SDS_TYPE_BITS 3 -#define SDS_HDR_VAR(T,s) struct sdshdr##T *sh = (void*)((s)-(sizeof(struct sdshdr##T))); -#define SDS_HDR(T,s) ((struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T)))) -#define SDS_TYPE_5_LEN(s) (((unsigned char)(s[-1])) >> SDS_TYPE_BITS) - -static inline unsigned char sdsType(sds s) { - unsigned char flags = s[-1]; - return flags & SDS_TYPE_MASK; -} - -/* Returns a user data bit stored in the SDS header by sdsSetAuxBit. The bit - * index is 0-4. Returns 0 or 1. Always returns 0 for SDS_TYPE_5. */ -static inline int sdsGetAuxBit(sds s, int bit) { - if (sdsType(s) == SDS_TYPE_5) - return 0; - - unsigned char flags = s[-1]; - return (flags & (1U << (SDS_TYPE_BITS + bit))) != 0U; -} - -/* Stores a bit in an unused area in the SDS header, except for SDS_TYPE_5. The - * bit index is 0-4. The value is 0 or 1. The aux bits are lost if the SDS is - * auto-resized. This is only for special uses like immutable SDS embedded in - * other structures. */ -static inline void sdsSetAuxBit(sds s, int bit, int value) { - if (sdsType(s) == SDS_TYPE_5) return; - unsigned char flags = s[-1]; - if (value) { - flags |= 1U << (SDS_TYPE_BITS + bit); - } else { - flags &= ~(1U << (SDS_TYPE_BITS + bit)); - } - s[-1] = (char)flags; -} - -static inline size_t sdslen(const sds s) { - switch (sdsType(s)) { - case SDS_TYPE_5: return SDS_TYPE_5_LEN(s); - case SDS_TYPE_8: - return SDS_HDR(8,s)->len; - case SDS_TYPE_16: - return SDS_HDR(16,s)->len; - case SDS_TYPE_32: - return SDS_HDR(32,s)->len; - case SDS_TYPE_64: - return SDS_HDR(64,s)->len; - } - return 0; -} - -static inline size_t sdsavail(const sds s) { - switch(sdsType(s)) { - case SDS_TYPE_5: { - return 0; - } - case SDS_TYPE_8: { - SDS_HDR_VAR(8,s); - return sh->alloc - sh->len; - } - case SDS_TYPE_16: { - SDS_HDR_VAR(16,s); - return sh->alloc - sh->len; - } - case SDS_TYPE_32: { - SDS_HDR_VAR(32,s); - return sh->alloc - sh->len; - } - case SDS_TYPE_64: { - SDS_HDR_VAR(64,s); - return sh->alloc - sh->len; - } - } - return 0; -} - -static inline void sdssetlen(sds s, size_t newlen) { - switch(sdsType(s)) { - case SDS_TYPE_5: - { - unsigned char *fp = ((unsigned char*)s)-1; - *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); - } - break; - case SDS_TYPE_8: - SDS_HDR(8,s)->len = newlen; - break; - case SDS_TYPE_16: - SDS_HDR(16,s)->len = newlen; - break; - case SDS_TYPE_32: - SDS_HDR(32,s)->len = newlen; - break; - case SDS_TYPE_64: - SDS_HDR(64,s)->len = newlen; - break; - } -} - -static inline void sdsinclen(sds s, size_t inc) { - switch(sdsType(s)) { - case SDS_TYPE_5: - { - unsigned char *fp = ((unsigned char*)s)-1; - unsigned char newlen = SDS_TYPE_5_LEN(s)+inc; - *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); - } - break; - case SDS_TYPE_8: - SDS_HDR(8,s)->len += inc; - break; - case SDS_TYPE_16: - SDS_HDR(16,s)->len += inc; - break; - case SDS_TYPE_32: - SDS_HDR(32,s)->len += inc; - break; - case SDS_TYPE_64: - SDS_HDR(64,s)->len += inc; - break; - } -} - -/* Return the total size of the allocation of the specified sds string, - * including: - * 1) The sds header before the pointer. - * 2) The string. - * 3) The free buffer at the end if any. - * 4) The implicit null term. - */ -static inline size_t sdsAllocSize(sds s) { - switch(sdsType(s)) { - case SDS_TYPE_5: - return sizeof(struct sdshdr5) + SDS_TYPE_5_LEN(s) + 1; - case SDS_TYPE_8: - return sizeof(struct sdshdr8) + SDS_HDR(8,s)->alloc + 1; - case SDS_TYPE_16: - return sizeof(struct sdshdr16) + SDS_HDR(16,s)->alloc + 1; - case SDS_TYPE_32: - return sizeof(struct sdshdr32) + SDS_HDR(32,s)->alloc + 1; - case SDS_TYPE_64: - return sizeof(struct sdshdr64) + SDS_HDR(64,s)->alloc + 1; - } - return 0; -} - -/* sdsalloc() = sdsavail() + sdslen() */ -static inline size_t sdsalloc(const sds s) { - switch(sdsType(s)) { - case SDS_TYPE_5: - return SDS_TYPE_5_LEN(s); - case SDS_TYPE_8: - return SDS_HDR(8,s)->alloc; - case SDS_TYPE_16: - return SDS_HDR(16,s)->alloc; - case SDS_TYPE_32: - return SDS_HDR(32,s)->alloc; - case SDS_TYPE_64: - return SDS_HDR(64,s)->alloc; - } - return 0; -} - -static inline void sdssetalloc(sds s, size_t newlen) { - switch(sdsType(s)) { - case SDS_TYPE_5: - /* Nothing to do, this type has no total allocation info. */ - break; - case SDS_TYPE_8: - SDS_HDR(8,s)->alloc = newlen; - break; - case SDS_TYPE_16: - SDS_HDR(16,s)->alloc = newlen; - break; - case SDS_TYPE_32: - SDS_HDR(32,s)->alloc = newlen; - break; - case SDS_TYPE_64: - SDS_HDR(64,s)->alloc = newlen; - break; - } -} - -static inline int sdsHdrSize(char type) { - switch(type&SDS_TYPE_MASK) { - case SDS_TYPE_5: - return sizeof(struct sdshdr5); - case SDS_TYPE_8: - return sizeof(struct sdshdr8); - case SDS_TYPE_16: - return sizeof(struct sdshdr16); - case SDS_TYPE_32: - return sizeof(struct sdshdr32); - case SDS_TYPE_64: - return sizeof(struct sdshdr64); - } - return 0; -} - -sds sdsnewlen(const void *init, size_t initlen); -sds sdstrynewlen(const void *init, size_t initlen); -sds sdsnew(const char *init); -sds sdsnewplacement(char *buf, size_t bufsize, char type, const char *init, size_t initlen); - -sds sdsempty(void); -sds sdsdup(const sds s); -void sdsfree(sds s); -void sdsfreegeneric(void *s); -void sdsfreeusable(sds s, size_t *usable); -sds sdsgrowzero(sds s, size_t len); -sds sdscatlen(sds s, const void *t, size_t len); -sds sdscat(sds s, const char *t); -sds sdscatsds(sds s, const sds t); -sds sdscpylen(sds s, const char *t, size_t len); -sds sdscpy(sds s, const char *t); - -sds sdscatvprintf(sds s, const char *fmt, va_list ap); -#ifdef __GNUC__ -sds sdscatprintf(sds s, const char *fmt, ...) - __attribute__((format(printf, 2, 3))); -#else -sds sdscatprintf(sds s, const char *fmt, ...); -#endif - -sds sdscatfmt(sds s, char const *fmt, ...); -sds sdstrim(sds s, const char *cset); -void sdssubstr(sds s, size_t start, size_t len); -void sdsrange(sds s, ssize_t start, ssize_t end); -void sdsupdatelen(sds s); -void sdsclear(sds s); -int sdscmp(const sds s1, const sds s2); -sds *sdssplitlen(const char *s, ssize_t len, const char *sep, int seplen, int *count); -void sdsfreesplitres(sds *tokens, int count); -void sdstolower(sds s); -void sdstoupper(sds s); -sds sdsfromlonglong(long long value); -sds sdscatrepr(sds s, const char *p, size_t len); -sds *sdssplitargs(const char *line, int *argc); -sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen); -sds sdsjoin(char **argv, int argc, char *sep); -sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen); -int sdsneedsrepr(const sds s); - -/* Callback for sdstemplate. The function gets called by sdstemplate - * every time a variable needs to be expanded. The variable name is - * provided as variable, and the callback is expected to return a - * substitution value. Returning a NULL indicates an error. - */ -typedef sds (*sdstemplate_callback_t)(const sds variable, void *arg); -sds sdstemplate(const char *template, sdstemplate_callback_t cb_func, void *cb_arg); - -/* Low level functions exposed to the user API */ -char sdsReqType(size_t string_size); -sds sdsMakeRoomFor(sds s, size_t addlen); -sds sdsMakeRoomForNonGreedy(sds s, size_t addlen); -void sdsIncrLen(sds s, ssize_t incr); -sds sdsRemoveFreeSpace(sds s, int would_regrow); -sds sdsResize(sds s, size_t size, int would_regrow); -void *sdsAllocPtr(sds s); - -/* Returns the minimum required size to store an sds string of the given length - * and type. */ -static inline size_t sdsReqSize(size_t len, char type) { - return len + sdsHdrSize(type) + 1; -} - -/* Export the allocator used by SDS to the program using SDS. - * Sometimes the program SDS is linked to, may use a different set of - * allocators, but may want to allocate or free things that SDS will - * respectively free or allocate. */ -void *sds_malloc(size_t size); -void *sds_realloc(void *ptr, size_t size); -void sds_free(void *ptr); - -#ifdef REDIS_TEST -int sdsTest(int argc, char *argv[], int flags); -#endif - -#endif |
