- 1
- 2
- 3
- 4
- 5
uint8_t* head = (uint8_t*) Buffer::Data(buffer);
uint8_t* tail = head + Buffer::Length(buffer) - 1;
// xor swap, just because I can
while (head < tail) *head ^= *tail, *tail ^= *head, *head ^= *tail, ++head, --tail;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+14
uint8_t* head = (uint8_t*) Buffer::Data(buffer);
uint8_t* tail = head + Buffer::Length(buffer) - 1;
// xor swap, just because I can
while (head < tail) *head ^= *tail, *tail ^= *head, *head ^= *tail, ++head, --tail;
https://github.com/bnoordhuis/node-buffertools/blob/master/buffertools.cc#L157
- Почему кот яйца лижет?
- Потому что может!
но в целом по ссылке сходил и закрыл
мерзко там всё написано, паскаль съел его мозг
А вообще извращение, конечно. Хорошо хоть, здесь не используется неблохоугодная конструкция x ^= y ^= x ^= y, которая вообще UB.
Если написать честный swap на нормальном языке (т.е. поддерживающем in out), то должно быть оптимальнее.