MCPcopy Create free account
hub / github.com/cosdata/cosdata / serialize

Method serialize

src/models/serializer/tree_map/node.rs:17–87  ·  view source on GitHub ↗
(
        &self,
        dim_bufman: &BufferManager,
        data_bufmans: &BufferManagerFactory<VersionNumber>,
        cursor: u64,
    )

Source from the content-addressed store, hash-verified

15
16impl<T: SimpleSerialize> TreeMapSerialize for TreeMapNode<T> {
17 fn serialize(
18 &self,
19 dim_bufman: &BufferManager,
20 data_bufmans: &BufferManagerFactory<VersionNumber>,
21 cursor: u64,
22 ) -> Result<u32, BufIoError> {
23 let offset_read_guard = self.offset.read();
24 if let Some(offset) = *offset_read_guard {
25 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 2)?;
26 for (idx, child) in self.children.items.iter().enumerate() {
27 let opt_child = unsafe { child.load(Ordering::Relaxed).as_ref() };
28 let Some(child) = opt_child else {
29 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 2 + (idx as u64 * 4))?;
30 dim_bufman.update_u32_with_cursor(cursor, u32::MAX)?;
31 continue;
32 };
33 let child_offset = child.serialize(dim_bufman, data_bufmans, cursor)?;
34 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 2 + (idx as u64 * 4))?;
35 dim_bufman.update_u32_with_cursor(cursor, child_offset)?;
36 }
37
38 if self.dirty.swap(false, Ordering::Relaxed) {
39 let quotient_offset = self.quotients.serialize(dim_bufman, data_bufmans, cursor)?;
40 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 34)?;
41 dim_bufman.update_u32_with_cursor(cursor, quotient_offset)?;
42 }
43
44 return Ok(offset.0);
45 }
46 drop(offset_read_guard);
47 let mut offset_write_guard = self.offset.write();
48 if let Some(offset) = *offset_write_guard {
49 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 2)?;
50 for (idx, child) in self.children.items.iter().enumerate() {
51 let opt_child = unsafe { child.load(Ordering::Relaxed).as_ref() };
52 let Some(child) = opt_child else {
53 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 2 + (idx as u64 * 4))?;
54 dim_bufman.update_u32_with_cursor(cursor, u32::MAX)?;
55 continue;
56 };
57 let child_offset = child.serialize(dim_bufman, data_bufmans, cursor)?;
58 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 2 + (idx as u64 * 4))?;
59 dim_bufman.update_u32_with_cursor(cursor, child_offset)?;
60 }
61
62 if self.dirty.swap(false, Ordering::Relaxed) {
63 let quotient_offset = self.quotients.serialize(dim_bufman, data_bufmans, cursor)?;
64 dim_bufman.seek_with_cursor(cursor, offset.0 as u64 + 34)?;
65 dim_bufman.update_u32_with_cursor(cursor, quotient_offset)?;
66 }
67
68 return Ok(offset.0);
69 }
70 let mut buf = Vec::with_capacity(38);
71 buf.extend(self.node_idx.to_le_bytes());
72 for child in &self.children.items {
73 let opt_child = unsafe { child.load(Ordering::Relaxed).as_ref() };
74 let Some(child) = opt_child else {

Calls 7

FileOffsetClass · 0.85
seek_with_cursorMethod · 0.80
loadMethod · 0.80
write_to_end_of_fileMethod · 0.80
readMethod · 0.45
iterMethod · 0.45