macro_rules! indicator {
(
$(#[$meta:meta])*
fn $fname:ident ( $len:ident : &[f64] $(, $arg:ident : $argty:ty)* $(,)? )
-> Vec<f64>
with $with_output:ident
default $dname:ident ( $($darg:ident : $dargty:ty),* $(,)? )
=> ( $($def:expr),+ $(,)? )
$(#[$dmeta:meta])*
$(;)?
) => {
$(#[$meta])*
pub fn $fname ( $len : &[f64] $(, $arg : $argty)* )
-> Result<Vec<f64>, $crate::error::TaError>
{
let mut out = vec![f64::NAN; $len.len()];
$with_output ( $len $(, $arg)* , &mut out )?;
Ok(out)
}
$(#[$dmeta])*
pub fn $dname ( $($darg : $dargty),* )
-> Result<Vec<f64>, $crate::error::TaError>
{
$fname ( $($darg),* , $($def),* )
}
};
(
$(#[$meta:meta])*
fn $fname:ident ( $len:ident : &[f64] $(, $arg:ident : $argty:ty)* $(,)? )
-> Vec<f64>
with $with_output:ident
$(;)?
) => {
$(#[$meta])*
pub fn $fname ( $len : &[f64] $(, $arg : $argty)* )
-> Result<Vec<f64>, $crate::error::TaError>
{
let mut out = vec![f64::NAN; $len.len()];
$with_output ( $len $(, $arg)* , &mut out )?;
Ok(out)
}
};
(
$(#[$meta:meta])*
fn $fname:ident (
$first:ident : &[f64]
$(, $rest:ident : $restty:ty)* $(,)?
) -> Vec<f64>
with $with_output:ident
init zero
$(;)?
) => {
$(#[$meta])*
pub fn $fname (
$first : &[f64]
$(, $rest : $restty)*
) -> Result<Vec<f64>, $crate::error::TaError> {
let mut out = vec![0.0_f64; $first.len()];
$with_output ( $first $(, $rest)* , &mut out )?;
Ok(out)
}
};
(
$(#[$meta:meta])*
fn $fname:ident (
$first:ident : &[f64]
$(, $rest:ident : $restty:ty)* $(,)?
) -> Vec<f64>
with $with_output:ident
$(;)?
) => {
$(#[$meta])*
pub fn $fname (
$first : &[f64]
$(, $rest : $restty)*
) -> Result<Vec<f64>, $crate::error::TaError> {
let mut out = vec![f64::NAN; $first.len()];
$with_output ( $first $(, $rest)* , &mut out )?;
Ok(out)
}
};
(
$(#[$meta:meta])*
fn $fname:ident (
$first:ident : &[f64]
$(, $rest:ident : $restty:ty)* $(,)?
) -> Vec<f64>
with $with_output:ident
default $dname:ident ( $($darg:ident : $dargty:ty),* $(,)? )
=> ( $($def:expr),+ $(,)? )
$(#[$dmeta:meta])*
$(;)?
) => {
$(#[$meta])*
pub fn $fname (
$first : &[f64]
$(, $rest : $restty)*
) -> Result<Vec<f64>, $crate::error::TaError> {
let mut out = vec![f64::NAN; $first.len()];
$with_output ( $first $(, $rest)* , &mut out )?;
Ok(out)
}
$(#[$dmeta])*
pub fn $dname ( $($darg : $dargty),* )
-> Result<Vec<f64>, $crate::error::TaError>
{
$fname ( $($darg),* , $($def),* )
}
};
}
pub(crate) use indicator;