| 18 | /// Layout: [flags:8 | pos:56][change_id:64][introduced_by:64] |
| 19 | #[inline] |
| 20 | pub fn serialize_edge(edge: &SerializedGraphEdge) -> [u8; 24] { |
| 21 | let mut bytes = [0u8; 24]; |
| 22 | let dest = edge.dest(); |
| 23 | let flag = edge.flag(); |
| 24 | let introduced_by = edge.introduced_by(); |
| 25 | |
| 26 | // Pack flag into high byte of first u64, position in low 56 bits |
| 27 | let flag_and_pos = ((flag.bits() as u64) << 56) | (dest.pos.get() & ((1 << 56) - 1)); |
| 28 | bytes[0..8].copy_from_slice(&flag_and_pos.to_le_bytes()); |
| 29 | bytes[8..16].copy_from_slice(&dest.change.get().to_le_bytes()); |
| 30 | bytes[16..24].copy_from_slice(&introduced_by.get().to_le_bytes()); |
| 31 | bytes |
| 32 | } |
| 33 | |
| 34 | /// Deserialize bytes to a SerializedGraphEdge |
| 35 | #[inline] |