Skip to content

Commit

Permalink
Modify unsafe_tsk_column_access to support idiomatic fall-through.
Browse files Browse the repository at this point in the history
  • Loading branch information
molpopgen committed Apr 8, 2021
1 parent 40e8989 commit 82bb6ec
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 28 deletions.
5 changes: 3 additions & 2 deletions src/_macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ macro_rules! panic_on_tskit_error {
macro_rules! unsafe_tsk_column_access {
($i: expr, $lo: expr, $hi: expr, $array: expr) => {{
if $i < $lo || ($i as crate::tsk_size_t) >= $hi {
return Err(crate::error::TskitError::IndexError {});
Err(crate::error::TskitError::IndexError {})
} else {
Ok(unsafe { *$array.offset($i as isize) })
}
return Ok(unsafe { *$array.offset($i as isize) });
}};
}

Expand Down
8 changes: 4 additions & 4 deletions src/edge_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl<'a> EdgeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn parent(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.parent);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.parent)
}

/// Return the ``child`` value from row ``row`` of the table.
Expand All @@ -38,7 +38,7 @@ impl<'a> EdgeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn child(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.child);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.child)
}

/// Return the ``left`` value from row ``row`` of the table.
Expand All @@ -48,7 +48,7 @@ impl<'a> EdgeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn left(&'a self, row: tsk_id_t) -> Result<f64, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.left);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.left)
}

/// Return the ``right`` value from row ``row`` of the table.
Expand All @@ -58,7 +58,7 @@ impl<'a> EdgeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn right(&'a self, row: tsk_id_t) -> Result<f64, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.right);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.right)
}

pub fn metadata<T: metadata::MetadataRoundtrip>(
Expand Down
8 changes: 4 additions & 4 deletions src/mutation_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl<'a> MutationTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn site(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.site);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.site)
}

/// Return the ``node`` value from row ``row`` of the table.
Expand All @@ -38,7 +38,7 @@ impl<'a> MutationTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn node(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.node);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.node)
}

/// Return the ``parent`` value from row ``row`` of the table.
Expand All @@ -48,7 +48,7 @@ impl<'a> MutationTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn parent(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.parent);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.parent)
}

/// Return the ``time`` value from row ``row`` of the table.
Expand All @@ -58,7 +58,7 @@ impl<'a> MutationTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn time(&'a self, row: tsk_id_t) -> Result<f64, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.time);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.time)
}

/// Get the ``derived_state`` value from row ``row`` of the table.
Expand Down
8 changes: 4 additions & 4 deletions src/node_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl<'a> NodeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn time(&'a self, row: tsk_id_t) -> Result<f64, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.time);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.time)
}

/// Return the ``flags`` value from row ``row`` of the table.
Expand All @@ -38,7 +38,7 @@ impl<'a> NodeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn flags(&'a self, row: tsk_id_t) -> Result<tsk_flags_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.flags);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.flags)
}

/// Return the ``population`` value from row ``row`` of the table.
Expand All @@ -48,7 +48,7 @@ impl<'a> NodeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn population(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.population);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.population)
}

/// Return the ``population`` value from row ``row`` of the table.
Expand All @@ -68,7 +68,7 @@ impl<'a> NodeTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn individual(&'a self, row: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.individual);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.individual)
}

pub fn metadata<T: metadata::MetadataRoundtrip>(
Expand Down
2 changes: 1 addition & 1 deletion src/site_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ impl<'a> SiteTable<'a> {
/// Will return [``IndexError``](crate::TskitError::IndexError)
/// if ``row`` is out of range.
pub fn position(&'a self, row: tsk_id_t) -> Result<f64, TskitError> {
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.position);
unsafe_tsk_column_access!(row, 0, self.num_rows(), self.table_.position)
}

/// Get the ``ancestral_state`` value from row ``row`` of the table.
Expand Down
26 changes: 13 additions & 13 deletions src/trees.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,17 +114,17 @@ impl Tree {
}

fn left_sample(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
if !self.flags.contains(TreeFlags::SAMPLE_LISTS) {
return Err(TskitError::NotTrackingSamples);
}
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.left_sample);
err_if_not_tracking_samples!(
self.flags,
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.left_sample).unwrap()
)
}

fn right_sample(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
if !self.flags.contains(TreeFlags::SAMPLE_LISTS) {
return Err(TskitError::NotTrackingSamples);
}
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.right_sample);
err_if_not_tracking_samples!(
self.flags,
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.right_sample).unwrap()
)
}

pub fn interval(&self) -> (f64, f64) {
Expand All @@ -141,23 +141,23 @@ impl Tree {
}

pub fn parent(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.parent);
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.parent)
}

pub fn left_child(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.left_child);
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.left_child)
}

pub fn right_child(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.right_child);
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.right_child)
}

pub fn left_sib(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.left_sib);
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.left_sib)
}

pub fn right_sib(&self, u: tsk_id_t) -> Result<tsk_id_t, TskitError> {
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.right_sib);
unsafe_tsk_column_access!(u, 0, self.num_nodes, self.inner.right_sib)
}

pub fn samples_to_vec(&self) -> Vec<tsk_id_t> {
Expand Down

0 comments on commit 82bb6ec

Please sign in to comment.