@@ -58,47 +58,57 @@ impl ProvenanceTable {
5858 Ok ( rv)
5959 }
6060
61- pub fn timestamp ( & self , row : ProvenanceId ) -> Option < & str > {
62- assert ! (
63- ( self . as_ref( ) . num_rows != 0 && self . as_ref( ) . timestamp_length != 0 )
64- || ( !self . as_ref( ) . timestamp. is_null( )
65- && !self . as_ref( ) . timestamp_offset. is_null( ) )
66- ) ;
61+ fn timestamp_column ( & self ) -> & [ u8 ] {
62+ unsafe {
63+ std:: slice:: from_raw_parts (
64+ self . as_ref ( ) . timestamp . cast :: < u8 > ( ) ,
65+ self . as_ref ( ) . timestamp_length as usize ,
66+ )
67+ }
68+ }
6769
68- // SAFETY: the previous assert checks the safety
69- // requirements
70- let timestamp_slice = unsafe {
71- super :: tsk_ragged_column_access (
72- row,
73- self . as_ref ( ) . timestamp ,
74- self . as_ref ( ) . num_rows ,
70+ fn timestamp_offset_column_raw ( & self ) -> & [ tsk_size_t ] {
71+ unsafe {
72+ std:: slice:: from_raw_parts (
7573 self . as_ref ( ) . timestamp_offset ,
76- self . as_ref ( ) . timestamp_length ,
74+ self . as_ref ( ) . num_rows as usize ,
7775 )
78- } ;
76+ }
77+ }
78+
79+ pub fn timestamp ( & self , row : ProvenanceId ) -> Option < & str > {
80+ let timestamp_slice = super :: tsk_ragged_column_access (
81+ row,
82+ self . timestamp_column ( ) ,
83+ self . timestamp_offset_column_raw ( ) ,
84+ ) ;
7985 match timestamp_slice {
8086 Some ( tstamp) => std:: str:: from_utf8 ( tstamp) . ok ( ) ,
8187 None => None ,
8288 }
8389 }
8490
91+ fn record_column ( & self ) -> & [ u8 ] {
92+ unsafe {
93+ std:: slice:: from_raw_parts (
94+ self . as_ref ( ) . record . cast :: < u8 > ( ) ,
95+ self . as_ref ( ) . record_length as usize ,
96+ )
97+ }
98+ }
99+
100+ fn record_offset_column_raw ( & self ) -> & [ tsk_size_t ] {
101+ unsafe {
102+ std:: slice:: from_raw_parts ( self . as_ref ( ) . record_offset , self . as_ref ( ) . num_rows as usize )
103+ }
104+ }
105+
85106 pub fn record ( & self , row : ProvenanceId ) -> Option < & str > {
86- assert ! (
87- ( self . as_ref( ) . num_rows != 0 && self . as_ref( ) . record_length != 0 )
88- || ( !self . as_ref( ) . record. is_null( ) && !self . as_ref( ) . record_offset. is_null( ) )
107+ let record_slice = super :: tsk_ragged_column_access (
108+ row,
109+ self . record_column ( ) ,
110+ self . record_offset_column_raw ( ) ,
89111 ) ;
90-
91- // SAFETY: the previous assert checks the safety
92- // requirements
93- let record_slice = unsafe {
94- super :: tsk_ragged_column_access (
95- row,
96- self . as_ref ( ) . record ,
97- self . as_ref ( ) . num_rows ,
98- self . as_ref ( ) . record_offset ,
99- self . as_ref ( ) . record_length ,
100- )
101- } ;
102112 match record_slice {
103113 Some ( rec) => std:: str:: from_utf8 ( rec) . ok ( ) ,
104114 None => None ,
0 commit comments