Most or all gate methods in Qrack ultimately call `Mtrx()`, `Phase()`, or `Invert()`, or their controlled variants, at base. Hence, gate "shortcuts" like Pauli X/Y/Z, H, S, T, and others only define a constant vector of 2 or 4 complex numbers that correspond to the named gate operator and call `Mtrx()`/`Phase()`/`Invert()`. Typically, such methods would be good candidates for `inline` compilation.
This release moves these "shortcuts" out of a module and into the `QInterface` header, giving the compiler the opportunity to make them inline. Judging by the slightly increased binary size, this leads to significant additional inline method calls, as compiled. Making methods inline can have varied and counterintuitive effects on speed and binary size, but, for the increased binary size, calls to "shortcut" gates are likely a tiny bit faster and of a higher likelihood to be optimized together with other code at different scopes, by the compiler.
This release also fixes edge cases in `PhaseRootN()` variants that have been present and sub-optimal for years.