Changed `*mut ...` to `Option<NonNull<...>>`
Instead of a raw pointer use a combination of Option and NonNull which is exactly the same size as a raw pointer, expect you cannot access a nullpointer by accident. The assembly is completly identical on the hot path (the one that does not procude a panic). Only one move more on the cold path (because of the unwrap message (?).