use melodium_core::*;
use melodium_macro::{check, mel_function, mel_treatment};
#[mel_function(
generic N (Signed)
)]
pub fn abs(value: N) -> Option<N> {
value.signed_abs()
}
#[mel_treatment(
generic N (Signed)
input value Stream<N>
output abs Stream<Option<N>>
)]
pub async fn abs() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
abs.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| val.signed_abs().into())
.collect()
))
.await
)
}
}
#[mel_function(
generic N (Signed)
)]
pub fn signum(value: N) -> N {
value.signed_signum()
}
#[mel_treatment(
generic N (Signed)
input value Stream<N>
output sign Stream<N>
)]
pub async fn signum() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
sign.send_many(TransmissionValue::Other(
values.into_iter().map(|val| val.signed_signum()).collect()
))
.await
)
}
}
#[mel_function(
generic N (Signed)
)]
pub fn is_positive(value: N) -> bool {
value.signed_is_positive()
}
#[mel_treatment(
generic N (Signed)
input value Stream<N>
output positive Stream<bool>
)]
pub async fn is_positive() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
positive
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| val.signed_is_positive().into())
.collect()
))
.await
)
}
}
#[mel_function(
generic N (Signed)
)]
pub fn is_negative(value: N) -> bool {
value.signed_is_negative()
}
#[mel_treatment(
generic N (Signed)
input value Stream<N>
output negative Stream<bool>
)]
pub async fn is_negative() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
negative
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| val.signed_is_negative().into())
.collect()
))
.await
)
}
}
#[mel_function(
generic N (Add)
)]
pub fn add(a: N, b: N) -> N {
a.add(&b)
}
#[mel_treatment(
generic N (Add)
input a Stream<N>
input b Stream<N>
output sum Stream<N>
)]
pub async fn add() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(sum.send_one(a.add(&b)).await)
}
}
#[mel_function(
generic N (CheckedAdd)
)]
pub fn checked_add(a: N, b: N) -> Option<N> {
a.checked_add(&b)
}
#[mel_treatment(
generic N (CheckedAdd)
input a Stream<N>
input b Stream<N>
output sum Stream<Option<N>>
)]
pub async fn checked_add() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(sum.send_one(a.checked_add(&b).into()).await)
}
}
#[mel_function(
generic N (SaturatingAdd)
)]
pub fn saturating_add(a: N, b: N) -> N {
a.saturating_add(&b)
}
#[mel_treatment(
generic N (SaturatingAdd)
input a Stream<N>
input b Stream<N>
output sum Stream<N>
)]
pub async fn saturating_add() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(sum.send_one(a.saturating_add(&b)).await)
}
}
#[mel_function(
generic N (WrappingAdd)
)]
pub fn wrapping_add(a: N, b: N) -> N {
a.wrapping_add(&b)
}
#[mel_treatment(
generic N (WrappingAdd)
input a Stream<N>
input b Stream<N>
output sum Stream<N>
)]
pub async fn wrapping_add() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(sum.send_one(a.wrapping_add(&b)).await)
}
}
#[mel_function(
generic N (Sub)
)]
pub fn sub(a: N, b: N) -> N {
a.sub(&b)
}
#[mel_treatment(
generic N (Add)
input a Stream<N>
input b Stream<N>
output diff Stream<N>
)]
pub async fn sub() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(diff.send_one(a.sub(&b)).await)
}
}
#[mel_function(
generic N (CheckedSub)
)]
pub fn checked_sub(a: N, b: N) -> Option<N> {
a.checked_sub(&b)
}
#[mel_treatment(
generic N (CheckedSub)
input a Stream<N>
input b Stream<N>
output diff Stream<Option<N>>
)]
pub async fn checked_sub() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(diff.send_one(a.checked_sub(&b).into()).await)
}
}
#[mel_function(
generic N (SaturatingSub)
)]
pub fn saturating_sub(a: N, b: N) -> N {
a.saturating_sub(&b)
}
#[mel_treatment(
generic N (SaturatingSub)
input a Stream<N>
input b Stream<N>
output diff Stream<N>
)]
pub async fn saturating_sub() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(diff.send_one(a.saturating_sub(&b)).await)
}
}
#[mel_function(
generic N (WrappingSub)
)]
pub fn wrapping_sub(a: N, b: N) -> N {
a.wrapping_sub(&b)
}
#[mel_treatment(
generic N (WrappingSub)
input a Stream<N>
input b Stream<N>
output diff Stream<N>
)]
pub async fn wrapping_sub() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(diff.send_one(a.wrapping_sub(&b)).await)
}
}
#[mel_function(
generic N (Mul)
)]
pub fn mul(a: N, b: N) -> N {
a.mul(&b)
}
#[mel_treatment(
generic N (Mul)
input a Stream<N>
input b Stream<N>
output prod Stream<N>
)]
pub async fn mul() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(prod.send_one(a.mul(&b)).await)
}
}
#[mel_function(
generic N (CheckedMul)
)]
pub fn checked_mul(a: N, b: N) -> Option<N> {
a.checked_mul(&b)
}
#[mel_treatment(
generic N (CheckedMul)
input a Stream<N>
input b Stream<N>
output prod Stream<Option<N>>
)]
pub async fn checked_mul() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(prod.send_one(a.checked_mul(&b).into()).await)
}
}
#[mel_function(
generic N (SaturatingMul)
)]
pub fn saturating_mul(a: N, b: N) -> N {
a.saturating_mul(&b)
}
#[mel_treatment(
generic N (SaturatingMul)
input a Stream<N>
input b Stream<N>
output prod Stream<N>
)]
pub async fn saturating_mul() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(prod.send_one(a.saturating_mul(&b)).await)
}
}
#[mel_function(
generic N (WrappingMul)
)]
pub fn wrapping_mul(a: N, b: N) -> N {
a.wrapping_mul(&b)
}
#[mel_treatment(
generic N (WrappingMul)
input a Stream<N>
input b Stream<N>
output prod Stream<N>
)]
pub async fn wrapping_mul() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(prod.send_one(a.wrapping_mul(&b)).await)
}
}
#[mel_function(
generic N (Div)
)]
pub fn div(a: N, b: N) -> N {
a.div(&b)
}
#[mel_treatment(
generic N (Div)
input a Stream<N>
input b Stream<N>
output quot Stream<N>
)]
pub async fn div() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(quot.send_one(a.div(&b)).await)
}
}
#[mel_function(
generic N (CheckedDiv)
)]
pub fn checked_div(a: N, b: N) -> Option<N> {
a.checked_div(&b)
}
#[mel_treatment(
generic N (CheckedDiv)
input a Stream<N>
input b Stream<N>
output quot Stream<Option<N>>
)]
pub async fn checked_div() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(quot.send_one(a.checked_div(&b).into()).await)
}
}
#[mel_function(
generic N (Rem)
)]
pub fn rem(a: N, b: N) -> N {
a.rem(&b)
}
#[mel_treatment(
generic N (Rem)
input a Stream<N>
input b Stream<N>
output rem Stream<N>
)]
pub async fn rem() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(rem.send_one(a.rem(&b)).await)
}
}
#[mel_function(
generic N (CheckedRem)
)]
pub fn checked_rem(a: N, b: N) -> Option<N> {
a.checked_rem(&b)
}
#[mel_treatment(
generic N (CheckedRem)
input a Stream<N>
input b Stream<N>
output rem Stream<Option<N>>
)]
pub async fn checked_rem() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(rem.send_one(a.checked_rem(&b).into()).await)
}
}
#[mel_function(
generic N (Neg)
)]
pub fn neg(val: N) -> N {
val.neg()
}
#[mel_treatment(
generic N (Neg)
input value Stream<N>
output neg Stream<N>
)]
pub async fn neg() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
neg.send_many(TransmissionValue::Other(
values.into_iter().map(|val| val.neg()).collect()
))
.await
)
}
}
#[mel_function(
generic N (CheckedNeg)
)]
pub fn checked_neg(val: N) -> Option<N> {
val.checked_neg()
}
#[mel_treatment(
generic N (CheckedNeg)
input value Stream<N>
output neg Stream<Option<N>>
)]
pub async fn checked_neg() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
neg.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| val.checked_neg().into())
.collect()
))
.await
)
}
}
#[mel_function(
generic N (WrappingNeg)
)]
pub fn wrapping_neg(val: N) -> N {
val.wrapping_neg()
}
#[mel_treatment(
generic N (WrappingNeg)
input value Stream<N>
output neg Stream<N>
)]
pub async fn wrapping_neg() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
neg.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| val.wrapping_neg().into())
.collect()
))
.await
)
}
}
#[mel_function(
generic N (Pow)
)]
pub fn pow(val: N, exp: u32) -> N {
val.pow(&exp)
}
#[mel_treatment(
generic N (Pow)
input value Stream<N>
output pow Stream<N>
)]
pub async fn pow(exp: u32) {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
pow.send_many(TransmissionValue::Other(
values.into_iter().map(|val| val.pow(&exp)).collect()
))
.await
)
}
}
#[mel_function(
generic N (CheckedPow)
)]
pub fn checked_pow(val: N, exp: u32) -> Option<N> {
val.checked_pow(&exp)
}
#[mel_treatment(
generic N (CheckedPow)
input value Stream<N>
output pow Stream<Option<N>>
)]
pub async fn checked_pow(exp: u32) {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
pow.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| val.checked_pow(&exp).into())
.collect()
))
.await
)
}
}
#[mel_function(
generic N (Euclid)
)]
pub fn euclid_div(a: N, b: N) -> N {
a.euclid_div(&b)
}
#[mel_treatment(
generic N (Euclid)
input a Stream<N>
input b Stream<N>
output quot Stream<N>
)]
pub async fn euclid_div() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(quot.send_one(a.euclid_div(&b)).await)
}
}
#[mel_function(
generic N (Euclid)
)]
pub fn euclid_rem(a: N, b: N) -> N {
a.euclid_rem(&b)
}
#[mel_treatment(
generic N (Euclid)
input a Stream<N>
input b Stream<N>
output rem Stream<N>
)]
pub async fn euclid_rem() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(rem.send_one(a.euclid_rem(&b)).await)
}
}
#[mel_function(
generic N (CheckedEuclid)
)]
pub fn checked_euclid_div(a: N, b: N) -> Option<N> {
a.checked_euclid_div(&b)
}
#[mel_treatment(
generic N (CheckedEuclid)
input a Stream<N>
input b Stream<N>
output quot Stream<Option<N>>
)]
pub async fn checked_euclid_div() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(quot.send_one(a.checked_euclid_div(&b).into()).await)
}
}
#[mel_function(
generic N (CheckedEuclid)
)]
pub fn checked_euclid_rem(a: N, b: N) -> Option<N> {
a.checked_euclid_rem(&b)
}
#[mel_treatment(
generic N (CheckedEuclid)
input a Stream<N>
input b Stream<N>
output rem Stream<Option<N>>
)]
pub async fn checked_euclid_rem() {
while let (Ok(a), Ok(b)) = (a.recv_one().await, b.recv_one().await) {
check!(rem.send_one(a.checked_euclid_rem(&b).into()).await)
}
}