[][src]Macro qip::invert_fn

macro_rules! invert_fn {
    (pub $newinvert:ident, $func:expr) => { ... };
    ($newinvert:ident, $func:expr) => { ... };
}

Wrap a function to create a version compatible with program! as well as an inverse which is also compatible.

Example

use qip::*;

let n = 3;
let mut b = OpBuilder::new();
let ra = b.register(n)?;
let rb = b.register(n)?;

wrap_fn!(wrap_cy, UnitaryBuilder::cy, ra, rb);
invert_fn!(inv_cy, wrap_cy);

let (ra, rb) = program!(&mut b, ra, rb;
    wrap_cy ra, rb[2];
    inv_cy ra, rb[2];
)?;
let r = b.merge(vec![ra, rb])?;