这个玩意的设计和升级降级规则都挺好理解的。个人觉得完全没有skiplist难理解,
typedef struct intset {
// 编码方式
uint32_t encoding;
// 集合包含的元素数量
uint32_t length;
// 保存元素的数组
int8_t contents[];
} intset;
数据被存储在 contents 数组中,encoding 记录了编码的方式,如果保存的元素越界,按照升级的办法扩展存储空间。
升级的设计思路还是很巧妙的,反正我记住了,我也就不想写了。
从后往前,一倍扩大。