https://mp.weixin.qq.com/s/Sf0owQxWzxacVvykJZ5oTQ
介绍TransferSizes的实现。
1. 基本定义
从min到max的闭合区间:[min, max]
判断条件:
a. min和max为2的幂;
b. min <= max;
c. min和max为非负整数;
d. min和max必须同时为0;
2. none
因为min和max必须同时为0,所以只需要判断min是否为0即可:
3. contains
判断this是否包含x,即x落在this的范围内:
4. containsLg
判断this是否包含2^x。
5. intersect
计算this和x的交集。
6. 伴生对象
a. 构造方法:min = max = x;
b. none对象:min = max = 0;
c. asBool:x是否为空;
7. 附录
TransferSizes:
// An potentially empty inclusive range of 2-powers [min, max] (in bytes)
TransferSizes(min: Int, max: Int)
{
(x, x)
)
)
)
)
)
0
(x) && min <= x && x <= max
<< x)
) =
)
(min)) === x }
(max)) }
contains(x: TransferSizes) = x.none || (min <= x.min && x.max <= max)
intersect(x: TransferSizes) =
none
(max, x.max))
.format(min, max)
}
TransferSizes {
TransferSizes(x)
)
asBool(x: TransferSizes) = !x.none
}