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

Method encode_vectored_max_len

src/derive/vec.rs:80–120  ·  view source on GitHub ↗
(
        &mut self,
        i: I,
    )

Source from the content-addressed store, hash-verified

78 /// Copy fixed size slices. Much faster than memcpy.
79 #[inline(never)]
80 fn encode_vectored_max_len<'a, I: Iterator<Item = &'a [T]> + Clone, const N: usize>(
81 &mut self,
82 i: I,
83 ) where
84 T: 'a,
85 {
86 unsafe {
87 let primitives = self.elements.as_primitive().unwrap();
88 primitives.reserve(i.size_hint().1.unwrap() * N);
89
90 let mut dst = primitives.end_ptr();
91 if self.lengths.encode_vectored_max_len::<_, N>(
92 i.clone(),
93 #[inline(always)]
94 |s| {
95 let src = s.as_ptr();
96 let n = s.len();
97 // Safety: encode_vectored_max_len skips len == 0 and ensures len <= N.
98 // `dst` has enough space for `[T; N]` because we've reserved size_hint * N.
99 unsafe_wild_copy!([T; N], src, dst, n);
100 dst = dst.add(n);
101 },
102 ) {
103 // Use fallback for impls that copy more than 64 bytes.
104 let size = std::mem::size_of::<T>();
105 self.vectored_impl = std::mem::transmute(match N {
106 1 if size <= 32 => Self::encode_vectored_max_len::<I, 2>,
107 2 if size <= 16 => Self::encode_vectored_max_len::<I, 4>,
108 4 if size <= 8 => Self::encode_vectored_max_len::<I, 8>,
109 8 if size <= 4 => Self::encode_vectored_max_len::<I, 16>,
110 16 if size <= 2 => Self::encode_vectored_max_len::<I, 32>,
111 32 if size <= 1 => Self::encode_vectored_max_len::<I, 64>,
112 _ => Self::encode_vectored_fallback::<I>,
113 } as fn(&mut Self, I));
114 let f: fn(&mut Self, I) = std::mem::transmute(self.vectored_impl);
115 f(self, i);
116 return;
117 }
118 primitives.set_end_ptr(dst);
119 }
120 }
121
122 /// Fallback for when length > [`Self::encode_vectored_max_len`]'s max_len.
123 #[inline(never)]

Callers

nothing calls this directly

Calls 8

fFunction · 0.85
size_hintMethod · 0.80
end_ptrMethod · 0.80
as_ptrMethod · 0.80
set_end_ptrMethod · 0.80
as_primitiveMethod · 0.45
reserveMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected