diff --git a/src/_macros.rs b/src/_macros.rs index 8c7a321f3..544fe28f4 100644 --- a/src/_macros.rs +++ b/src/_macros.rs @@ -430,87 +430,6 @@ macro_rules! build_owned_tables { }; } -macro_rules! node_table_add_row_details { - ($flags: ident, - $time: ident, - $population: ident, - $individual: ident, - $metadata: expr, - $metadata_len: expr, - $table: expr) => {{ - let rv = unsafe { - $crate::bindings::tsk_node_table_add_row( - $table, - $flags.into().bits(), - $time.into().into(), - $population.into().into(), - $individual.into().into(), - $metadata, - $metadata_len, - ) - }; - handle_tsk_return_value!(rv, rv.into()) - }}; -} - -macro_rules! node_table_add_row { - ($(#[$attr:meta])* => $name: ident, $self: ident, $table: expr) => { - $(#[$attr])* - pub fn $name( - &mut $self, - flags: F , - time: T , - population: P , - individual: I , - ) -> Result<$crate::NodeId, $crate::TskitError> - where - F: Into<$crate::NodeFlags>, - T:Into<$crate::Time>, - P:Into<$crate::PopulationId>, - I:Into<$crate::IndividualId> - { - node_table_add_row_details!(flags, - time, - population, - individual, - std::ptr::null(), - 0, - $table) - } - }; -} - -macro_rules! node_table_add_row_with_metadata { - ($(#[$attr:meta])* => $name: ident, $self: ident, $table: expr) => { - $(#[$attr])* - pub fn $name( - &mut $self, - flags: F, - time: T, - population: P, - individual: I, - metadata: &M, - ) -> Result<$crate::NodeId, $crate::TskitError> - where - F: Into<$crate::NodeFlags>, - T:Into<$crate::Time>, - P:Into<$crate::PopulationId>, - I:Into<$crate::IndividualId>, - M: $crate::metadata::NodeMetadata, - { - let md = $crate::metadata::EncodedMetadata::new(metadata)?; - let mdlen = md.len()?; - node_table_add_row_details!(flags, - time, - population, - individual, - md.as_ptr(), - mdlen.into(), - $table) - } - }; -} - macro_rules! edge_table_add_row_details { ($left: ident, $right: ident, diff --git a/src/node_table.rs b/src/node_table.rs index 31c6f2b54..302282ee4 100644 --- a/src/node_table.rs +++ b/src/node_table.rs @@ -1,5 +1,6 @@ use crate::bindings as ll_bindings; use crate::metadata; +use crate::metadata::NodeMetadata; use crate::sys; use crate::NodeFlags; use crate::SizeType; @@ -7,6 +8,81 @@ use crate::Time; use crate::{tsk_id_t, TskitError}; use crate::{IndividualId, NodeId, PopulationId}; +pub(crate) fn add_row_details( + flags: ll_bindings::tsk_flags_t, + time: f64, + population: ll_bindings::tsk_id_t, + individual: ll_bindings::tsk_id_t, + metadata: *const std::os::raw::c_char, + metadata_length: ll_bindings::tsk_size_t, + table: *mut ll_bindings::tsk_node_table_t, +) -> Result { + let rv = unsafe { + ll_bindings::tsk_node_table_add_row( + table, + flags, + time, + population, + individual, + metadata, + metadata_length, + ) + }; + handle_tsk_return_value!(rv, rv.into()) +} + +pub(crate) fn add_row( + flags: F, + time: T, + population: P, + individual: I, + table: *mut ll_bindings::tsk_node_table_t, +) -> Result +where + F: Into, + T: Into