| 37 | /// Layout: [flags:8 | pos:56][change_id:64][introduced_by:64] |
| 38 | #[inline] |
| 39 | pub fn serialize_edge(edge: &SerializedGraphEdge) -> [u8; 24] { |
| 40 | let mut bytes = [0u8; 24]; |
| 41 | let dest = edge.dest(); |
| 42 | let flag = edge.flag(); |
| 43 | let introduced_by = edge.introduced_by(); |
| 44 | |
| 45 | // Pack flag into high byte of first u64, position in low 56 bits |
| 46 | let flag_and_pos = ((flag.bits() as u64) << 56) | (dest.pos.get() & ((1 << 56) - 1)); |
| 47 | bytes[0..8].copy_from_slice(&flag_and_pos.to_le_bytes()); |
| 48 | bytes[8..16].copy_from_slice(&dest.change.get().to_le_bytes()); |
| 49 | bytes[16..24].copy_from_slice(&introduced_by.get().to_le_bytes()); |
| 50 | bytes |
| 51 | } |
| 52 | |
| 53 | /// Deserialize bytes to a SerializedGraphEdge |
| 54 | #[inline] |