bucket_map: Length must be 1 if including header in get_slice() (#31445)

This commit is contained in:
Brooks 2023-05-03 10:44:58 -04:00 committed by GitHub
parent a9515e9269
commit 9a4618a049
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 2 deletions

View File

@ -92,9 +92,9 @@ impl<O: BucketOccupied> Drop for BucketStorage<O> {
} }
} }
#[allow(dead_code)] #[derive(Debug, Eq, PartialEq, Copy, Clone)]
pub(crate) enum IncludeHeader { pub(crate) enum IncludeHeader {
/// caller wants header /// caller wants header included
Header, Header,
/// caller wants header skipped /// caller wants header skipped
NoHeader, NoHeader,
@ -290,6 +290,10 @@ impl<O: BucketOccupied> BucketStorage<O> {
} }
pub(crate) fn get_slice<T>(&self, ix: u64, len: u64, header: IncludeHeader) -> &[T] { pub(crate) fn get_slice<T>(&self, ix: u64, len: u64, header: IncludeHeader) -> &[T] {
// If the caller is including the header, then `len` *must* be 1
debug_assert!(
(header == IncludeHeader::NoHeader) || (header == IncludeHeader::Header && len == 1)
);
let start = self.get_start_offset(ix, header); let start = self.get_start_offset(ix, header);
let slice = { let slice = {
let size = std::mem::size_of::<T>() * len as usize; let size = std::mem::size_of::<T>() * len as usize;
@ -311,6 +315,10 @@ impl<O: BucketOccupied> BucketStorage<O> {
len: u64, len: u64,
header: IncludeHeader, header: IncludeHeader,
) -> &mut [T] { ) -> &mut [T] {
// If the caller is including the header, then `len` *must* be 1
debug_assert!(
(header == IncludeHeader::NoHeader) || (header == IncludeHeader::Header && len == 1)
);
let start = self.get_start_offset(ix, header); let start = self.get_start_offset(ix, header);
let slice = { let slice = {
let size = std::mem::size_of::<T>() * len as usize; let size = std::mem::size_of::<T>() * len as usize;