mirror of
https://github.com/php/php-src.git
synced 2026-03-24 08:12:21 +01:00
* random: Make Mt19937's `mode` field an enum * random: Reorder the `php_random_status_state_mt19937` struct Empirical testing did not show any differences in performance, but it makes sense to me to put the `count` field (which is accessed for every invocation of Mt19937) at the beginning of the struct, keeping it near the values from the state array that are returned first, resulting in only a single cache line load if only a small amount of numbers are requested. It naturally follows to also put the `mode` field there and move the humongous state array to the end. * random: Remove the `MT_N` constant `MT_N` is an awfully generic name that bleeds into every file including `php_random.h`. As it's an implementation detail, remove it entirely to keep `php_random.h` clean. To prevent the state struct from diverging from the implementation, the size of the state vector is statically verified. Furthermore there are phpt tests verifying the Mt19937 output across a reload, revealing when the state vector is reloaded too early or too late.