Skip to content

Commit eb0670c

Browse files
authored
feat: access to ergonomic edge table columns (#730)
1 parent add217a commit eb0670c

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

src/edge_table.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,22 @@ impl EdgeTable {
358358
/// Get the child column as a slice of the underlying integer type
359359
=> child, child_slice_raw, ll_bindings::tsk_id_t);
360360

361+
pub fn parent_column(&self) -> crate::EdgeTableColumn<crate::NodeId> {
362+
crate::EdgeTableColumn::new(self.parent_slice())
363+
}
364+
365+
pub fn child_column(&self) -> crate::EdgeTableColumn<crate::NodeId> {
366+
crate::EdgeTableColumn::new(self.child_slice())
367+
}
368+
369+
pub fn left_column(&self) -> crate::EdgeTableColumn<Position> {
370+
crate::EdgeTableColumn::new(self.left_slice())
371+
}
372+
373+
pub fn right_column(&self) -> crate::EdgeTableColumn<Position> {
374+
crate::EdgeTableColumn::new(self.right_slice())
375+
}
376+
361377
/// Clear all data from the table
362378
pub fn clear(&mut self) -> Result<i32, TskitError> {
363379
handle_tsk_return_value!(self.table_.clear())

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ pub use site_table::{SiteTable, SiteTableRow};
117117
pub use sys::flags::*;
118118
pub use sys::NodeTraversalOrder;
119119
pub use table_collection::TableCollection;
120-
pub use table_column::NodeTableColumn;
120+
pub use table_column::{EdgeTableColumn, NodeTableColumn};
121121
pub use traits::IndividualLocation;
122122
pub use traits::IndividualParents;
123123
pub use trees::{Tree, TreeSequence};

src/table_column.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,4 @@ macro_rules! make_table_column {
5858
}
5959

6060
make_table_column!(NodeTableColumn, NodeId);
61+
make_table_column!(EdgeTableColumn, EdgeId);

tests/test_tables.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,3 +588,33 @@ fn test_node_table_column_access() {
588588
);
589589
}
590590
}
591+
592+
#[test]
593+
fn test_edge_table_column_access() {
594+
let mut table = tskit::EdgeTable::default();
595+
let edge = table.add_row(0., 10., 1, 0).unwrap();
596+
597+
{
598+
let column = table.left_column();
599+
assert_eq!(column[edge], 0.0);
600+
assert_eq!(column[edge], tskit::Position::from(0.));
601+
}
602+
603+
{
604+
let column = table.right_column();
605+
assert_eq!(column[edge], 10.0);
606+
assert_eq!(column[edge], tskit::Position::from(10.0));
607+
}
608+
609+
{
610+
let column = table.parent_column();
611+
assert_eq!(column[edge], 1);
612+
assert_eq!(column[edge], tskit::NodeId::from(1));
613+
}
614+
615+
{
616+
let column = table.child_column();
617+
assert_eq!(column[edge], 0);
618+
assert_eq!(column[edge], tskit::NodeId::from(0));
619+
}
620+
}

0 commit comments

Comments
 (0)