From 8313ae2c1f2ccddc8d5ddab253974e771bd881a2 Mon Sep 17 00:00:00 2001 From: "Kevin R. Thornton" Date: Tue, 29 Nov 2022 12:06:59 -0800 Subject: [PATCH] refactor: remove TskitTypeAccess trait The trait has been replaced with pub fns for all types. The trait was not a great idea as it made no sense to be generic over access to the low-level pointers. BREAKING CHANGE: removed a pub trait. --- src/lib.rs | 1 - src/prelude.rs | 1 - src/table_collection.rs | 21 ++++++++++----------- src/traits.rs | 8 -------- src/tree_interface.rs | 21 ++++++++++----------- src/trees.rs | 21 ++++++++++----------- 6 files changed, 30 insertions(+), 43 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1b283d54d..45a345c60 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -439,7 +439,6 @@ pub use site_table::{OwningSiteTable, SiteTable, SiteTableRow}; pub use table_collection::TableCollection; pub use traits::IndividualLocation; pub use traits::IndividualParents; -pub use traits::TskitTypeAccess; pub use tree_interface::{NodeTraversalOrder, TreeInterface}; pub use trees::{Tree, TreeSequence}; diff --git a/src/prelude.rs b/src/prelude.rs index c68c2b947..069068f6c 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -1,7 +1,6 @@ //! Export commonly-use types and traits pub use crate::tsk_flags_t; -pub use crate::TskitTypeAccess; pub use crate::TSK_NODE_IS_SAMPLE; pub use streaming_iterator::DoubleEndedStreamingIterator; pub use streaming_iterator::StreamingIterator; diff --git a/src/table_collection.rs b/src/table_collection.rs index 1a9918682..72ce84e43 100644 --- a/src/table_collection.rs +++ b/src/table_collection.rs @@ -14,7 +14,6 @@ use crate::TableOutputOptions; use crate::TableSortOptions; use crate::TreeSequenceFlags; use crate::TskReturnValue; -use crate::TskitTypeAccess; use crate::{tsk_id_t, tsk_size_t}; use crate::{EdgeId, NodeId}; use ll_bindings::tsk_table_collection_free; @@ -59,16 +58,6 @@ pub struct TableCollection { views: crate::table_views::TableViews, } -impl TskitTypeAccess for TableCollection { - fn as_ptr(&self) -> *const ll_bindings::tsk_table_collection_t { - &*self.inner - } - - fn as_mut_ptr(&mut self) -> *mut ll_bindings::tsk_table_collection_t { - &mut *self.inner - } -} - impl Drop for TableCollection { fn drop(&mut self) { let rv = unsafe { tsk_table_collection_free(self.as_mut_ptr()) }; @@ -1229,4 +1218,14 @@ impl TableCollection { } delegate_table_view_api!(); + + /// Pointer to the low-level C type. + pub fn as_ptr(&self) -> *const ll_bindings::tsk_table_collection_t { + &*self.inner + } + + /// Mutable pointer to the low-level C type. + pub fn as_mut_ptr(&mut self) -> *mut ll_bindings::tsk_table_collection_t { + &mut *self.inner + } } diff --git a/src/traits.rs b/src/traits.rs index becb6852e..8303f9b44 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -1,13 +1,5 @@ //! Traits related to user-facing types -/// Provide pointer access to underlying C types -pub trait TskitTypeAccess { - /// Return const pointer - fn as_ptr(&self) -> *const T; - /// Return mutable pointer - fn as_mut_ptr(&mut self) -> *mut T; -} - /// Abstraction of individual location. /// /// This trait exists to streamline the API of diff --git a/src/tree_interface.rs b/src/tree_interface.rs index 0ca8ba749..0a3abc387 100644 --- a/src/tree_interface.rs +++ b/src/tree_interface.rs @@ -7,7 +7,6 @@ use crate::SizeType; use crate::Time; use crate::TreeFlags; use crate::TskitError; -use crate::TskitTypeAccess; use std::ptr::NonNull; pub struct TreeInterface { @@ -17,16 +16,6 @@ pub struct TreeInterface { flags: TreeFlags, } -impl TskitTypeAccess for TreeInterface { - fn as_ptr(&self) -> *const ll_bindings::tsk_tree_t { - self.non_owned_pointer.as_ptr() - } - - fn as_mut_ptr(&mut self) -> *mut ll_bindings::tsk_tree_t { - self.non_owned_pointer.as_ptr() - } -} - impl TreeInterface { pub(crate) fn new( non_owned_pointer: NonNull, @@ -42,6 +31,16 @@ impl TreeInterface { } } + /// Pointer to the low-level C type. + pub fn as_ptr(&self) -> *const ll_bindings::tsk_tree_t { + self.non_owned_pointer.as_ptr() + } + + /// Mutable pointer to the low-level C type. + pub fn as_mut_ptr(&mut self) -> *mut ll_bindings::tsk_tree_t { + self.non_owned_pointer.as_ptr() + } + pub fn flags(&self) -> TreeFlags { self.flags } diff --git a/src/trees.rs b/src/trees.rs index 79a9e75d4..4b6dc3bb0 100644 --- a/src/trees.rs +++ b/src/trees.rs @@ -12,7 +12,6 @@ use crate::TreeFlags; use crate::TreeInterface; use crate::TreeSequenceFlags; use crate::TskReturnValue; -use crate::TskitTypeAccess; use crate::{tsk_id_t, tsk_size_t, TableCollection}; use ll_bindings::tsk_tree_free; use std::ptr::NonNull; @@ -192,16 +191,6 @@ pub struct TreeSequence { unsafe impl Send for TreeSequence {} unsafe impl Sync for TreeSequence {} -impl TskitTypeAccess for TreeSequence { - fn as_ptr(&self) -> *const ll_bindings::tsk_treeseq_t { - &self.inner - } - - fn as_mut_ptr(&mut self) -> *mut ll_bindings::tsk_treeseq_t { - &mut self.inner - } -} - impl Drop for TreeSequence { fn drop(&mut self) { let rv = unsafe { ll_bindings::tsk_treeseq_free(&mut self.inner) }; @@ -270,6 +259,16 @@ impl TreeSequence { }) } + /// Pointer to the low-level C type. + pub fn as_ptr(&self) -> *const ll_bindings::tsk_treeseq_t { + &self.inner + } + + /// Mutable pointer to the low-level C type. + pub fn as_mut_ptr(&mut self) -> *mut ll_bindings::tsk_treeseq_t { + &mut self.inner + } + /// Dump the tree sequence to file. /// /// # Note