Description
I'm experimenting with no_panic in FFI calls which use HashTable
. The goal is to "prove" that the extern "C"
function cannot panic, which is a nice goal because it's not allowed to.
I can use HashTable::try_reserve
to avoid the panic in practice. However, that's not good enough for no_panic
; if the code for panics exists when linking, then no_panic
will cause the crate to fail to build. The problem specifically with insert_unique
is that it calls RawTable::insert
which calls self.reserve(1, hasher)
, which will panic out of necessity if allocation fails.
So, I propose add HashTable::try_insert_unique_within_capacity
which looks like:
pub fn try_insert_unique_within_capacity(
&mut self,
hash: u64,
value: T,
) -> Result<OccupiedEntry<'_, T, A>, T>
And then we remove the feature gate of Edit: reworked to be #[cfg(feature = "rustc-internal-api")]
from RawTable::insert_no_grow
, or create an equivalent method that's only pub(crate)
or something.safe
and return Result
instead.
This doesn't seem difficult at all--is there maybe a reason it doesn't already exist?