zslisinrange()的实现代码
时间: 2024-05-07 12:22:55 浏览: 42
`zslisinrange()` 是 Redis 中跳跃表的一个函数,用于判断给定的分值范围是否和跳跃表中的某个节点的分值范围有交集。其实现代码如下:
```c
int zslValueGteMin(double value, zskiplist *zsl) {
return !zsl->header->forward ||
value >= zsl->header->forward->score;
}
int zslValueLteMax(double value, zskiplist *zsl) {
return !zsl->tail || value <= zsl->tail->score;
}
int zslIsInRange(zrangespec *range, zskiplist *zsl) {
double min = range->min, max = range->max;
if (range->minex) min = ceil(min);
if (range->maxex) max = floor(max);
return (min <= max) && zslValueGteMin(max,zsl) &&
zslValueLteMax(min,zsl);
}
```
其中 `zrangespec` 是一个结构体,表示一个分值范围,包括最小分值、最大分值以及是否包含最小/最大分值的标记。`zskiplist` 则是跳跃表的结构体。
函数 `zslValueGteMin()` 用于判断给定的分值是否不小于跳跃表中的最小分值;函数 `zslValueLteMax()` 用于判断给定的分值是否不大于跳跃表中的最大分值;函数 `zslIsInRange()` 则首先将最小/最大分值进行一些处理,然后判断给定的分值范围是否和跳跃表中的某个节点的分值范围有交集。