[][src]Macro qip::wrap_and_invert

macro_rules! wrap_and_invert {
    (pub $newfunc:ident, pub $newinvert:ident, $($tail:tt)*) => { ... };
    ($newfunc:ident, pub $newinvert:ident, $($tail:tt)*) => { ... };
    (pub $newfunc:ident, $newinvert:ident, $($tail:tt)*) => { ... };
    ($newfunc:ident, $newinvert:ident, $($tail:tt)*) => { ... };
}

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_and_invert!(wrap_cy, inv_cy, UnitaryBuilder::cy, ra, rb);

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])?;