Skip to content

Commit 651e4ed

Browse files
authored
Collect public traits in traits.rs. Closes #81. (#84)
1 parent 11ad49f commit 651e4ed

File tree

6 files changed

+35
-29
lines changed

6 files changed

+35
-29
lines changed

src/_macros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ macro_rules! drop_for_tskit_type {
7676

7777
macro_rules! tskit_type_access {
7878
($name: ident, $ll_name: ty) => {
79-
impl crate::ffi::TskitTypeAccess<$ll_name> for $name {
79+
impl crate::TskitTypeAccess<$ll_name> for $name {
8080
fn as_ptr(&self) -> *const $ll_name {
8181
&*self.inner
8282
}

src/ffi.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
//! Define traits related to wrapping tskit stuff
22
3-
/// Provide pointer access to underlying C types
4-
pub trait TskitTypeAccess<T> {
5-
/// Return const pointer
6-
fn as_ptr(&self) -> *const T;
7-
/// Return mutable pointer
8-
fn as_mut_ptr(&mut self) -> *mut T;
9-
}
10-
113
/// Indexable, iterable wrapper around C
124
/// arrays.
135
#[derive(Copy, Clone)]
@@ -92,6 +84,7 @@ mod tests {
9284
use super::*;
9385
use crate::bindings as ll_bindings;
9486
use crate::tsk_size_t;
87+
use crate::TskitTypeAccess;
9588
use ll_bindings::tsk_table_collection_free;
9689

9790
pub struct TableCollectionMock {

src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,19 @@ pub const TSK_NULL: tsk_id_t = -1;
4444

4545
pub use edge_table::{EdgeTable, EdgeTableRow};
4646
pub use error::TskitError;
47-
pub use flags:: SimplificationOptions;
47+
pub use flags::SimplificationOptions;
4848
pub use individual_table::{IndividualTable, IndividualTableRow};
4949
pub use migration_table::{MigrationTable, MigrationTableRow};
5050
pub use mutation_table::{MutationTable, MutationTableRow};
5151
pub use node_table::{NodeTable, NodeTableRow};
5252
pub use population_table::{PopulationTable, PopulationTableRow};
5353
pub use site_table::{SiteTable, SiteTableRow};
5454
pub use table_collection::TableCollection;
55+
pub use traits::NodeIterator;
5556
pub use traits::NodeListGenerator;
5657
pub use traits::TableAccess;
57-
pub use trees::{NodeIterator, NodeTraversalOrder, Tree, TreeFlags, TreeSequence};
58+
pub use traits::TskitTypeAccess;
59+
pub use trees::{NodeTraversalOrder, Tree, TreeFlags, TreeSequence};
5860

5961
/// Handles return codes from low-level tskit functions.
6062
///
@@ -109,5 +111,5 @@ mod tests {
109111

110112
// Testing modules
111113
mod test_fixtures;
112-
mod test_tsk_variables;
113114
mod test_simplification;
115+
mod test_tsk_variables;

src/table_collection.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::bindings as ll_bindings;
22
use crate::error::TskitError;
3-
use crate::ffi::{TskitTypeAccess, WrapTskitType};
3+
use crate::ffi::WrapTskitType;
44
use crate::metadata::*;
55
use crate::types::Bookmark;
66
use crate::EdgeTable;
@@ -13,6 +13,7 @@ use crate::SimplificationOptions;
1313
use crate::SiteTable;
1414
use crate::TableAccess;
1515
use crate::TskReturnValue;
16+
use crate::TskitTypeAccess;
1617
use crate::{tsk_flags_t, tsk_id_t, tsk_size_t, TSK_NULL};
1718
use ll_bindings::tsk_table_collection_free;
1819

src/traits.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ use crate::NodeTable;
1717
use crate::PopulationTable;
1818
use crate::SiteTable;
1919

20+
/// Provide pointer access to underlying C types
21+
pub trait TskitTypeAccess<T> {
22+
/// Return const pointer
23+
fn as_ptr(&self) -> *const T;
24+
/// Return mutable pointer
25+
fn as_mut_ptr(&mut self) -> *mut T;
26+
}
27+
2028
/// Immutable access to tables.
2129
///
2230
/// For objects that contain the full suite of tables,
@@ -189,3 +197,18 @@ pub trait NodeListGenerator: TableAccess {
189197
self.nodes().create_node_id_vector(f)
190198
}
191199
}
200+
201+
/// Trait defining iteration over nodes.
202+
pub trait NodeIterator {
203+
fn next_node(&mut self);
204+
fn current_node(&mut self) -> Option<tsk_id_t>;
205+
}
206+
207+
impl Iterator for dyn NodeIterator {
208+
type Item = tsk_id_t;
209+
210+
fn next(&mut self) -> Option<tsk_id_t> {
211+
self.next_node();
212+
self.current_node()
213+
}
214+
}

src/trees.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
use crate::bindings as ll_bindings;
22
use crate::error::TskitError;
3-
use crate::ffi::{TskitTypeAccess, WrapTskitType};
3+
use crate::ffi::WrapTskitType;
44
use crate::EdgeTable;
55
use crate::IndividualTable;
66
use crate::MigrationTable;
77
use crate::MutationTable;
8+
use crate::NodeIterator;
89
use crate::NodeTable;
910
use crate::PopulationTable;
1011
use crate::SimplificationOptions;
1112
use crate::SiteTable;
1213
use crate::TableAccess;
14+
use crate::TskitTypeAccess;
1315
use crate::{tsk_flags_t, tsk_id_t, tsk_size_t, TableCollection, TSK_NULL};
1416
use bitflags::bitflags;
1517
use ll_bindings::{tsk_tree_free, tsk_treeseq_free};
@@ -392,21 +394,6 @@ pub enum NodeTraversalOrder {
392394
Preorder,
393395
}
394396

395-
/// Trait defining iteration over nodes.
396-
pub trait NodeIterator {
397-
fn next_node(&mut self);
398-
fn current_node(&mut self) -> Option<tsk_id_t>;
399-
}
400-
401-
impl Iterator for dyn NodeIterator {
402-
type Item = tsk_id_t;
403-
404-
fn next(&mut self) -> Option<tsk_id_t> {
405-
self.next_node();
406-
self.current_node()
407-
}
408-
}
409-
410397
struct PreorderNodeIterator {
411398
root_stack: Vec<i32>,
412399
node_stack: Vec<i32>,

0 commit comments

Comments
 (0)