Мне нужна библиотека для моей программы на 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