Skip to content

Commit ce51952

Browse files
committed
refactor: make low level ragged access fns private to sys
1 parent 42a2305 commit ce51952

19 files changed

+187
-186
lines changed

src/_macros.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -65,27 +65,6 @@ macro_rules! handle_metadata_return {
6565
};
6666
}
6767

68-
macro_rules! raw_metadata_getter_for_tables {
69-
($idtype: ty) => {
70-
fn raw_metadata<I: Into<$idtype>>(&self, row: I) -> Option<&[u8]> {
71-
assert!(
72-
(self.num_rows() == 0 && self.as_ref().metadata_length == 0)
73-
|| (!self.as_ref().metadata.is_null()
74-
&& !self.as_ref().metadata_offset.is_null())
75-
);
76-
unsafe {
77-
$crate::sys::tsk_ragged_column_access::<'_, u8, $idtype, _, _>(
78-
row.into(),
79-
self.as_ref().metadata,
80-
self.num_rows(),
81-
self.as_ref().metadata_offset,
82-
self.as_ref().metadata_length,
83-
)
84-
}
85-
}
86-
};
87-
}
88-
8968
macro_rules! row_lending_iterator_get {
9069
() => {
9170
fn get(&self) -> Option<&Self::Item> {

src/edge_table.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn make_edge_table_row(table: &EdgeTable, pos: tsk_id_t) -> Option<EdgeTableRow>
3636
right: table.right(pos)?,
3737
parent: table.parent(pos)?,
3838
child: table.child(pos)?,
39-
metadata: table.raw_metadata(pos).map(|m| m.to_vec()),
39+
metadata: table.table_.raw_metadata(pos).map(|m| m.to_vec()),
4040
})
4141
}
4242

@@ -135,7 +135,7 @@ impl streaming_iterator::StreamingIterator for EdgeTableRowView<'_> {
135135
self.right = self.table.right(self.id).unwrap_or_else(|| f64::NAN.into());
136136
self.parent = self.table.parent(self.id).unwrap_or(NodeId::NULL);
137137
self.child = self.table.child(self.id).unwrap_or(NodeId::NULL);
138-
self.metadata = self.table.raw_metadata(self.id);
138+
self.metadata = self.table.table_.raw_metadata(self.id);
139139
}
140140
}
141141

@@ -214,8 +214,6 @@ impl EdgeTable {
214214
self.as_ref().num_rows.into()
215215
}
216216

217-
raw_metadata_getter_for_tables!(EdgeId);
218-
219217
/// Return the ``parent`` value from row ``row`` of the table.
220218
///
221219
/// # Returns
@@ -276,7 +274,7 @@ impl EdgeTable {
276274
&self,
277275
row: impl Into<EdgeId>,
278276
) -> Option<Result<T, TskitError>> {
279-
let buffer = self.raw_metadata(row)?;
277+
let buffer = self.table_.raw_metadata(row)?;
280278
Some(decode_metadata_row!(T, buffer).map_err(|e| e.into()))
281279
}
282280

@@ -323,7 +321,7 @@ impl EdgeTable {
323321
right: self.right(r)?,
324322
parent: self.parent(r)?,
325323
child: self.child(r)?,
326-
metadata: self.raw_metadata(r.into()),
324+
metadata: self.table_.raw_metadata(r.into()),
327325
};
328326
Some(view)
329327
}

src/individual_table.rs

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ impl streaming_iterator::StreamingIterator for IndividualTableRowView<'_> {
9292
self.flags = self.table.flags(self.id).unwrap_or_else(|| 0.into());
9393
self.location = self.table.location(self.id);
9494
self.parents = self.table.parents(self.id);
95-
self.metadata = self.table.raw_metadata(self.id);
95+
self.metadata = self.table.table_.raw_metadata(self.id);
9696
}
9797
}
9898

@@ -154,7 +154,7 @@ fn make_individual_table_row(table: &IndividualTable, pos: tsk_id_t) -> Option<I
154154
flags: table.flags(pos)?,
155155
location: table.location(pos).map(|s| s.to_vec()),
156156
parents: table.parents(pos).map(|s| s.to_vec()),
157-
metadata: table.raw_metadata(pos).map(|m| m.to_vec()),
157+
metadata: table.table_.raw_metadata(pos).map(|m| m.to_vec()),
158158
})
159159
}
160160

@@ -195,8 +195,6 @@ impl IndividualTable {
195195
self.table_.as_ref()
196196
}
197197

198-
raw_metadata_getter_for_tables!(IndividualId);
199-
200198
/// Return the number of rows
201199
pub fn num_rows(&self) -> crate::SizeType {
202200
self.as_ref().num_rows.into()
@@ -219,19 +217,7 @@ impl IndividualTable {
219217
/// * `Some(location)` if `row` is valid.
220218
/// * `None` otherwise.
221219
pub fn location<I: Into<IndividualId> + Copy>(&self, row: I) -> Option<&[Location]> {
222-
assert!(
223-
(self.num_rows() == 0 && self.as_ref().location_length == 0)
224-
|| (!self.as_ref().location.is_null() && !self.as_ref().location_offset.is_null())
225-
);
226-
unsafe {
227-
sys::tsk_ragged_column_access(
228-
row.into(),
229-
self.as_ref().location,
230-
self.num_rows(),
231-
self.as_ref().location_offset,
232-
self.as_ref().location_length,
233-
)
234-
}
220+
self.table_.location(row.into())
235221
}
236222

237223
/// Return the parents for a given row.
@@ -241,19 +227,7 @@ impl IndividualTable {
241227
/// * `Some(parents)` if `row` is valid.
242228
/// * `None` otherwise.
243229
pub fn parents<I: Into<IndividualId> + Copy>(&self, row: I) -> Option<&[IndividualId]> {
244-
assert!(
245-
(self.num_rows() == 0 && self.as_ref().parents_length == 0)
246-
|| (!self.as_ref().parents.is_null() && !self.as_ref().location_offset.is_null())
247-
);
248-
unsafe {
249-
sys::tsk_ragged_column_access(
250-
row.into(),
251-
self.as_ref().parents,
252-
self.num_rows(),
253-
self.as_ref().parents_offset,
254-
self.as_ref().parents_length,
255-
)
256-
}
230+
self.table_.parents(row.into())
257231
}
258232

259233
/// Return the metadata for a given row.
@@ -430,7 +404,7 @@ match tables.individuals().metadata::<MutationMetadata>(0)
430404
&self,
431405
row: impl Into<IndividualId>,
432406
) -> Option<Result<T, TskitError>> {
433-
let buffer = self.raw_metadata(row)?;
407+
let buffer = self.table_.raw_metadata(row)?;
434408
Some(decode_metadata_row!(T, buffer).map_err(|e| e.into()))
435409
}
436410

@@ -477,7 +451,7 @@ match tables.individuals().metadata::<MutationMetadata>(0)
477451
flags: self.flags(r)?,
478452
location: self.location(r),
479453
parents: self.parents(r),
480-
metadata: self.raw_metadata(r.into()),
454+
metadata: self.table_.raw_metadata(r.into()),
481455
};
482456
Some(view)
483457
}

src/migration_table.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option<Mig
4444
source: table.source(pos)?,
4545
dest: table.dest(pos)?,
4646
time: table.time(pos)?,
47-
metadata: table.raw_metadata(pos).map(|m| m.to_vec()),
47+
metadata: table.table_.raw_metadata(pos).map(|m| m.to_vec()),
4848
})
4949
}
5050

@@ -155,7 +155,7 @@ impl streaming_iterator::StreamingIterator for MigrationTableRowView<'_> {
155155
self.source = self.table.source(self.id).unwrap_or(PopulationId::NULL);
156156
self.dest = self.table.dest(self.id).unwrap_or(PopulationId::NULL);
157157
self.time = self.table.time(self.id).unwrap_or_else(|| f64::NAN.into());
158-
self.metadata = self.table.raw_metadata(self.id);
158+
self.metadata = self.table.table_.raw_metadata(self.id);
159159
}
160160
}
161161

@@ -228,8 +228,6 @@ impl MigrationTable {
228228
self.as_ref().num_rows.into()
229229
}
230230

231-
raw_metadata_getter_for_tables!(MigrationId);
232-
233231
/// Return the left coordinate for a given row.
234232
///
235233
/// # Returns
@@ -310,7 +308,7 @@ impl MigrationTable {
310308
&self,
311309
row: impl Into<MigrationId>,
312310
) -> Option<Result<T, TskitError>> {
313-
let buffer = self.raw_metadata(row)?;
311+
let buffer = self.table_.raw_metadata(row)?;
314312
Some(decode_metadata_row!(T, buffer).map_err(|e| e.into()))
315313
}
316314

@@ -359,7 +357,7 @@ impl MigrationTable {
359357
source: self.source(r)?,
360358
dest: self.dest(r)?,
361359
time: self.time(r)?,
362-
metadata: self.raw_metadata(r.into()),
360+
metadata: self.table_.raw_metadata(r.into()),
363361
};
364362
Some(view)
365363
}

src/mutation_table.rs

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fn make_mutation_table_row(table: &MutationTable, pos: tsk_id_t) -> Option<Mutat
4444
parent: table.parent(pos)?,
4545
time: table.time(pos)?,
4646
derived_state,
47-
metadata: table.raw_metadata(pos).map(|m| m.to_vec()),
47+
metadata: table.table_.raw_metadata(pos).map(|m| m.to_vec()),
4848
})
4949
}
5050
_ => None,
@@ -152,7 +152,7 @@ impl streaming_iterator::StreamingIterator for MutationTableRowView<'_> {
152152
self.parent = self.table.parent(self.id).unwrap_or(MutationId::NULL);
153153
self.time = self.table.time(self.id).unwrap_or_else(|| f64::NAN.into());
154154
self.derived_state = self.table.derived_state(self.id);
155-
self.metadata = self.table.raw_metadata(self.id);
155+
self.metadata = self.table.table_.raw_metadata(self.id);
156156
}
157157
}
158158

@@ -224,8 +224,6 @@ impl MutationTable {
224224
self.as_ref().num_rows.into()
225225
}
226226

227-
raw_metadata_getter_for_tables!(MutationId);
228-
229227
/// Return the ``site`` value from row ``row`` of the table.
230228
///
231229
/// # Errors
@@ -277,22 +275,7 @@ impl MutationTable {
277275
/// Will return [``IndexError``](crate::TskitError::IndexError)
278276
/// if ``row`` is out of range.
279277
pub fn derived_state<M: Into<MutationId>>(&self, row: M) -> Option<&[u8]> {
280-
assert!(
281-
(self.num_rows() == 0 && self.as_ref().derived_state_length == 0)
282-
|| (!self.as_ref().derived_state.is_null()
283-
&& !self.as_ref().derived_state_offset.is_null())
284-
);
285-
// SAFETY: either both columns are empty or both pointers at not NULL,
286-
// in which case the correct lengths are from the low-level objects
287-
unsafe {
288-
sys::tsk_ragged_column_access(
289-
row.into(),
290-
self.as_ref().derived_state,
291-
self.num_rows(),
292-
self.as_ref().derived_state_offset,
293-
self.as_ref().derived_state_length,
294-
)
295-
}
278+
self.table_.derived_state(row.into())
296279
}
297280

298281
/// Retrieve decoded metadata for a `row`.
@@ -315,7 +298,7 @@ impl MutationTable {
315298
&self,
316299
row: impl Into<MutationId>,
317300
) -> Option<Result<T, TskitError>> {
318-
let buffer = self.raw_metadata(row)?;
301+
let buffer = self.table_.raw_metadata(row)?;
319302
Some(decode_metadata_row!(T, buffer).map_err(|e| e.into()))
320303
}
321304

@@ -363,7 +346,7 @@ impl MutationTable {
363346
parent: self.parent(r)?,
364347
time: self.time(r)?,
365348
derived_state: self.derived_state(r),
366-
metadata: self.raw_metadata(r.into()),
349+
metadata: self.table_.raw_metadata(r.into()),
367350
};
368351
Some(view)
369352
}

src/node_table.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fn make_node_table_row(table: &NodeTable, pos: tsk_id_t) -> Option<NodeTableRow>
3838
flags: table.flags(pos)?,
3939
population: table.population(pos)?,
4040
individual: table.individual(pos)?,
41-
metadata: table.raw_metadata(pos).map(|m| m.to_vec()),
41+
metadata: table.table_.raw_metadata(pos).map(|m| m.to_vec()),
4242
})
4343
}
4444

@@ -136,7 +136,7 @@ impl streaming_iterator::StreamingIterator for NodeTableRowView<'_> {
136136
self.flags = self.table.flags(self.id).unwrap_or_else(|| 0.into());
137137
self.population = self.table.population(self.id).unwrap_or(PopulationId::NULL);
138138
self.individual = self.table.individual(self.id).unwrap_or(IndividualId::NULL);
139-
self.metadata = self.table.raw_metadata(self.id);
139+
self.metadata = self.table.table_.raw_metadata(self.id);
140140
}
141141
}
142142

@@ -456,8 +456,6 @@ impl NodeTable {
456456
self.as_ref().num_rows.into()
457457
}
458458

459-
raw_metadata_getter_for_tables!(NodeId);
460-
461459
/// Return the ``time`` value from row ``row`` of the table.
462460
///
463461
/// # Returns
@@ -592,7 +590,7 @@ impl NodeTable {
592590
&self,
593591
row: impl Into<NodeId>,
594592
) -> Option<Result<T, TskitError>> {
595-
let buffer = self.table_.raw_metadata(row).ok()??;
593+
let buffer = self.table_.raw_metadata(row)?;
596594
Some(decode_metadata_row!(T, buffer).map_err(|e| e.into()))
597595
}
598596

@@ -639,7 +637,7 @@ impl NodeTable {
639637
flags: self.flags(r)?,
640638
population: self.population(r)?,
641639
individual: self.individual(r)?,
642-
metadata: self.raw_metadata(r.into()),
640+
metadata: self.table_.raw_metadata(r.into()),
643641
};
644642
Some(view)
645643
}

src/population_table.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ fn make_population_table_row(table: &PopulationTable, pos: tsk_id_t) -> Option<P
2424

2525
match index {
2626
i if i < table.num_rows() => {
27-
let metadata = table.raw_metadata(pos).map(|m| m.to_vec());
27+
let metadata = table.table_.raw_metadata(pos).map(|m| m.to_vec());
2828
Some(PopulationTableRow {
2929
id: pos.into(),
3030
metadata,
@@ -102,7 +102,7 @@ impl streaming_iterator::StreamingIterator for PopulationTableRowView<'_> {
102102

103103
fn advance(&mut self) {
104104
self.id = (i32::from(self.id) + 1).into();
105-
self.metadata = self.table.raw_metadata(self.id);
105+
self.metadata = self.table.table_.raw_metadata(self.id);
106106
}
107107
}
108108

@@ -169,8 +169,6 @@ impl PopulationTable {
169169
self.table_.as_ref()
170170
}
171171

172-
raw_metadata_getter_for_tables!(PopulationId);
173-
174172
/// Return the number of rows.
175173
pub fn num_rows(&self) -> SizeType {
176174
self.as_ref().num_rows.into()
@@ -196,7 +194,7 @@ impl PopulationTable {
196194
&self,
197195
row: impl Into<PopulationId>,
198196
) -> Option<Result<T, TskitError>> {
199-
let buffer = self.raw_metadata(row)?;
197+
let buffer = self.table_.raw_metadata(row)?;
200198
Some(decode_metadata_row!(T, buffer).map_err(TskitError::from))
201199
}
202200

@@ -241,7 +239,7 @@ impl PopulationTable {
241239
let view = PopulationTableRowView {
242240
table: self,
243241
id: r.into(),
244-
metadata: self.raw_metadata(r.into()),
242+
metadata: self.table_.raw_metadata(r.into()),
245243
};
246244
Some(view)
247245
}

0 commit comments

Comments
 (0)