File tree Expand file tree Collapse file tree 2 files changed +17
-2
lines changed
Expand file tree Collapse file tree 2 files changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -590,7 +590,7 @@ impl NodeTable {
590590 ///
591591 /// * `Some(Ok(T))` if `row` is valid and decoding succeeded.
592592 /// * `Some(Err(_))` if `row` is not valid and decoding failed.
593- /// * `None` if `row` is not valid.
593+ /// * `None` if `row` is not valid or the row has no metadata .
594594 ///
595595 /// # Errors
596596 ///
@@ -604,7 +604,7 @@ impl NodeTable {
604604 & self ,
605605 row : NodeId ,
606606 ) -> Option < Result < T , TskitError > > {
607- let buffer = self . raw_metadata ( row) ?;
607+ let buffer = self . table_ . raw_metadata ( row) . ok ( ) ? ?;
608608 Some ( decode_metadata_row ! ( T , buffer) . map_err ( |e| e. into ( ) ) )
609609 }
610610
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ use super::bindings::tsk_node_table_add_row;
44use super :: bindings:: tsk_node_table_clear;
55use super :: bindings:: tsk_node_table_init;
66use super :: bindings:: tsk_node_table_t;
7+ use super :: newtypes:: NodeId ;
78use super :: tskbox:: TskBox ;
89use super :: TskitError ;
910
@@ -82,6 +83,20 @@ impl NodeTable {
8283 code => Err ( TskitError :: ErrorCode { code } ) ,
8384 }
8485 }
86+
87+ pub fn raw_metadata ( & self , row : NodeId ) -> Result < Option < & [ u8 ] > , TskitError > {
88+ if row. is_null ( ) || row. as_usize ( ) >= self . as_ref ( ) . num_rows . try_into ( ) . unwrap ( ) {
89+ Err ( TskitError :: IndexError )
90+ } else {
91+ Ok ( super :: tsk_ragged_column_access (
92+ row,
93+ self . as_ref ( ) . metadata ,
94+ self . as_ref ( ) . metadata_length ,
95+ self . as_ref ( ) . metadata_offset ,
96+ self . as_ref ( ) . num_rows ,
97+ ) )
98+ }
99+ }
85100}
86101
87102impl Default for NodeTable {
You can’t perform that action at this time.
0 commit comments