|
|
@ -28,6 +28,7 @@
|
|
|
|
#define REDISMODULE_KEYTYPE_HASH 3
|
|
|
|
#define REDISMODULE_KEYTYPE_HASH 3
|
|
|
|
#define REDISMODULE_KEYTYPE_SET 4
|
|
|
|
#define REDISMODULE_KEYTYPE_SET 4
|
|
|
|
#define REDISMODULE_KEYTYPE_ZSET 5
|
|
|
|
#define REDISMODULE_KEYTYPE_ZSET 5
|
|
|
|
|
|
|
|
#define REDISMODULE_KEYTYPE_MODULE 6
|
|
|
|
|
|
|
|
|
|
|
|
/* Reply types. */
|
|
|
|
/* Reply types. */
|
|
|
|
#define REDISMODULE_REPLY_UNKNOWN -1
|
|
|
|
#define REDISMODULE_REPLY_UNKNOWN -1
|
|
|
@ -78,14 +79,27 @@ typedef struct RedisModuleCtx RedisModuleCtx;
|
|
|
|
typedef struct RedisModuleKey RedisModuleKey;
|
|
|
|
typedef struct RedisModuleKey RedisModuleKey;
|
|
|
|
typedef struct RedisModuleString RedisModuleString;
|
|
|
|
typedef struct RedisModuleString RedisModuleString;
|
|
|
|
typedef struct RedisModuleCallReply RedisModuleCallReply;
|
|
|
|
typedef struct RedisModuleCallReply RedisModuleCallReply;
|
|
|
|
|
|
|
|
typedef struct RedisModuleIO RedisModuleIO;
|
|
|
|
|
|
|
|
typedef struct RedisModuleType RedisModuleType;
|
|
|
|
|
|
|
|
typedef struct RedisModuleDigest RedisModuleDigest;
|
|
|
|
|
|
|
|
|
|
|
|
typedef int (*RedisModuleCmdFunc) (RedisModuleCtx *ctx, RedisModuleString **argv, int argc);
|
|
|
|
typedef int (*RedisModuleCmdFunc) (RedisModuleCtx *ctx, RedisModuleString **argv, int argc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef void *(*RedisModuleTypeLoadFunc)(RedisModuleIO *rdb, int encver);
|
|
|
|
|
|
|
|
typedef void (*RedisModuleTypeSaveFunc)(RedisModuleIO *rdb, void *value);
|
|
|
|
|
|
|
|
typedef void (*RedisModuleTypeRewriteFunc)(RedisModuleIO *aof, RedisModuleString *key, void *value);
|
|
|
|
|
|
|
|
typedef void (*RedisModuleTypeDigestFunc)(RedisModuleDigest *digest, void *value);
|
|
|
|
|
|
|
|
typedef void (*RedisModuleTypeFreeFunc)(void *value);
|
|
|
|
|
|
|
|
|
|
|
|
#define REDISMODULE_GET_API(name) \
|
|
|
|
#define REDISMODULE_GET_API(name) \
|
|
|
|
RedisModule_GetApi("RedisModule_" #name, ((void **)&RedisModule_ ## name))
|
|
|
|
RedisModule_GetApi("RedisModule_" #name, ((void **)&RedisModule_ ## name))
|
|
|
|
|
|
|
|
|
|
|
|
#define REDISMODULE_API_FUNC(x) (*x)
|
|
|
|
#define REDISMODULE_API_FUNC(x) (*x)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_Alloc)(size_t bytes);
|
|
|
|
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_Realloc)(void *ptr, size_t bytes);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_Free)(void *ptr);
|
|
|
|
|
|
|
|
char *REDISMODULE_API_FUNC(RedisModule_Strdup)(const char *str);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_GetApi)(const char *, void *);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_GetApi)(const char *, void *);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_CreateCommand)(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_CreateCommand)(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_SetModuleAttribs)(RedisModuleCtx *ctx, const char *name, int ver, int apiver);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_SetModuleAttribs)(RedisModuleCtx *ctx, const char *name, int ver, int apiver);
|
|
|
@ -151,11 +165,30 @@ int REDISMODULE_API_FUNC(RedisModule_IsKeysPositionRequest)(RedisModuleCtx *ctx)
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_KeyAtPos)(RedisModuleCtx *ctx, int pos);
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_KeyAtPos)(RedisModuleCtx *ctx, int pos);
|
|
|
|
unsigned long long REDISMODULE_API_FUNC(RedisModule_GetClientId)(RedisModuleCtx *ctx);
|
|
|
|
unsigned long long REDISMODULE_API_FUNC(RedisModule_GetClientId)(RedisModuleCtx *ctx);
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_PoolAlloc)(RedisModuleCtx *ctx, size_t bytes);
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_PoolAlloc)(RedisModuleCtx *ctx, size_t bytes);
|
|
|
|
|
|
|
|
RedisModuleType *REDISMODULE_API_FUNC(RedisModule_CreateDataType)(RedisModuleCtx *ctx, const char *name, int encver, RedisModuleTypeLoadFunc rdb_load, RedisModuleTypeSaveFunc rdb_save, RedisModuleTypeRewriteFunc aof_rewrite, RedisModuleTypeDigestFunc digest, RedisModuleTypeFreeFunc free);
|
|
|
|
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ModuleTypeSetValue)(RedisModuleKey *key, RedisModuleType *mt, void *value);
|
|
|
|
|
|
|
|
RedisModuleType *REDISMODULE_API_FUNC(RedisModule_ModuleTypeGetType)(RedisModuleKey *key);
|
|
|
|
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_ModuleTypeGetValue)(RedisModuleKey *key);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveUnsigned)(RedisModuleIO *io, uint64_t value);
|
|
|
|
|
|
|
|
uint64_t REDISMODULE_API_FUNC(RedisModule_LoadUnsigned)(RedisModuleIO *io);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveSigned)(RedisModuleIO *io, int64_t value);
|
|
|
|
|
|
|
|
int64_t REDISMODULE_API_FUNC(RedisModule_LoadSigned)(RedisModuleIO *io);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_EmitAOF)(RedisModuleIO *io, const char *cmdname, const char *fmt, ...);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveString)(RedisModuleIO *io, RedisModuleString *s);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveStringBuffer)(RedisModuleIO *io, const char *str, size_t len);
|
|
|
|
|
|
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_LoadString)(RedisModuleIO *io);
|
|
|
|
|
|
|
|
char *REDISMODULE_API_FUNC(RedisModule_LoadStringBuffer)(RedisModuleIO *io, size_t *lenptr);
|
|
|
|
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveDouble)(RedisModuleIO *io, double value);
|
|
|
|
|
|
|
|
double REDISMODULE_API_FUNC(RedisModule_LoadDouble)(RedisModuleIO *io);
|
|
|
|
|
|
|
|
|
|
|
|
/* This is included inline inside each Redis module. */
|
|
|
|
/* This is included inline inside each Redis module. */
|
|
|
|
static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) {
|
|
|
|
static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) {
|
|
|
|
void *getapifuncptr = ((void**)ctx)[0];
|
|
|
|
void *getapifuncptr = ((void**)ctx)[0];
|
|
|
|
RedisModule_GetApi = (int (*)(const char *, void *)) (unsigned long)getapifuncptr;
|
|
|
|
RedisModule_GetApi = (int (*)(const char *, void *)) (unsigned long)getapifuncptr;
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(Alloc);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(Free);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(Realloc);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(Strdup);
|
|
|
|
REDISMODULE_GET_API(CreateCommand);
|
|
|
|
REDISMODULE_GET_API(CreateCommand);
|
|
|
|
REDISMODULE_GET_API(SetModuleAttribs);
|
|
|
|
REDISMODULE_GET_API(SetModuleAttribs);
|
|
|
|
REDISMODULE_GET_API(WrongArity);
|
|
|
|
REDISMODULE_GET_API(WrongArity);
|
|
|
@ -221,6 +254,21 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
|
|
|
|
REDISMODULE_GET_API(KeyAtPos);
|
|
|
|
REDISMODULE_GET_API(KeyAtPos);
|
|
|
|
REDISMODULE_GET_API(GetClientId);
|
|
|
|
REDISMODULE_GET_API(GetClientId);
|
|
|
|
REDISMODULE_GET_API(PoolAlloc);
|
|
|
|
REDISMODULE_GET_API(PoolAlloc);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(CreateDataType);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(ModuleTypeSetValue);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(ModuleTypeGetType);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(ModuleTypeGetValue);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(SaveUnsigned);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(LoadUnsigned);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(SaveSigned);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(LoadSigned);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(SaveString);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(SaveStringBuffer);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(LoadString);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(LoadStringBuffer);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(SaveDouble);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(LoadDouble);
|
|
|
|
|
|
|
|
REDISMODULE_GET_API(EmitAOF);
|
|
|
|
|
|
|
|
|
|
|
|
RedisModule_SetModuleAttribs(ctx,name,ver,apiver);
|
|
|
|
RedisModule_SetModuleAttribs(ctx,name,ver,apiver);
|
|
|
|
return REDISMODULE_OK;
|
|
|
|
return REDISMODULE_OK;
|
|
|
|