1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//! AFS B-tree Node Operations
pub fn getNodeCell(node_number: u32, cell_size: u32, node_size: u32) u64 {
const nodes_per_cell = cell_size / node_size;
return node_number / nodes_per_cell;
}
pub fn getNodeOffsetInCell(node_number: u32, cell_size: u32, node_size: u32) u32 {
const nodes_per_cell = cell_size / node_size;
return (node_number % nodes_per_cell) * node_size;
}
pub fn getRecordOffset(node_buffer: [*]const u8, node_size: u32, record_index: u16) u16 {
const offset_table_start = node_size - (@as(u32, record_index) + 1) * @sizeOf(u16);
const offset_pointer: *align(1) const u16 = @ptrCast(node_buffer + offset_table_start);
return offset_pointer.*;
}
pub fn getRecordPointer(node_buffer: [*]u8, node_size: u32, record_index: u16) [*]u8 {
const offset = getRecordOffset(node_buffer, node_size, record_index);
return node_buffer + offset;
}
pub fn getRecordPointerConst(node_buffer: [*]const u8, node_size: u32, record_index: u16) [*]const u8 {
const offset = getRecordOffset(node_buffer, node_size, record_index);
return node_buffer + offset;
}
|