use bytemuck::AnyBitPattern;
use std::os::raw::{c_int, c_uint};
use crate::{
ptr::{Offset, PtrOffset},
CharSetLeaf,
};
#[derive(AnyBitPattern, Copy, Clone, Debug)]
#[repr(C)]
pub struct CacheData {
pub magic: c_uint,
pub version: c_int,
pub size: isize,
pub dir: Offset<u8>,
pub dirs: Offset<Offset<u8>>,
pub dirs_count: c_int,
pub set: Offset<FontSetData>,
pub checksum: c_int,
pub checksum_nano: c_int,
}
#[derive(AnyBitPattern, Copy, Clone, Debug)]
#[repr(C)]
pub struct FontSetData {
pub nfont: c_int,
_sfont: c_int,
pub fonts: PtrOffset<PtrOffset<PatternData>>,
}
#[derive(AnyBitPattern, Copy, Clone, Debug)]
#[repr(C)]
pub struct PatternData {
pub num: c_int,
_size: c_int,
pub elts_offset: Offset<PatternEltData>,
ref_count: c_int,
}
#[derive(AnyBitPattern, Copy, Clone, Debug)]
#[repr(C)]
pub struct PatternEltData {
pub object: c_int,
pub values: PtrOffset<ValueListData>,
}
#[derive(AnyBitPattern, Copy, Clone, Debug)]
#[repr(C)]
pub struct ValueListData {
pub next: PtrOffset<ValueListData>,
pub value: ValueData,
binding: c_int,
}
#[derive(AnyBitPattern, Copy, Clone)]
#[repr(C)]
pub struct ValueData {
pub ty: c_int,
pub val: ValueUnion,
}
impl std::fmt::Debug for ValueData {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_fmt(format_args!("{}", self.ty))
}
}
#[repr(C)]
#[derive(AnyBitPattern, Copy, Clone)]
#[allow(missing_docs)]
pub union ValueUnion {
pub s: PtrOffset<u8>,
pub i: c_int,
pub b: c_int,
pub d: f64,
pub m: PtrOffset<()>, pub c: PtrOffset<CharSetData>,
pub f: PtrOffset<()>,
pub l: PtrOffset<()>, pub r: PtrOffset<()>, }
#[derive(AnyBitPattern, Copy, Clone, Debug)]
#[repr(C)]
pub struct CharSetData {
ref_count: c_int,
pub num: c_int,
pub leaves: Offset<Offset<CharSetLeaf>>,
pub numbers: Offset<u16>,
}