use crate::dyn_backend::DynBackendStorage;
use fuel_ir::{Layout, Result};
pub trait InplaceOp1 {
fn name(&self) -> &'static str;
fn fwd(&self, storage: &mut dyn DynBackendStorage, layout: &Layout) -> Result<()>;
}
pub trait InplaceOp2 {
fn name(&self) -> &'static str;
fn fwd(
&self,
s1: &mut dyn DynBackendStorage,
l1: &Layout,
s2: &dyn DynBackendStorage,
l2: &Layout,
) -> Result<()>;
}
pub trait InplaceOp3 {
fn name(&self) -> &'static str;
fn fwd(
&self,
s1: &mut dyn DynBackendStorage,
l1: &Layout,
s2: &dyn DynBackendStorage,
l2: &Layout,
s3: &dyn DynBackendStorage,
l3: &Layout,
) -> Result<()>;
}
impl InplaceOp1 for Box<dyn InplaceOp1 + '_> {
fn name(&self) -> &'static str {
(**self).name()
}
fn fwd(&self, s: &mut dyn DynBackendStorage, l: &Layout) -> Result<()> {
(**self).fwd(s, l)
}
}
impl InplaceOp2 for Box<dyn InplaceOp2 + '_> {
fn name(&self) -> &'static str {
(**self).name()
}
fn fwd(
&self,
s1: &mut dyn DynBackendStorage,
l1: &Layout,
s2: &dyn DynBackendStorage,
l2: &Layout,
) -> Result<()> {
(**self).fwd(s1, l1, s2, l2)
}
}
impl InplaceOp3 for Box<dyn InplaceOp3 + '_> {
fn name(&self) -> &'static str {
(**self).name()
}
fn fwd(
&self,
s1: &mut dyn DynBackendStorage,
l1: &Layout,
s2: &dyn DynBackendStorage,
l2: &Layout,
s3: &dyn DynBackendStorage,
l3: &Layout,
) -> Result<()> {
(**self).fwd(s1, l1, s2, l2, s3, l3)
}
}