Skip to content

Commit

Permalink
refactor: metadata_to_vector take ref to C table.
Browse files Browse the repository at this point in the history
Rather than pass along references to rust-defined
tables, we now pass along refs to the underlying C
types.
  • Loading branch information
molpopgen committed Jul 16, 2022
1 parent 3a4f14b commit fdd23f0
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 19 deletions.
10 changes: 5 additions & 5 deletions src/_macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,13 @@ macro_rules! build_tskit_type {
}

macro_rules! metadata_to_vector {
($self: expr, $row: expr) => {
($table: expr, $row: expr) => {
$crate::metadata::char_column_to_vector(
$self.table_.metadata,
$self.table_.metadata_offset,
$table.metadata,
$table.metadata_offset,
$row,
$self.table_.num_rows,
$self.table_.metadata_length,
$table.num_rows,
$table.metadata_length,
)
};
}
Expand Down
6 changes: 4 additions & 2 deletions src/edge_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@ fn make_edge_table_row(table: &EdgeTable, pos: tsk_id_t) -> Option<EdgeTableRow>
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
let rv = EdgeTableRow {
id: pos.into(),
left: table.left(pos).unwrap(),
right: table.right(pos).unwrap(),
parent: table.parent(pos).unwrap(),
child: table.child(pos).unwrap(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
};
Some(rv)
} else {
Expand Down Expand Up @@ -137,7 +138,8 @@ impl<'a> EdgeTable<'a> {
&'a self,
row: EdgeId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down
6 changes: 4 additions & 2 deletions src/individual_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,13 @@ fn make_individual_table_row(table: &IndividualTable, pos: tsk_id_t) -> Option<I
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
let rv = IndividualTableRow {
id: pos.into(),
flags: table.flags(pos).unwrap(),
location: table.location(pos).unwrap(),
parents: table.parents(pos).unwrap(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
};
Some(rv)
} else {
Expand Down Expand Up @@ -245,7 +246,8 @@ impl<'a> IndividualTable<'a> {
&'a self,
row: IndividualId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down
6 changes: 4 additions & 2 deletions src/migration_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option<Mig
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
Some(MigrationTableRow {
id: pos.into(),
left: table.left(pos).unwrap(),
Expand All @@ -45,7 +46,7 @@ fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option<Mig
source: table.source(pos).unwrap(),
dest: table.dest(pos).unwrap(),
time: table.time(pos).unwrap(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
})
} else {
None
Expand Down Expand Up @@ -183,7 +184,8 @@ impl<'a> MigrationTable<'a> {
&'a self,
row: MigrationId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down
6 changes: 4 additions & 2 deletions src/mutation_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,15 @@ fn make_mutation_table_row(table: &MutationTable, pos: tsk_id_t) -> Option<Mutat
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
let rv = MutationTableRow {
id: pos.into(),
site: table.site(pos).unwrap(),
node: table.node(pos).unwrap(),
parent: table.parent(pos).unwrap(),
time: table.time(pos).unwrap(),
derived_state: table.derived_state(pos).unwrap(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
};
Some(rv)
} else {
Expand Down Expand Up @@ -167,7 +168,8 @@ impl<'a> MutationTable<'a> {
&'a self,
row: MutationId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down
6 changes: 4 additions & 2 deletions src/node_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,14 @@ fn make_node_table_row(table: &NodeTable, pos: tsk_id_t) -> Option<NodeTableRow>
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
Some(NodeTableRow {
id: pos.into(),
time: table.time(pos).unwrap(),
flags: table.flags(pos).unwrap(),
population: table.population(pos).unwrap(),
individual: table.individual(pos).unwrap(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
})
} else {
None
Expand Down Expand Up @@ -186,7 +187,8 @@ impl<'a> NodeTable<'a> {
&'a self,
row: NodeId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down
6 changes: 4 additions & 2 deletions src/population_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ fn make_population_table_row(table: &PopulationTable, pos: tsk_id_t) -> Option<P
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
let rv = PopulationTableRow {
id: pos.into(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
};
Some(rv)
} else {
Expand Down Expand Up @@ -82,7 +83,8 @@ impl<'a> PopulationTable<'a> {
&'a self,
row: PopulationId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down
6 changes: 4 additions & 2 deletions src/site_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@ fn make_site_table_row(table: &SiteTable, pos: tsk_id_t) -> Option<SiteTableRow>
// set up the iterator
let p = crate::SizeType::try_from(pos).unwrap();
if p < table.num_rows() {
let table_ref = table.table_;
let rv = SiteTableRow {
id: pos.into(),
position: table.position(pos).unwrap(),
ancestral_state: table.ancestral_state(pos).unwrap(),
metadata: table_row_decode_metadata!(table, pos),
metadata: table_row_decode_metadata!(table_ref, pos),
};
Some(rv)
} else {
Expand Down Expand Up @@ -123,7 +124,8 @@ impl<'a> SiteTable<'a> {
&'a self,
row: SiteId,
) -> Result<Option<T>, TskitError> {
let buffer = metadata_to_vector!(self, row.0)?;
let table_ref = self.table_;
let buffer = metadata_to_vector!(table_ref, row.0)?;
decode_metadata_row!(T, buffer)
}

Expand Down

0 comments on commit fdd23f0

Please sign in to comment.