From 0db1e3efeb80a4f29cf8c69eb4cc19f5f23cfcc7 Mon Sep 17 00:00:00 2001 From: "Kevin R. Thornton" Date: Sat, 16 Jul 2022 16:24:13 -0700 Subject: [PATCH] refactor: macro metadata_to_vector intputs changed. Rather than pass along references to rust-defined tables, we now pass along refs to the underlying C types. --- src/_macros.rs | 10 +++++----- src/edge_table.rs | 6 ++++-- src/individual_table.rs | 6 ++++-- src/migration_table.rs | 6 ++++-- src/mutation_table.rs | 6 ++++-- src/node_table.rs | 6 ++++-- src/population_table.rs | 6 ++++-- src/site_table.rs | 6 ++++-- 8 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/_macros.rs b/src/_macros.rs index 28025b763..21749ed6f 100644 --- a/src/_macros.rs +++ b/src/_macros.rs @@ -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, ) }; } diff --git a/src/edge_table.rs b/src/edge_table.rs index c99d06f1d..bd044730b 100644 --- a/src/edge_table.rs +++ b/src/edge_table.rs @@ -31,13 +31,14 @@ fn make_edge_table_row(table: &EdgeTable, pos: tsk_id_t) -> Option // 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 { @@ -137,7 +138,8 @@ impl<'a> EdgeTable<'a> { &'a self, row: EdgeId, ) -> Result, 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) } diff --git a/src/individual_table.rs b/src/individual_table.rs index 6baaafe9a..96b7106b9 100644 --- a/src/individual_table.rs +++ b/src/individual_table.rs @@ -56,12 +56,13 @@ fn make_individual_table_row(table: &IndividualTable, pos: tsk_id_t) -> Option IndividualTable<'a> { &'a self, row: IndividualId, ) -> Result, 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) } diff --git a/src/migration_table.rs b/src/migration_table.rs index ba97076ca..7468d5ae5 100644 --- a/src/migration_table.rs +++ b/src/migration_table.rs @@ -37,6 +37,7 @@ fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option Option MigrationTable<'a> { &'a self, row: MigrationId, ) -> Result, 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) } diff --git a/src/mutation_table.rs b/src/mutation_table.rs index 12f3ed7a1..04995e543 100644 --- a/src/mutation_table.rs +++ b/src/mutation_table.rs @@ -34,6 +34,7 @@ fn make_mutation_table_row(table: &MutationTable, pos: tsk_id_t) -> Option Option MutationTable<'a> { &'a self, row: MutationId, ) -> Result, 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) } diff --git a/src/node_table.rs b/src/node_table.rs index d81ef925a..35b73c6aa 100644 --- a/src/node_table.rs +++ b/src/node_table.rs @@ -33,13 +33,14 @@ fn make_node_table_row(table: &NodeTable, pos: tsk_id_t) -> Option // 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 @@ -186,7 +187,8 @@ impl<'a> NodeTable<'a> { &'a self, row: NodeId, ) -> Result, 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) } diff --git a/src/population_table.rs b/src/population_table.rs index 24bcdaa69..e5c06d4f3 100644 --- a/src/population_table.rs +++ b/src/population_table.rs @@ -24,9 +24,10 @@ fn make_population_table_row(table: &PopulationTable, pos: tsk_id_t) -> Option

PopulationTable<'a> { &'a self, row: PopulationId, ) -> Result, 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) } diff --git a/src/site_table.rs b/src/site_table.rs index 86b587d37..cfd98d45f 100644 --- a/src/site_table.rs +++ b/src/site_table.rs @@ -29,11 +29,12 @@ fn make_site_table_row(table: &SiteTable, pos: tsk_id_t) -> Option // 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 { @@ -123,7 +124,8 @@ impl<'a> SiteTable<'a> { &'a self, row: SiteId, ) -> Result, 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) }