Нет, в нашем языке уже есть все, что нужно и добавлять туда что-либо нет необходимости :)
algent, Так и сделано в примере выше (только без сдвига диапазона влево) :)
Вот только это называется не С++, а С-с-классами :)
Ну, да. Если у нас множество четных и begin == 0x1234567, size == 1, то сразу true... :) Множество не непрерывное, а разреженное, между...
Эх... придется все-таки компилить... :) HoShiMin, В функции MaybeIntersects должно быть && (range->value <= end) Так же, раз нам экстремальные...
UbIvItS, А, ну то есть, твой мотор решает какую-то твою, не имеющую никакого отношения к ТС задачу. Ясно, понятно :)
Непонятно, чему должны быть равны M1 ,M2, min_domain, max_domain, D, tst, sub, чтобы определить принадлежность элементов множества 1100 1101 1110...
Пока я не узрел, что он вообще способен решить поставленную задачу. Больше смахивает на какую-то псевдонаучную х.ету :)
А, ну тогда понятно :)
UbIvItS, а теперь конкретные нули и единички проставь вместо переменных для множества выше, чтобы видно было, что оно работает :)
UbIvItS, Не возопят, ведь критичные к производительности модули всегда пишут на сишечке. Никакими авейтами и асинками в ядрах 3д моделлеров и не...
UbIvItS, Ну, давай, обгони мой пример по скорости. А то я вообще не понимаю, что такое "тормознутая маска" и как изменить ее принцип :) Можно...
Там в цикле надо minValue и maxValue местами поменять или условие изменить на result > 0: if (result < 0) minValue = value;...
HoShiMin, Добавь еще в начало intersects, что если mask == 0, то сразу return true.
В последнем примере, что я дал, сложность O(log2(2^N)), где N - количество нулей в маске. 64 сравнения в худшем случае для uint64_t. Вообще без...
Ну, по крайней мере, если функция вернет false, диапазоны точно не пересекаются :) Можешь оставить ее как maybe_intersects() для быстрой проверки...
HoShiMin, Я пофиксил там. Надо OR с инвертированной маской и AND с обычной.
HoShiMin, Проверка диапазонов на пересечение, это (min <= end && max >= begin), вообще-то. Это вам не расты с петонами хвалить на форумах :)...
static int sum (const int* values, int count) { int i, result; for (i=0, result=0; i<count; i++) result += values[i]; return...
А все и не нужно, достаточно экстремальные. Если у нас маска x??x???x, то x00x000x - это минимальное число в этом множестве, а x11x111x -...
Имена участников (разделяйте запятой).