use crate::{ArenaPtr, Context, OpObj, RewriteResult};
pub trait PatternRewriter {
fn erase_op(&self, ctx: &mut Context, op: ArenaPtr<OpObj>) -> RewriteResult<()>;
fn replace_op(
&self,
ctx: &mut Context,
op: ArenaPtr<OpObj>,
new_ops: Vec<ArenaPtr<OpObj>>,
) -> RewriteResult<()>;
}
pub trait RewritePattern<Rewriter: PatternRewriter> {
fn matches(&self, ctx: &Context, op: ArenaPtr<OpObj>) -> RewriteResult<()>;
fn rewrite(
&self,
ctx: &mut Context,
op: ArenaPtr<OpObj>,
rewriter: &Rewriter,
) -> RewriteResult<()>;
}