Нужен вид вычислений «интервалов» - PullRequest
0 голосов
/ 12 января 2019

Мне нужна библиотека для моей программы на 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 файла, 13 Мб источников после './dist/bin/bcp числовой / интервал ~ / повышение ').

Кроме того, GNU ddrescue имеет некоторую похожую арифметику внутри, но код там не библиотека, он слишком сильно связан со спецификой приложений.

UPDATE:

Вот что я нашел на своем пути:

Контейнер для целочисленных интервалов, например RangeSet, для C ++

https://en.wikipedia.org/wiki/Interval_tree

Boost.ICL

NCBI C ++ Toolkit, CIntervalTree

...