Skip to content

Commit bf65626

Browse files
committed
woot, no lifetimes
1 parent 4c4bd31 commit bf65626

File tree

9 files changed

+25
-19
lines changed

9 files changed

+25
-19
lines changed

src/_macros.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,9 @@ macro_rules! build_tskit_type {
172172
}
173173

174174
macro_rules! metadata_to_vector {
175-
($table: expr, $row: expr) => {
175+
($outer: ident, $table: expr, $row: expr) => {
176176
$crate::metadata::char_column_to_slice(
177+
$outer,
177178
$table.metadata,
178179
$table.metadata_offset,
179180
$row,
@@ -195,8 +196,10 @@ macro_rules! decode_metadata_row {
195196
}
196197

197198
macro_rules! table_row_decode_metadata {
198-
($table: ident, $pos: ident) => {
199-
metadata_to_vector!($table, $pos).unwrap().map(|x| x)
199+
($owner: ident, $table: ident, $pos: ident) => {
200+
metadata_to_vector!($owner, $table, $pos)
201+
.unwrap()
202+
.map(|x| x)
200203
};
201204
}
202205

src/edge_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ fn make_edge_table_row(table: &EdgeTable, pos: tsk_id_t) -> Option<EdgeTableRow>
3939
right: table.right(pos).unwrap(),
4040
parent: table.parent(pos).unwrap(),
4141
child: table.child(pos).unwrap(),
42-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
42+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
4343
};
4444
Some(rv)
4545
} else {
@@ -141,7 +141,7 @@ impl<'a> EdgeTable<'a> {
141141
row: EdgeId,
142142
) -> Result<Option<T>, TskitError> {
143143
let table_ref = self.table_;
144-
let buffer = metadata_to_vector!(table_ref, row.0)?;
144+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
145145
decode_metadata_row!(T, buffer)
146146
}
147147

src/individual_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ fn make_individual_table_row(table: &IndividualTable, pos: tsk_id_t) -> Option<I
6363
flags: table.flags(pos).unwrap(),
6464
location: table.location(pos).unwrap(),
6565
parents: table.parents(pos).unwrap(),
66-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
66+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
6767
};
6868
Some(rv)
6969
} else {
@@ -248,7 +248,7 @@ impl<'a> IndividualTable<'a> {
248248
row: IndividualId,
249249
) -> Result<Option<T>, TskitError> {
250250
let table_ref = self.table_;
251-
let buffer = metadata_to_vector!(table_ref, row.0)?;
251+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
252252
decode_metadata_row!(T, buffer)
253253
}
254254

src/metadata.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,14 @@ pub enum MetadataError {
250250
},
251251
}
252252

253-
pub(crate) fn char_column_to_slice(
253+
pub(crate) fn char_column_to_slice<T: Sized>(
254+
_outer: &T,
254255
column: *const libc::c_char,
255256
column_offset: *const tsk_size_t,
256257
row: tsk_id_t,
257258
num_rows: tsk_size_t,
258259
column_length: tsk_size_t,
259-
) -> Result<Option<&'static [u8]>, crate::TskitError> {
260+
) -> Result<Option<&[u8]>, crate::TskitError> {
260261
let row = match tsk_size_t::try_from(row) {
261262
Ok(r) => r,
262263
Err(_) => return Err(TskitError::IndexError),

src/migration_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option<Mig
4747
source: table.source(pos).unwrap(),
4848
dest: table.dest(pos).unwrap(),
4949
time: table.time(pos).unwrap(),
50-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
50+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
5151
})
5252
} else {
5353
None
@@ -186,7 +186,7 @@ impl<'a> MigrationTable<'a> {
186186
row: MigrationId,
187187
) -> Result<Option<T>, TskitError> {
188188
let table_ref = self.table_;
189-
let buffer = metadata_to_vector!(table_ref, row.0)?;
189+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
190190
decode_metadata_row!(T, buffer)
191191
}
192192

src/mutation_table.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fn make_mutation_table_row(table: &MutationTable, pos: tsk_id_t) -> Option<Mutat
4343
parent: table.parent(pos).unwrap(),
4444
time: table.time(pos).unwrap(),
4545
derived_state: table.derived_state(pos).unwrap().map(|s| s.to_vec()),
46-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
46+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
4747
};
4848
Some(rv)
4949
} else {
@@ -157,6 +157,7 @@ impl<'a> MutationTable<'a> {
157157
row: M,
158158
) -> Result<Option<&[u8]>, TskitError> {
159159
metadata::char_column_to_slice(
160+
self,
160161
self.table_.derived_state,
161162
self.table_.derived_state_offset,
162163
row.into().0,
@@ -170,7 +171,7 @@ impl<'a> MutationTable<'a> {
170171
row: MutationId,
171172
) -> Result<Option<T>, TskitError> {
172173
let table_ref = self.table_;
173-
let buffer = metadata_to_vector!(table_ref, row.0)?;
174+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
174175
decode_metadata_row!(T, buffer)
175176
}
176177

src/node_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ fn make_node_table_row(table: &NodeTable, pos: tsk_id_t) -> Option<NodeTableRow>
4141
flags: table.flags(pos).unwrap(),
4242
population: table.population(pos).unwrap(),
4343
individual: table.individual(pos).unwrap(),
44-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
44+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
4545
})
4646
} else {
4747
None
@@ -189,7 +189,7 @@ impl<'a> NodeTable<'a> {
189189
row: NodeId,
190190
) -> Result<Option<T>, TskitError> {
191191
let table_ref = self.table_;
192-
let buffer = metadata_to_vector!(table_ref, row.0)?;
192+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
193193
decode_metadata_row!(T, buffer)
194194
}
195195

src/population_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ fn make_population_table_row(table: &PopulationTable, pos: tsk_id_t) -> Option<P
2828
let table_ref = table.table_;
2929
let rv = PopulationTableRow {
3030
id: pos.into(),
31-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
31+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
3232
};
3333
Some(rv)
3434
} else {
@@ -86,7 +86,7 @@ impl<'a> PopulationTable<'a> {
8686
row: PopulationId,
8787
) -> Result<Option<T>, TskitError> {
8888
let table_ref = self.table_;
89-
let buffer = metadata_to_vector!(table_ref, row.0)?;
89+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
9090
decode_metadata_row!(T, buffer)
9191
}
9292

src/site_table.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ fn make_site_table_row(table: &SiteTable, pos: tsk_id_t) -> Option<SiteTableRow>
3535
id: pos.into(),
3636
position: table.position(pos).unwrap(),
3737
ancestral_state: table.ancestral_state(pos).unwrap().map(|s| s.to_vec()),
38-
metadata: table_row_decode_metadata!(table_ref, pos).map(|m| m.to_vec()),
38+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
3939
};
4040
Some(rv)
4141
} else {
@@ -110,6 +110,7 @@ impl<'a> SiteTable<'a> {
110110
/// if ``row`` is out of range.
111111
pub fn ancestral_state<S: Into<SiteId>>(&'a self, row: S) -> Result<Option<&[u8]>, TskitError> {
112112
crate::metadata::char_column_to_slice(
113+
self,
113114
self.table_.ancestral_state,
114115
self.table_.ancestral_state_offset,
115116
row.into().0,
@@ -123,7 +124,7 @@ impl<'a> SiteTable<'a> {
123124
row: SiteId,
124125
) -> Result<Option<T>, TskitError> {
125126
let table_ref = self.table_;
126-
let buffer = metadata_to_vector!(table_ref, row.0)?;
127+
let buffer = metadata_to_vector!(self, table_ref, row.0)?;
127128
decode_metadata_row!(T, buffer)
128129
}
129130

0 commit comments

Comments
 (0)