use geodesy::authoring::*;
fn add42(_op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
let n = operands.len();
for i in 0..n {
let mut coord = operands.get_coord(i);
coord[0] += 42.;
operands.set_coord(i, &coord);
}
n
}
fn sub42(_op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
let n = operands.len();
for i in 0..n {
let mut coord = operands.get_coord(i);
coord[0] -= 42.;
operands.set_coord(i, &coord);
}
n
}
pub const GAMUT: [OpParameter; 1] = [OpParameter::Flag { key: "inv" }];
pub fn add42_constructor(parameters: &RawParameters, _ctx: &dyn Context) -> Result<Op, Error> {
Op::basic(parameters, InnerOp(add42), Some(InnerOp(sub42)), &GAMUT)
}
fn main() -> anyhow::Result<()> {
let mut prv = geodesy::prelude::Minimal::new();
prv.register_op("add42", OpConstructor(add42_constructor));
let add42 = prv.op("add42")?;
let cph = Coor2D::raw(12., 55.); let osl = Coor2D::raw(10., 60.); let sth = Coor2D::raw(59., 18.); let hel = Coor2D::raw(60., 25.);
let mut data = [osl, cph, sth, hel];
for coord in data {
println!(" {:?}", coord);
}
assert_eq!(prv.apply(add42, Fwd, &mut data)?, 4);
println!("add42 (fwd):");
for coord in data {
println!(" {:?}", coord);
}
assert_eq!(prv.apply(add42, Inv, &mut data)?, 4);
println!("add42 (inv):");
for coord in data {
println!(" {:?}", coord);
}
Ok(())
}