@@ -10,6 +10,7 @@ use crate::MutationTable;
10
10
use crate :: NodeTable ;
11
11
use crate :: PopulationTable ;
12
12
use crate :: SiteTable ;
13
+ use crate :: TableAccess ;
13
14
use crate :: TskReturnValue ;
14
15
use crate :: { tsk_flags_t, tsk_id_t, tsk_size_t} ;
15
16
use ll_bindings:: tsk_table_collection_free;
@@ -23,6 +24,7 @@ use ll_bindings::tsk_table_collection_free;
23
24
/// # Examples
24
25
///
25
26
/// ```
27
+ /// use tskit::TableAccess;
26
28
/// let mut tables = tskit::TableCollection::new(100.).unwrap();
27
29
/// assert_eq!(tables.sequence_length(), 100.);
28
30
///
@@ -47,6 +49,7 @@ use ll_bindings::tsk_table_collection_free;
47
49
///
48
50
/// ```
49
51
/// use tskit;
52
+ /// use tskit::TableAccess;
50
53
/// use tskit::metadata::MetadataRoundtrip;
51
54
///
52
55
/// // Define a type for metadata
@@ -156,130 +159,6 @@ impl TableCollection {
156
159
unsafe { ( * self . as_ptr ( ) ) . sequence_length }
157
160
}
158
161
159
- /// Get reference to the [``EdgeTable``](crate::EdgeTable).
160
- /// Lifetime of return value is tied to (this)
161
- /// parent object.
162
- pub fn edges < ' a > ( & ' a self ) -> EdgeTable < ' a > {
163
- EdgeTable :: < ' a > :: new_from_table ( & self . inner . edges )
164
- }
165
-
166
- /// Return an iterator over the edges.
167
- /// See [`EdgeTable::iter`] for details.
168
- pub fn edges_iter < ' a > (
169
- & ' a self ,
170
- decode_metadata : bool ,
171
- ) -> crate :: edge_table:: EdgeTableIterator < ' a > {
172
- crate :: table_iterator:: make_table_iterator :: < EdgeTable < ' a > > ( self . edges ( ) , decode_metadata)
173
- }
174
-
175
- /// Get reference to the [``IndividualTable``](crate::IndividualTable).
176
- /// Lifetime of return value is tied to (this)
177
- /// parent object.
178
- pub fn individuals < ' a > ( & ' a self ) -> IndividualTable < ' a > {
179
- IndividualTable :: < ' a > :: new_from_table ( & self . inner . individuals )
180
- }
181
-
182
- /// Return an iterator over the individuals.
183
- /// See [`IndividualTable::iter`] for details.
184
- pub fn individuals_iter < ' a > (
185
- & ' a self ,
186
- decode_metadata : bool ,
187
- ) -> crate :: individual_table:: IndividualTableIterator < ' a > {
188
- crate :: table_iterator:: make_table_iterator :: < IndividualTable < ' a > > (
189
- self . individuals ( ) ,
190
- decode_metadata,
191
- )
192
- }
193
-
194
- /// Get reference to the [``MigrationTable``](crate::MigrationTable).
195
- /// Lifetime of return value is tied to (this)
196
- /// parent object.
197
- pub fn migrations < ' a > ( & ' a self ) -> MigrationTable < ' a > {
198
- MigrationTable :: < ' a > :: new_from_table ( & self . inner . migrations )
199
- }
200
-
201
- /// Return an iterator over the migration events.
202
- /// See [`MigrationTable::iter`] for details.
203
- pub fn migrations_iter < ' a > (
204
- & ' a self ,
205
- decode_metadata : bool ,
206
- ) -> crate :: migration_table:: MigrationTableIterator < ' a > {
207
- crate :: table_iterator:: make_table_iterator :: < MigrationTable < ' a > > (
208
- self . migrations ( ) ,
209
- decode_metadata,
210
- )
211
- }
212
-
213
- /// Get reference to the [``NodeTable``](crate::NodeTable).
214
- /// Lifetime of return value is tied to (this)
215
- /// parent object.
216
- pub fn nodes < ' a > ( & ' a self ) -> NodeTable < ' a > {
217
- NodeTable :: < ' a > :: new_from_table ( & self . inner . nodes )
218
- }
219
-
220
- /// Return an iterator over the nodes.
221
- /// See [`NodeTable::iter`] for details.
222
- pub fn nodes_iter < ' a > (
223
- & ' a self ,
224
- decode_metadata : bool ,
225
- ) -> crate :: node_table:: NodeTableIterator < ' a > {
226
- crate :: table_iterator:: make_table_iterator :: < NodeTable < ' a > > ( self . nodes ( ) , decode_metadata)
227
- }
228
-
229
- /// Get reference to the [``SiteTable``](crate::SiteTable).
230
- /// Lifetime of return value is tied to (this)
231
- /// parent object.
232
- pub fn sites < ' a > ( & ' a self ) -> SiteTable < ' a > {
233
- SiteTable :: < ' a > :: new_from_table ( & self . inner . sites )
234
- }
235
-
236
- /// Return an iterator over the sites.
237
- /// See [`SiteTable::iter`] for details.
238
- pub fn sites_iter < ' a > (
239
- & ' a self ,
240
- decode_metadata : bool ,
241
- ) -> crate :: site_table:: SiteTableIterator < ' a > {
242
- crate :: table_iterator:: make_table_iterator :: < SiteTable < ' a > > ( self . sites ( ) , decode_metadata)
243
- }
244
-
245
- /// Get reference to the [``MutationTable``](crate::MutationTable).
246
- /// Lifetime of return value is tied to (this)
247
- /// parent object.
248
- pub fn mutations < ' a > ( & ' a self ) -> MutationTable < ' a > {
249
- MutationTable :: < ' a > :: new_from_table ( & self . inner . mutations )
250
- }
251
-
252
- /// Return an iterator over the mutations.
253
- /// See [`MutationTable::iter`] for details.
254
- pub fn mutations_iter < ' a > (
255
- & ' a self ,
256
- decode_metadata : bool ,
257
- ) -> crate :: mutation_table:: MutationTableIterator < ' a > {
258
- crate :: table_iterator:: make_table_iterator :: < MutationTable < ' a > > (
259
- self . mutations ( ) ,
260
- decode_metadata,
261
- )
262
- }
263
-
264
- /// Get reference to the [``PopulationTable``](crate::PopulationTable).
265
- /// Lifetime of return value is tied to (this)
266
- /// parent object.
267
- pub fn populations < ' a > ( & ' a self ) -> PopulationTable < ' a > {
268
- PopulationTable :: < ' a > :: new_from_table ( & self . inner . populations )
269
- }
270
-
271
- /// Return an iterator over the populations.
272
- /// See [`PopulationTable::iter`] for details.
273
- pub fn populations_iter < ' a > (
274
- & ' a self ,
275
- decode_metadata : bool ,
276
- ) -> crate :: population_table:: PopulationTableIterator < ' a > {
277
- crate :: table_iterator:: make_table_iterator :: < PopulationTable < ' a > > (
278
- self . populations ( ) ,
279
- decode_metadata,
280
- )
281
- }
282
-
283
162
/// Add a row to the edge table
284
163
pub fn add_edge (
285
164
& mut self ,
@@ -610,6 +489,36 @@ impl TableCollection {
610
489
}
611
490
}
612
491
492
+ impl TableAccess for TableCollection {
493
+ fn edges ( & self ) -> EdgeTable {
494
+ EdgeTable :: new_from_table ( & self . inner . edges )
495
+ }
496
+
497
+ fn individuals ( & self ) -> IndividualTable {
498
+ IndividualTable :: new_from_table ( & self . inner . individuals )
499
+ }
500
+
501
+ fn migrations ( & self ) -> MigrationTable {
502
+ MigrationTable :: new_from_table ( & self . inner . migrations )
503
+ }
504
+
505
+ fn nodes ( & self ) -> NodeTable {
506
+ NodeTable :: new_from_table ( & self . inner . nodes )
507
+ }
508
+
509
+ fn sites ( & self ) -> SiteTable {
510
+ SiteTable :: new_from_table ( & self . inner . sites )
511
+ }
512
+
513
+ fn mutations ( & self ) -> MutationTable {
514
+ MutationTable :: new_from_table ( & self . inner . mutations )
515
+ }
516
+
517
+ fn populations ( & self ) -> PopulationTable {
518
+ PopulationTable :: new_from_table ( & self . inner . populations )
519
+ }
520
+ }
521
+
613
522
#[ cfg( test) ]
614
523
mod test {
615
524
use super :: * ;
0 commit comments