beatsaber-hook
beatsaber-hook copied to clipboard
Adapt reference wrappers for `in`/`out`
So currently, we use ByRef<T> which works fine for ref/out but in the case that it is in passed, we don't need it to be T but rather const T. While this isn't strictly necessary, it could be nice since it's obvious we can or cannot modify T.
Hopefully, there can be an approach that also does not affect method resolution forcing you to choose between ConstRef and MutRef (coining these names today)
To add to this, out should ALSO have its own wrapper type, one that disallows modification until it is emplaced with a value (specifically useful for cases when calling orig hooks before or after and to avoid any invalid behavior).
As far as allowing const T in ByRef goes, it MAY simply work as-is, but it might make more sense to make another wrapper type over that as well-- namely, these wrapper types should be ByRef<T> for all intents and purposes, except have overridden behavior as far as assignment and replacement is concerned.