История изменений
Исправление alysnix, (текущая версия) :
fn qspCRC(data: &[u8]) -> i32 {
data.iter().fold(0, |crc, b| {
let tbl = qspCRCTable[((crc & 0xFF) as u8 ^ b) as usize];
(tbl as i32^crc>>8) ^ 0xD202EF8Du32 as i32
})
}
жуть ваще. для простых суммирований массива вводится «итерация» как понятие и fold - как типа «свертка». в алгоритм влез еще какой-то неявный b, который определили волшебным образом вместе с crc. кстати, а какой тип у crc тут?
сишный код(при правильной записи канеш) будет и лишен всяких мусорных доп. понятий и определять все вполне точно.
считать такие хеши надо максимально быстро, а все ваши итераторы и фолды наверняка насыпают много доп. мусора. сравните выхлоп сишного кода и растового.
https://godbolt.org/z/WsKb799jr
там кстати если поставить язык rust, должен быть ваш код. но не уверен. не знак как их ссылки работают.
Исходная версия alysnix, :
жуть ваще. для простых суммирований массива вводится «итерация» как понятие и fold - как типа «свертка». в алгоритм влез еще какой-то неявный b, который определили волшебным образом вместе с crc. кстати, а какой тип у crc тут?
сишный код(при правильной записи канеш) будет и лишен всяких мусорных доп. понятий и определять все вполне точно.
считать такие хеши надо максимально быстро, а все ваши итераторы и фолды наверняка насыпают много доп. мусора. сравните выхлоп сишного кода и растового.
https://godbolt.org/z/WsKb799jr
там кстати если поставить язык rust, должен быть ваш код. но не уверен. не знак как их ссылки работают.