MCPcopy Create free account
hub / github.com/SoftbearStudios/bitcode / inner

Method inner

src/buffer.rs:51–71  ·  view source on GitHub ↗
(me: &mut Registry, type_id: TypeId, create: fn() -> ErasedBox)

Source from the content-addressed store, hash-verified

49 // Use non-generic function to avoid monomorphization.
50 #[inline(never)]
51 fn inner(me: &mut Registry, type_id: TypeId, create: fn() -> ErasedBox) -> *mut () {
52 // Use sorted Vec + binary search because we expect fewer insertions than lookups.
53 // We could use a HashMap, but that seems like overkill.
54 match me.0.binary_search_by_key(&type_id, |(k, _)| *k) {
55 Ok(i) => me.0[i].1.ptr,
56 Err(i) => {
57 #[cold]
58 #[inline(never)]
59 fn cold(
60 me: &mut Registry,
61 i: usize,
62 type_id: TypeId,
63 create: fn() -> ErasedBox,
64 ) -> *mut () {
65 me.0.insert(i, (type_id, create()));
66 me.0[i].1.ptr
67 }
68 cold(me, i, type_id, create)
69 }
70 }
71 }
72 let erased_ptr = inner(self, non_static_type_id::<T>(), || {
73 // Safety: Caller upholds any lifetime requirements.
74 ErasedBox::new(T::default())

Callers

nothing calls this directly

Calls 1

coldFunction · 0.85

Tested by

no test coverage detected