Zigzag

primitive ZigZag
  fun encode_32(n: I32): U32 =>
    ((n << 1) xor (n >> 31)).u32()

  fun encode_64(n: I64): U64 =>
    ((n << 1) xor (n >> 63)).u64()

  fun decode_32(n: U32): I32 =>
    ((n >> 1) xor (n and 1).neg()).i32()

  fun decode_64(n: U64): I64 =>
    ((n >> 1) xor (n and 1).neg()).i64()