Skip to content

Commit ac21cb2

Browse files
committed
Use type erasure for all table row iteration functions.
These functions now return some flavor of "impl Iterator". Closes #148
1 parent f4cb635 commit ac21cb2

File tree

9 files changed

+48
-50
lines changed

9 files changed

+48
-50
lines changed

src/edge_table.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ fn make_edge_table_row(table: &EdgeTable, pos: tsk_id_t) -> Option<EdgeTableRow>
4040
}
4141
}
4242

43-
pub type EdgeTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a EdgeTable<'a>>;
44-
pub type EdgeTableIterator<'a> = crate::table_iterator::TableIterator<EdgeTable<'a>>;
43+
pub(crate) type EdgeTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a EdgeTable<'a>>;
44+
pub(crate) type EdgeTableIterator<'a> = crate::table_iterator::TableIterator<EdgeTable<'a>>;
4545

4646
impl<'a> Iterator for EdgeTableRefIterator<'a> {
4747
type Item = EdgeTableRow;
@@ -133,7 +133,7 @@ impl<'a> EdgeTable<'a> {
133133
/// Return an iterator over rows of the table.
134134
/// The value of the iterator is [`EdgeTableRow`].
135135
///
136-
pub fn iter(&self) -> EdgeTableRefIterator {
136+
pub fn iter(&self) -> impl Iterator<Item = EdgeTableRow> + '_ {
137137
crate::table_iterator::make_table_iterator::<&EdgeTable<'a>>(self)
138138
}
139139

src/individual_table.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ fn make_individual_table_row(table: &IndividualTable, pos: tsk_id_t) -> Option<I
6363
}
6464
}
6565

66-
pub type IndividualTableRefIterator<'a> =
66+
pub(crate) type IndividualTableRefIterator<'a> =
6767
crate::table_iterator::TableIterator<&'a IndividualTable<'a>>;
68-
pub type IndividualTableIterator<'a> = crate::table_iterator::TableIterator<IndividualTable<'a>>;
68+
pub(crate) type IndividualTableIterator<'a> =
69+
crate::table_iterator::TableIterator<IndividualTable<'a>>;
6970

7071
impl<'a> Iterator for IndividualTableRefIterator<'a> {
7172
type Item = IndividualTableRow;
@@ -163,7 +164,7 @@ impl<'a> IndividualTable<'a> {
163164
/// Return an iterator over rows of the table.
164165
/// The value of the iterator is [`IndividualTableRow`].
165166
///
166-
pub fn iter(&self) -> IndividualTableRefIterator {
167+
pub fn iter(&self) -> impl Iterator<Item = IndividualTableRow> + '_ {
167168
crate::table_iterator::make_table_iterator::<&IndividualTable<'a>>(self)
168169
}
169170

src/migration_table.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option<Mig
4545
}
4646
}
4747

48-
pub type MigrationTableRefIterator<'a> =
48+
pub(crate) type MigrationTableRefIterator<'a> =
4949
crate::table_iterator::TableIterator<&'a MigrationTable<'a>>;
50-
pub type MigrationTableIterator<'a> = crate::table_iterator::TableIterator<MigrationTable<'a>>;
50+
pub(crate) type MigrationTableIterator<'a> =
51+
crate::table_iterator::TableIterator<MigrationTable<'a>>;
5152

5253
impl<'a> Iterator for MigrationTableRefIterator<'a> {
5354
type Item = MigrationTableRow;
@@ -172,7 +173,7 @@ impl<'a> MigrationTable<'a> {
172173

173174
/// Return an iterator over rows of the table.
174175
/// The value of the iterator is [`MigrationTableRow`].
175-
pub fn iter(&self) -> MigrationTableRefIterator {
176+
pub fn iter(&self) -> impl Iterator<Item = MigrationTableRow> + '_ {
176177
crate::table_iterator::make_table_iterator::<&MigrationTable<'a>>(self)
177178
}
178179

src/mutation_table.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ fn make_mutation_table_row(table: &MutationTable, pos: tsk_id_t) -> Option<Mutat
4242
None
4343
}
4444
}
45-
pub type MutationTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a MutationTable<'a>>;
46-
pub type MutationTableIterator<'a> = crate::table_iterator::TableIterator<MutationTable<'a>>;
45+
pub(crate) type MutationTableRefIterator<'a> =
46+
crate::table_iterator::TableIterator<&'a MutationTable<'a>>;
47+
pub(crate) type MutationTableIterator<'a> = crate::table_iterator::TableIterator<MutationTable<'a>>;
4748

4849
impl<'a> Iterator for MutationTableRefIterator<'a> {
4950
type Item = MutationTableRow;
@@ -163,7 +164,7 @@ impl<'a> MutationTable<'a> {
163164

164165
/// Return an iterator over rows of the table.
165166
/// The value of the iterator is [`MutationTableRow`].
166-
pub fn iter(&self) -> MutationTableRefIterator {
167+
pub fn iter(&self) -> impl Iterator<Item = MutationTableRow> + '_ {
167168
crate::table_iterator::make_table_iterator::<&MutationTable<'a>>(self)
168169
}
169170

src/node_table.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ fn make_node_table_row(table: &NodeTable, pos: tsk_id_t) -> Option<NodeTableRow>
3939
}
4040
}
4141

42-
pub type NodeTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a NodeTable<'a>>;
43-
pub type NodeTableIterator<'a> = crate::table_iterator::TableIterator<NodeTable<'a>>;
42+
pub(crate) type NodeTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a NodeTable<'a>>;
43+
pub(crate) type NodeTableIterator<'a> = crate::table_iterator::TableIterator<NodeTable<'a>>;
4444

4545
impl<'a> Iterator for NodeTableRefIterator<'a> {
4646
type Item = NodeTableRow;
@@ -169,7 +169,7 @@ impl<'a> NodeTable<'a> {
169169

170170
/// Return an iterator over rows of the table.
171171
/// The value of the iterator is [`NodeTableRow`].
172-
pub fn iter(&self) -> NodeTableRefIterator {
172+
pub fn iter(&self) -> impl Iterator<Item = NodeTableRow> + '_ {
173173
crate::table_iterator::make_table_iterator::<&NodeTable<'a>>(self)
174174
}
175175

src/population_table.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ fn make_population_table_row(table: &PopulationTable, pos: tsk_id_t) -> Option<P
2929
}
3030
}
3131

32-
pub type PopulationTableRefIterator<'a> =
32+
pub(crate) type PopulationTableRefIterator<'a> =
3333
crate::table_iterator::TableIterator<&'a PopulationTable<'a>>;
34-
pub type PopulationTableIterator<'a> = crate::table_iterator::TableIterator<PopulationTable<'a>>;
34+
pub(crate) type PopulationTableIterator<'a> =
35+
crate::table_iterator::TableIterator<PopulationTable<'a>>;
3536

3637
impl<'a> Iterator for PopulationTableRefIterator<'a> {
3738
type Item = PopulationTableRow;
@@ -82,7 +83,7 @@ impl<'a> PopulationTable<'a> {
8283

8384
/// Return an iterator over rows of the table.
8485
/// The value of the iterator is [`PopulationTableRow`].
85-
pub fn iter(&self) -> PopulationTableRefIterator {
86+
pub fn iter(&self) -> impl Iterator<Item = PopulationTableRow> + '_ {
8687
crate::table_iterator::make_table_iterator::<&PopulationTable<'a>>(self)
8788
}
8889

src/provenance.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ impl<'a> ProvenanceTable<'a> {
254254

255255
/// Return an iterator over rows of the table.
256256
/// The value of the iterator is [`ProvenanceTableRow`].
257-
pub fn iter(&self) -> ProvenanceTableRefIterator {
257+
pub fn iter(&self) -> impl Iterator<Item = ProvenanceTableRow> + '_ {
258258
crate::table_iterator::make_table_iterator::<&ProvenanceTable<'a>>(self)
259259
}
260260
}

src/site_table.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ fn make_site_table_row(table: &SiteTable, pos: tsk_id_t) -> Option<SiteTableRow>
3535
}
3636
}
3737

38-
pub type SiteTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a SiteTable<'a>>;
39-
pub type SiteTableIterator<'a> = crate::table_iterator::TableIterator<SiteTable<'a>>;
38+
pub(crate) type SiteTableRefIterator<'a> = crate::table_iterator::TableIterator<&'a SiteTable<'a>>;
39+
pub(crate) type SiteTableIterator<'a> = crate::table_iterator::TableIterator<SiteTable<'a>>;
4040

4141
impl<'a> Iterator for SiteTableRefIterator<'a> {
4242
type Item = SiteTableRow;
@@ -120,7 +120,7 @@ impl<'a> SiteTable<'a> {
120120

121121
/// Return an iterator over rows of the table.
122122
/// The value of the iterator is [`SiteTableRow`].
123-
pub fn iter(&self) -> SiteTableRefIterator {
123+
pub fn iter(&self) -> impl Iterator<Item = SiteTableRow> + '_ {
124124
crate::table_iterator::make_table_iterator::<&SiteTable<'a>>(self)
125125
}
126126

src/traits.rs

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
//! Traits related to user-facing types
22
3-
use crate::edge_table::EdgeTableIterator;
4-
use crate::individual_table::IndividualTableIterator;
5-
use crate::migration_table::MigrationTableIterator;
6-
use crate::mutation_table::MutationTableIterator;
7-
use crate::node_table::NodeTableIterator;
8-
use crate::population_table::PopulationTableIterator;
9-
use crate::site_table::SiteTableIterator;
103
use crate::table_iterator::make_table_iterator;
114
use crate::EdgeTable;
125
use crate::IndividualTable;
@@ -60,63 +53,64 @@ pub trait TableAccess {
6053
fn edges(&self) -> EdgeTable;
6154

6255
/// Return an iterator over the edges.
63-
/// See [`EdgeTable::iter`] for details.
64-
fn edges_iter(&self) -> EdgeTableIterator {
65-
make_table_iterator::<EdgeTable>(self.edges())
56+
fn edges_iter(&self) -> Box<dyn Iterator<Item = crate::edge_table::EdgeTableRow> + '_> {
57+
Box::new(make_table_iterator::<EdgeTable>(self.edges()))
6658
}
6759

6860
/// Get reference to the [``NodeTable``](crate::NodeTable).
6961
fn nodes(&self) -> NodeTable;
7062

7163
/// Return an iterator over the nodes.
72-
/// See [`NodeTable::iter`] for details.
73-
fn nodes_iter(&self) -> NodeTableIterator {
74-
make_table_iterator::<NodeTable>(self.nodes())
64+
fn nodes_iter(&self) -> Box<dyn Iterator<Item = crate::node_table::NodeTableRow> + '_> {
65+
Box::new(make_table_iterator::<NodeTable>(self.nodes()))
7566
}
7667

7768
/// Get reference to the [``MutationTable``](crate::MutationTable).
7869
fn mutations(&self) -> MutationTable;
7970

8071
/// Return an iterator over the mutations.
81-
/// See [`MutationTable::iter`] for details.
82-
fn mutations_iter(&self) -> MutationTableIterator {
83-
make_table_iterator::<MutationTable>(self.mutations())
72+
fn mutations_iter(
73+
&self,
74+
) -> Box<dyn Iterator<Item = crate::mutation_table::MutationTableRow> + '_> {
75+
Box::new(make_table_iterator::<MutationTable>(self.mutations()))
8476
}
8577

8678
/// Get reference to the [``SiteTable``](crate::SiteTable).
8779
fn sites(&self) -> SiteTable;
8880

8981
/// Return an iterator over the sites.
90-
/// See [`SiteTable::iter`] for details.
91-
fn sites_iter(&self) -> SiteTableIterator {
92-
make_table_iterator::<SiteTable>(self.sites())
82+
fn sites_iter(&self) -> Box<dyn Iterator<Item = crate::site_table::SiteTableRow> + '_> {
83+
Box::new(make_table_iterator::<SiteTable>(self.sites()))
9384
}
9485

9586
/// Get reference to the [``PopulationTable``](crate::PopulationTable).
9687
fn populations(&self) -> PopulationTable;
9788

9889
/// Return an iterator over the populations.
99-
/// See [`PopulationTable::iter`] for details.
100-
fn populations_iter(&self) -> PopulationTableIterator {
101-
make_table_iterator::<PopulationTable>(self.populations())
90+
fn populations_iter(
91+
&self,
92+
) -> Box<dyn Iterator<Item = crate::population_table::PopulationTableRow> + '_> {
93+
Box::new(make_table_iterator::<PopulationTable>(self.populations()))
10294
}
10395

10496
/// Get reference to the [``MigrationTable``](crate::MigrationTable).
10597
fn migrations(&self) -> MigrationTable;
10698

10799
/// Return an iterator over the migration events.
108-
/// See [`MigrationTable::iter`] for details.
109-
fn migrations_iter(&self) -> MigrationTableIterator {
110-
make_table_iterator::<MigrationTable>(self.migrations())
100+
fn migrations_iter(
101+
&self,
102+
) -> Box<dyn Iterator<Item = crate::migration_table::MigrationTableRow> + '_> {
103+
Box::new(make_table_iterator::<MigrationTable>(self.migrations()))
111104
}
112105

113106
/// Get reference to the [``IndividualTable``](crate::IndividualTable).
114107
fn individuals(&self) -> IndividualTable;
115108

116109
/// Return an iterator over the individuals.
117-
/// See [`IndividualTable::iter`] for details.
118-
fn individuals_iter(&self) -> IndividualTableIterator {
119-
make_table_iterator::<IndividualTable>(self.individuals())
110+
fn individuals_iter(
111+
&self,
112+
) -> Box<dyn Iterator<Item = crate::individual_table::IndividualTableRow> + '_> {
113+
Box::new(make_table_iterator::<IndividualTable>(self.individuals()))
120114
}
121115
}
122116

0 commit comments

Comments
 (0)