LINUX.ORG.RU

Ищу библиотеку для работы с диапазонами

 ,


2

5

Привет, ЛОР! Мне нужна твоя помощь.

Я ищу библиотеку для работы с диапазонами. Что я хочу в ней видеть:

  • Тип «диапазон» (например, 5..45).
  • Операции над диапазонами.
  • Список диапазонов, что-то вроде {5..45, 60..65, 80..89}.
  • Операции над списком диапазонов, например, получить все пропущенные диапазоны из списка.
  • Экономия памяти, в каждом экземпляре-диапазоне должно храниться только начало и конец.

Что-то есть такое на просторах интернета? Я искал, но безуспешно.

Очень частная задача, и очень легко реализуемая. Если и найдётся, то это будет случайностью, и наверняка будет что-то для вас лишнее либо чего-то будет недоставать.

Andrey_Utkin ★★ ()

Я бы just for fun свелосипедил сам - простая и приятная задача...

AIv ★★★★★ ()
Ответ на: комментарий от anonymous_coward

В 80 символов уложится не могут, позор!

namespace interval_lib {

template<class T, class Policies>  interval<T, Policies> division_part1(const interval<T, Policies>& x, const interval<T, Policies& y, bool& b);
template<class T, class Policies>  interval<T, Policies> division_part2(const interval<T, Policies>& x, const interval<T, Policies& y, bool b = true);
template<class T, class Policies>  interval<T, Policies> multiplicative_inverse(const interval<T, Policies>& x);

template<class I>  I add(const typename I::base_type& x, const typename I::base_type& y);
template<class I>  I sub(const typename I::base_type& x, const typename I::base_type& y);
template<class I>  I mul(const typename I::base_type& x, const typename I::base_type& y);
template<class I>  I div(const typename I::base_type& x, const typename I::base_type& y);

} // namespace interval_lib
EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 2)

Возможно, тебе подойдут регулярные выражения (boost.regex).

Deathstalker ★★★★★ ()
Ответ на: комментарий от no-such-file

Сам ты валенок, subrange как переводится? Алсо ordinal types — ни разу не только integer.

Type  
  Days = (monday,tuesday,wednesday,thursday,friday,  
          saturday,sunday);
  WorkDays = monday .. friday;  
  WeekEnd = Saturday .. Sunday; 

Итого, ты не в теме, но мнение имеешь :)

slackwarrior ★★★★★ ()
Последнее исправление: slackwarrior (всего исправлений: 3)
Ответ на: комментарий от slackwarrior

subrange как переводится

В данном случае - подтип. Учи русский.

Алсо ordinal types — ни разу не только integer.

Не integer, но целое. Целое оно, знаешь ли, не только integer, а всё что счётно.

Итого, ты не в теме

Ты троллишь что ли? Не верю, что ты такой самоуверенный идиот.

no-such-file ★★★★★ ()

Правильный ответ

Boost.Icl — http://www.boost.org/doc/libs/1_62_0/libs/icl/doc/html/index.html

#include <iostream>
#include <boost/icl/interval_set.hpp>
#include <cstdint>
#include <climits>

int main()
{       using namespace std;

        boost::icl::interval_set<uint32_t> is;
        is.add(boost::icl::interval<uint32_t>::closed(0, 5));
        cout << is << endl;
        is.add(boost::icl::interval<uint32_t>::closed(10, 15));
        cout << is << endl;
        is.add(boost::icl::interval<uint32_t>::closed(5, 7));
        cout << is << endl;
        is.add(boost::icl::interval<uint32_t>::closed(12, 17));
        cout << is << endl;
        is.add(boost::icl::interval<uint32_t>::closed(6, 13));
        cout << is << endl;
        return 0;
}

Вывод:

{[0,5]}
{[0,5][10,15]}
{[0,7][10,15]}
{[0,7][10,17]}
{[0,17]}

P.S. К сожалению, меня неправомерно забанили по надуманной причине, хорошо, хоть из-под anonymous'а можно постить.

anonymous ()

Из коробки в свифте.

Deleted ()

Итак, по теме —, как я уже упоминал, есть Boost.Icl. Не стоит путать его с Boost.Range и range v3 и прочими range. Здесь идет речь несколько о разных вещах.

Но спасибо всем, кто отписался, вы натолкнули меня на нужный ход мыслей, и я смог сформулировать правильный запрос в поисковике.

MyLittleGentoo ()
Ответ на: комментарий от anonymous_coward

Оказалось близко, только ответ на вопрос топика — Boost Interval Container Library.

MyLittleGentoo ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.