(&mut self, v: &[T])
| 139 | impl<T: Encode> Encoder<[T]> for VecEncoder<T> { |
| 140 | #[inline(always)] |
| 141 | fn encode(&mut self, v: &[T]) { |
| 142 | let n = v.len(); |
| 143 | self.lengths.encode(&n); |
| 144 | |
| 145 | if let Some(primitive) = self.elements.as_primitive() { |
| 146 | primitive.reserve(n); |
| 147 | unsafe { |
| 148 | let ptr = primitive.end_ptr(); |
| 149 | v.as_ptr().copy_to_nonoverlapping(ptr, n); |
| 150 | primitive.set_end_ptr(ptr.add(n)); |
| 151 | } |
| 152 | } else if let Some(n) = NonZeroUsize::new(n) { |
| 153 | self.elements.reserve(n); |
| 154 | // Uses chunks to keep everything in the CPU cache. TODO pick optimal chunk size. |
| 155 | for chunk in v.chunks(MAX_VECTORED_CHUNK) { |
| 156 | self.elements.encode_vectored(chunk.iter()); |
| 157 | } |
| 158 | } |
| 159 | } |
| 160 | |
| 161 | #[inline(always)] |
| 162 | fn encode_vectored<'a>(&mut self, i: impl Iterator<Item = &'a [T]> + Clone) |
no test coverage detected