Народ, ай нид хелп!
Наконец добил черновой вариант CompositeRange<T> — штуки для операций над составными диапазонами.
Для затравки:
var range = Range.Create(1, 2, "Key1")
.ToCompositeRange()
.Union(Range.Create(5, 10, "Key2"))
.Except(Range.Create(7, 8))
.Intersect(2, 9);
AreEqual(range.ToInvariantString(), "[2..9]: { 'Key1':[2..2]; 'Key2':[5..7); 'Key2':(8..9] }");
range = range.Union(Range.Create(7, 8, "Key1"));
AreEqual(range.ToInvariantString(), "[2..9]: { 'Key1':[2..2]; 'Key2':[5..7); 'Key1':[7..8]; 'Key2':(8..9] }");
range = range
.Except(7, 8)
.Union(Range.Create(7, 8, "Key2"));
AreEqual(range.ToInvariantString(), "[2..9]: { 'Key1':[2..2]; 'Key2':[5..9] }");
Код лежит
в Experimental, тесты
рядышком.
Сразу предупреждаю — код полный отстой в смысле производительности, по аллокациям — вообще адов ад.
Это всё будет потихоньку допиливаться, пока вопрос в другом: что нравится / не нравится, чего не хватает, какие предложения/пожелания — всё вэлкам!