Вы можете легко достичь этого, используя AWS CloudFront. Используйте поведения, чтобы выбрать источник на основе пути. CloudFront имеет встроенную интеграцию с S3.
Если Вы волнуетесь по поводу плохо предсказанных условных выражений, замедляющих конвейер Вашего ЦП, Вы могли бы использовать это:
int remaining = (end - start) + (-((int) (end <= start)) & bufferSize);
Но это, вероятно, будет преждевременной оптимизацией (если Вы действительно не идентифицировали это как горячую точку). Придерживайтесь своей текущей техники, которая намного более читаема.
Хм....
int remaining = (end - start + bufferSize) % bufferSize;
13 маркеров, я побеждаю?
Согласно Стандарту C++, разделите 5.6, абзац 4:
Двоичный файл / оператор приводит к частному, и двоичный оператор % приводит к остатку от подразделения первого выражения вторым. Если второй операнд / или % является нулем, поведение не определено; иначе (a/b) *b + a%b равен a. Если оба операнда являются неотрицательными затем, остаток является неотрицательным; в противном случае знак остатка определяется реализацией.
Сноска предполагает, что округление частного по направлению к нулю предпочтено, который оставил бы остаток отрицательным.
Поэтому (end - start) % bufferSize
подходы не работают надежно. C++ не имеет арифметики в остаточных классах (кроме смысла предлагаемой неподписанными целочисленными типами).
Подход, рекомендуемый j_random_hacker, отличается, и выглядит хорошим, но я не знаю, что это - любое фактическое улучшение простоты или скорости. Преобразование булевской переменной к интервалу оригинально, но требует умственного парсинга, и что игра могла быть более дорогой, чем использование?: в зависимости от компилятора и машины.
Я думаю, что у Вас есть самая простая и лучшая версия тут же, и я не изменил бы ее.
Потеряйте условное выражение:
int remaining = (end + bufferSize - start - 1) % bufferSize + 1
Править: -1
и +1
для случая когда end == start
. В этом случае этот метод предположит, что буфер пуст. В зависимости от определенной реализации Вашего буфера Вы, возможно, должны скорректировать их для предотвращения off-1 ситуации.