pub trait Zigzag<T>: Sealed {
    fn zigzag(self) -> T;
}
Expand description

An extension trait implemented for all Rust integers to encode and decode between signed and unsigned variants using zigzag encoding.

Examples

Encoding a signed integer:

use zende::Zigzag;

assert_eq!(0i8.zigzag(), 0u8);
assert_eq!((-1i8).zigzag(), 1u8);
assert_eq!(1i8.zigzag(), 2u8);

assert_eq!(i8::MIN.zigzag(), u8::MAX);
assert_eq!(i16::MIN.zigzag(), u16::MAX);
assert_eq!(i32::MIN.zigzag(), u32::MAX);
assert_eq!(i64::MIN.zigzag(), u64::MAX);
assert_eq!(i128::MIN.zigzag(), u128::MAX);

assert_eq!(isize::MIN.zigzag(), usize::MAX);

Decoding an unsigned integer:

use zende::Zigzag;

assert_eq!(0u8.zigzag(), 0i8);
assert_eq!(1u8.zigzag(), -1i8);
assert_eq!(2u8.zigzag(), 1i8);

assert_eq!(u8::MAX.zigzag(), i8::MIN);
assert_eq!(u16::MAX.zigzag(), i16::MIN);
assert_eq!(u32::MAX.zigzag(), i32::MIN);
assert_eq!(u64::MAX.zigzag(), i64::MIN);
assert_eq!(u128::MAX.zigzag(), i128::MIN);

assert_eq!(usize::MAX.zigzag(), isize::MIN);

Required Methods

Converts signed integers to unsigned integers and vice versa using zigzag encoding.

Examples
use zende::Zigzag;

assert_eq!(0i8.zigzag(), 0u8);
assert_eq!((-1i8).zigzag(), 1u8);
assert_eq!(1i8.zigzag(), 2u8);

assert_eq!(0u8.zigzag(), 0i8);
assert_eq!(1u8.zigzag(), -1i8);
assert_eq!(2u8.zigzag(), 1i8);

Implementations on Foreign Types

Implementors