我的C ++程序需要一个库。 但是问题是,我不知道我想要的这种数据类型的名称。
我有NPAPI插件(我知道此API已弃用,并已从现代浏览器中删除),该插件可发布到服务器 HTTP范围请求。请求是异步的,数据可能以任何顺序以任何块大小发送。
所以我需要跟踪我已经从服务器请求的范围。
例如,如果最初我请求字节[10-20](包括),然后我请求[30-40]数据类型,则我需要将其保持为两个间隔:
[10-20],[30-40]
但是,如果我要求[21-29]甚至[15-35],则应将其合并为一个间隔:
[10-20],[30-40] + [15-35] = [10-40]
当请求的块到达时,我也需要减去:
[10-40] - [20-30] = [10-19],[31-40]
(已请求-到达=我们还在等待中)
我看过 boost :: numeric :: intervals 库,但乍一看它对于这个任务来说太大了(1583个文件,'。/ dist / bin /之后的13 Mb源代码bcp数字/间隔〜/ boost')。
此外, GNU ddrescue 里面也有一些类似的算法,但是代码不是那里的库,它与应用程序的详细信息耦合太多。
更新:
这是我在途中发现的东西:
A container for integer intervals, such as RangeSet, for C++
https://en.wikipedia.org/wiki/Interval_tree
Boost.ICL
NCBI C ++工具包CIntervalTree