1
1
use crate :: bindings as ll_bindings;
2
2
use crate :: metadata;
3
3
use crate :: { tsk_id_t, tsk_size_t, TskitError } ;
4
+ use crate :: { EdgeId , NodeId } ;
4
5
5
6
/// Row of an [`EdgeTable`]
6
7
pub struct EdgeTableRow {
7
- pub id : tsk_id_t ,
8
+ pub id : EdgeId ,
8
9
pub left : f64 ,
9
10
pub right : f64 ,
10
- pub parent : tsk_id_t ,
11
- pub child : tsk_id_t ,
11
+ pub parent : NodeId ,
12
+ pub child : NodeId ,
12
13
pub metadata : Option < Vec < u8 > > ,
13
14
}
14
15
@@ -26,7 +27,7 @@ impl PartialEq for EdgeTableRow {
26
27
fn make_edge_table_row ( table : & EdgeTable , pos : tsk_id_t ) -> Option < EdgeTableRow > {
27
28
if pos < table. num_rows ( ) as tsk_id_t {
28
29
let rv = EdgeTableRow {
29
- id : pos,
30
+ id : pos. into ( ) ,
30
31
left : table. left ( pos) . unwrap ( ) ,
31
32
right : table. right ( pos) . unwrap ( ) ,
32
33
parent : table. parent ( pos) . unwrap ( ) ,
@@ -87,8 +88,8 @@ impl<'a> EdgeTable<'a> {
87
88
///
88
89
/// Will return [``IndexError``](crate::TskitError::IndexError)
89
90
/// if ``row`` is out of range.
90
- pub fn parent ( & ' a self , row : tsk_id_t ) -> Result < tsk_id_t , TskitError > {
91
- unsafe_tsk_column_access ! ( row, 0 , self . num_rows( ) , self . table_. parent)
91
+ pub fn parent < E : Into < EdgeId > + Copy > ( & ' a self , row : E ) -> Result < NodeId , TskitError > {
92
+ unsafe_tsk_column_access ! ( row. into ( ) . 0 , 0 , self . num_rows( ) , self . table_. parent, NodeId )
92
93
}
93
94
94
95
/// Return the ``child`` value from row ``row`` of the table.
@@ -97,8 +98,8 @@ impl<'a> EdgeTable<'a> {
97
98
///
98
99
/// Will return [``IndexError``](crate::TskitError::IndexError)
99
100
/// if ``row`` is out of range.
100
- pub fn child ( & ' a self , row : tsk_id_t ) -> Result < tsk_id_t , TskitError > {
101
- unsafe_tsk_column_access ! ( row, 0 , self . num_rows( ) , self . table_. child)
101
+ pub fn child < E : Into < EdgeId > + Copy > ( & ' a self , row : E ) -> Result < NodeId , TskitError > {
102
+ unsafe_tsk_column_access ! ( row. into ( ) . 0 , 0 , self . num_rows( ) , self . table_. child, NodeId )
102
103
}
103
104
104
105
/// Return the ``left`` value from row ``row`` of the table.
@@ -107,8 +108,8 @@ impl<'a> EdgeTable<'a> {
107
108
///
108
109
/// Will return [``IndexError``](crate::TskitError::IndexError)
109
110
/// if ``row`` is out of range.
110
- pub fn left ( & ' a self , row : tsk_id_t ) -> Result < f64 , TskitError > {
111
- unsafe_tsk_column_access ! ( row, 0 , self . num_rows( ) , self . table_. left)
111
+ pub fn left < E : Into < EdgeId > + Copy > ( & ' a self , row : E ) -> Result < f64 , TskitError > {
112
+ unsafe_tsk_column_access ! ( row. into ( ) . 0 , 0 , self . num_rows( ) , self . table_. left)
112
113
}
113
114
114
115
/// Return the ``right`` value from row ``row`` of the table.
@@ -117,15 +118,15 @@ impl<'a> EdgeTable<'a> {
117
118
///
118
119
/// Will return [``IndexError``](crate::TskitError::IndexError)
119
120
/// if ``row`` is out of range.
120
- pub fn right ( & ' a self , row : tsk_id_t ) -> Result < f64 , TskitError > {
121
- unsafe_tsk_column_access ! ( row, 0 , self . num_rows( ) , self . table_. right)
121
+ pub fn right < E : Into < EdgeId > + Copy > ( & ' a self , row : E ) -> Result < f64 , TskitError > {
122
+ unsafe_tsk_column_access ! ( row. into ( ) . 0 , 0 , self . num_rows( ) , self . table_. right)
122
123
}
123
124
124
125
pub fn metadata < T : metadata:: MetadataRoundtrip > (
125
126
& ' a self ,
126
- row : tsk_id_t ,
127
+ row : EdgeId ,
127
128
) -> Result < Option < T > , TskitError > {
128
- let buffer = metadata_to_vector ! ( self , row) ?;
129
+ let buffer = metadata_to_vector ! ( self , row. 0 ) ?;
129
130
decode_metadata_row ! ( T , buffer)
130
131
}
131
132
@@ -145,7 +146,7 @@ impl<'a> EdgeTable<'a> {
145
146
/// # Errors
146
147
///
147
148
/// [`TskitError::IndexError`] if `r` is out of range.
148
- pub fn row ( & self , r : tsk_id_t ) -> Result < EdgeTableRow , TskitError > {
149
- table_row_access ! ( r, self , make_edge_table_row)
149
+ pub fn row < E : Into < EdgeId > + Copy > ( & self , r : E ) -> Result < EdgeTableRow , TskitError > {
150
+ table_row_access ! ( r. into ( ) . 0 , self , make_edge_table_row)
150
151
}
151
152
}
0 commit comments