Skip to content

Commit da2a6ec

Browse files
committed
got blankets working
1 parent 6097b39 commit da2a6ec

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

src/table_column.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ impl<T> std::ops::Index<usize> for OpaqueTableColumn<'_, T> {
1010
}
1111
}
1212

13+
trait NewTypeMarker: TryInto<usize, Error = crate::TskitError> {}
14+
15+
impl NewTypeMarker for crate::EdgeId {}
16+
1317
impl<T> std::ops::Index<crate::SizeType> for OpaqueTableColumn<'_, T> {
1418
type Output = T;
1519

@@ -18,10 +22,13 @@ impl<T> std::ops::Index<crate::SizeType> for OpaqueTableColumn<'_, T> {
1822
}
1923
}
2024

21-
impl<T> std::ops::Index<crate::EdgeId> for OpaqueTableColumn<'_, T> {
25+
impl<I, T> std::ops::Index<I> for OpaqueTableColumn<'_, T>
26+
where
27+
I: NewTypeMarker,
28+
{
2229
type Output = T;
23-
fn index(&self, index: crate::EdgeId) -> &Self::Output {
24-
&self.0[usize::try_from(index).unwrap()]
30+
fn index(&self, index: I) -> &Self::Output {
31+
&self.0[index.try_into().unwrap()]
2532
}
2633
}
2734

@@ -33,8 +40,11 @@ pub trait TableColumn<I, T>:
3340
fn as_slice(&self) -> &[T];
3441
}
3542

36-
impl TableColumn<crate::EdgeId, crate::NodeId> for OpaqueTableColumn<'_, crate::NodeId> {
37-
fn as_slice(&self) -> &[crate::NodeId] {
43+
impl<I, T> TableColumn<I, T> for OpaqueTableColumn<'_, T>
44+
where
45+
I: NewTypeMarker,
46+
{
47+
fn as_slice(&self) -> &[T] {
3848
self.0
3949
}
4050
}

0 commit comments

Comments
 (0)