ptrdiff_t tree_set_store::get_set_size(ptrdiff_t set) { if (buckets[set].child_r == EMPTY_SET) { return 1; } return get_set_size(buckets[set].child_l) + get_set_size(buckets[set].child_r); }
void print_key2(redis_instance* inst, char* key, size_t len) { long long size = 0; int flag = get_key_type(inst, key, len); long long pttl = get_key_pttl(inst, key, len); printf("{key:%s, type:%s, pttl:%lldms, db:%lu,", key, type_name[flag], pttl, inst->db); switch (flag) { case KSTRING: { redisReply* kv = (redisReply*)redisCommand(inst->cxt, "get %b", key, len); assert(kv != nil); assert(kv->type == REDIS_REPLY_STRING); assert(kv->len != 0); pline(" value:%s}", kv->str); freeReplyObject(kv); } break; case KHASH: { size = get_hashtable_size(inst, key, len); printf(" size:%lld", size); if (size) { printf(",\n kvs:["); print_hashtable2(inst, key, len); pline("\b \n ]"); } pline("}"); } break; case KLIST: { size = get_list_size(inst, key, len); printf(" size:%lld", size); if (size) { printf(",\n values:["); print_list(inst, key, len); pline("\b \n ]"); } pline("}"); } break; case KSET: { size = get_set_size(inst, key, len); printf(" size:%lld", size); if (size) { printf(",\n values:["); print_set2(inst, key, len); pline("\b \n ]"); } pline("}"); } break; case KSSET: { size = get_sset_size(inst, key, len); printf(" size:%lld", size); if (size) { printf(",\n values:["); print_sset2(inst, key, len); pline("\b \n ]"); } pline("}"); } break; case KNONE: { FATAL("none type of key:%s", key); } break; case KUNKOWN: { FATAL("unknown type of key:%s", key); } } }