#[allow(non_upper_case_globals)]
pub(crate) const kSizeClasses: usize = 40; #[allow(non_upper_case_globals)]
pub(crate) const kMaxSmallSize: usize = 1024;
#[allow(non_camel_case_types)]
#[repr(C)]
#[derive(Debug)]
pub struct SizeClassConfig {
pub sizeOfClass: [core::ffi::c_int; kSizeClasses],
pub classForSize: [core::ffi::c_char; kMaxSmallSize + 1],
pub classCount: core::ffi::c_int,
}
const fn build_size_class_config() -> SizeClassConfig {
let mut size_of_class = [0i32; kSizeClasses];
let mut class_for_size = [-1i8 as core::ffi::c_char; kMaxSmallSize + 1];
let mut class_count = 0usize;
let mut size = 8;
while size < 64 {
size_of_class[class_count] = size;
class_count += 1;
size += 8;
}
let mut size = 64;
while size < 256 {
size_of_class[class_count] = size;
class_count += 1;
size += 16;
}
let mut size = 256;
while size < 512 {
size_of_class[class_count] = size;
class_count += 1;
size += 32;
}
let mut size = 512;
while size <= 1024 {
size_of_class[class_count] = size;
class_count += 1;
size += 64;
}
assert!(class_count <= kSizeClasses);
let mut klass = 0usize;
while klass < class_count {
class_for_size[size_of_class[klass] as usize] = klass as core::ffi::c_char;
klass += 1;
}
let mut size = kMaxSmallSize as i32 - 1;
while size >= 0 {
if (class_for_size[size as usize] as i8) < 0 {
class_for_size[size as usize] = class_for_size[size as usize + 1];
}
size -= 1;
}
SizeClassConfig {
sizeOfClass: size_of_class,
classForSize: class_for_size,
classCount: class_count as core::ffi::c_int,
}
}
#[allow(non_upper_case_globals)]
pub static kSizeClassConfig: SizeClassConfig = build_size_class_config();