use symbolic_common::DebugId;
use watto::Pod;
const PPDBCACHE_MAGIC_BYTES: [u8; 4] = *b"PDBC";
pub(crate) const PPDBCACHE_MAGIC: u32 = u32::from_le_bytes(PPDBCACHE_MAGIC_BYTES);
pub(crate) const PPDBCACHE_MAGIC_FLIPPED: u32 = PPDBCACHE_MAGIC.swap_bytes();
#[derive(Debug, Clone, PartialEq, Eq)]
#[repr(C)]
pub(crate) struct Header {
pub(crate) magic: u32,
pub(crate) version: u32,
pub(crate) pdb_id: DebugId,
pub(crate) num_files: u32,
pub(crate) num_ranges: u32,
pub(crate) string_bytes: u32,
pub(crate) _reserved: [u8; 16],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(C)]
pub(crate) struct SourceLocation {
pub(crate) line: u32,
pub(crate) file_idx: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(C)]
pub(crate) struct Range {
pub(crate) func_idx: u32,
pub(crate) il_offset: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(C)]
pub(crate) struct File {
pub(crate) name_offset: u32,
pub(crate) lang: u32,
}
unsafe impl Pod for Header {}
unsafe impl Pod for SourceLocation {}
unsafe impl Pod for Range {}
unsafe impl Pod for File {}
#[cfg(test)]
mod tests {
use std::mem;
use super::*;
#[test]
fn test_sizeof() {
assert_eq!(mem::size_of::<Header>(), 68);
assert_eq!(mem::align_of::<Header>(), 4);
assert_eq!(mem::size_of::<File>(), 8);
assert_eq!(mem::align_of::<File>(), 4);
assert_eq!(mem::size_of::<SourceLocation>(), 8);
assert_eq!(mem::align_of::<SourceLocation>(), 4);
assert_eq!(mem::size_of::<Range>(), 8);
assert_eq!(mem::align_of::<Range>(), 4);
}
}