Decode a DimDict from bytes previously encoded by `encode_coord_axis_rle`.
(data: &[u8], pos: &mut usize)
| 95 | |
| 96 | /// Decode a DimDict from bytes previously encoded by `encode_coord_axis_rle`. |
| 97 | pub fn decode_coord_axis_rle(data: &[u8], pos: &mut usize) -> ArrayResult<DimDict> { |
| 98 | if *pos + 4 > data.len() { |
| 99 | return Err(ArrayError::SegmentCorruption { |
| 100 | detail: "rle coord: truncated mode marker".into(), |
| 101 | }); |
| 102 | } |
| 103 | let first_u32 = u32::from_le_bytes( |
| 104 | data[*pos..*pos + 4] |
| 105 | .try_into() |
| 106 | .expect("invariant: bounds check at line 96 guarantees 4 bytes available"), |
| 107 | ); |
| 108 | |
| 109 | if first_u32 == RLE_MARKER { |
| 110 | *pos += 4; |
| 111 | decode_rle(data, pos) |
| 112 | } else { |
| 113 | // Delta mode — don't advance pos; coord_delta reads dict_count first. |
| 114 | decode_coord_axis(data, pos) |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | fn decode_rle(data: &[u8], pos: &mut usize) -> ArrayResult<DimDict> { |
| 119 | if *pos + 4 > data.len() { |
no test coverage detected