pub struct ZigZagCodec<T, P = NonStrict> { /* private fields */ }Expand description
Type-level unchecked ZigZag + unsigned LEB128 codec.
§Type Parameters
T: Signed integer value type to decode from ZigZag-encoded LEB128 bytes and encode into ZigZag-encoded LEB128 bytes.P: Type-level decoding policy implementingLeb128DecodePolicyfor the underlying unsigned LEB128 payload. Usecrate::Strictto reject non-canonical inputs, orNonStrictto accept non-canonical inputs.
§Examples
use qubit_codec_binary::{
NonStrict,
ZigZagCodec,
};
let mut output = [0_u8; ZigZagCodec::<i64, NonStrict>::MAX_UNITS_PER_VALUE];
let written = unsafe {
ZigZagCodec::<i64, NonStrict>::encode_unchecked(-42, &mut output, 0)
};
assert_eq!(1, written);
let (decoded, consumed) = unsafe {
ZigZagCodec::<i64, NonStrict>::decode_unchecked(&output[..written], 0)
}.expect("canonical ZigZag LEB128 value should decode");
assert_eq!(-42, decoded);
assert_eq!(1, consumed.get());Implementations§
Source§impl<P> ZigZagCodec<i8, P>where
P: Leb128DecodePolicy,
impl<P> ZigZagCodec<i8, P>where
P: Leb128DecodePolicy,
Sourcepub const MIN_UNITS_PER_VALUE: usize = 1
pub const MIN_UNITS_PER_VALUE: usize = 1
Minimum number of bytes that can represent a complete value.
Sourcepub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u8, NonStrict>::MAX_UNITS_PER_VALUE
pub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u8, NonStrict>::MAX_UNITS_PER_VALUE
Maximum number of bytes required to encode or decode this type.
Sourcepub unsafe fn decode_unchecked(
input: &[u8],
index: usize,
) -> Result<(i8, NonZeroUsize), Leb128DecodeError>
pub unsafe fn decode_unchecked( input: &[u8], index: usize, ) -> Result<(i8, NonZeroUsize), Leb128DecodeError>
Decodes a value from input starting at index without bounds
checks.
§Parameters
input: Source byte buffer.index: Start index ininput.
§Returns
Returns the decoded value and the non-zero number of consumed bytes.
§Errors
Returns Leb128DecodeError if the underlying LEB128 bytes are
incomplete, malformed, or non-canonical under strict policy.
§Safety
The caller must guarantee that index is a valid boundary and
at least Self::MIN_UNITS_PER_VALUE byte is readable from
index.
Sourcepub unsafe fn encode_unchecked(
value: i8,
output: &mut [u8],
index: usize,
) -> usize
pub unsafe fn encode_unchecked( value: i8, output: &mut [u8], index: usize, ) -> usize
Encodes value into output starting at index without bounds
checks.
§Parameters
value: Value to encode.output: Destination byte buffer.index: Start index inoutput.
§Returns
Returns the number of written bytes.
§Safety
The caller must guarantee that output.as_mut_ptr().add(index)
is valid to write Self::MAX_UNITS_PER_VALUE bytes.
Source§impl<P> ZigZagCodec<i16, P>where
P: Leb128DecodePolicy,
impl<P> ZigZagCodec<i16, P>where
P: Leb128DecodePolicy,
Sourcepub const MIN_UNITS_PER_VALUE: usize = 1
pub const MIN_UNITS_PER_VALUE: usize = 1
Minimum number of bytes that can represent a complete value.
Sourcepub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u16, NonStrict>::MAX_UNITS_PER_VALUE
pub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u16, NonStrict>::MAX_UNITS_PER_VALUE
Maximum number of bytes required to encode or decode this type.
Sourcepub unsafe fn decode_unchecked(
input: &[u8],
index: usize,
) -> Result<(i16, NonZeroUsize), Leb128DecodeError>
pub unsafe fn decode_unchecked( input: &[u8], index: usize, ) -> Result<(i16, NonZeroUsize), Leb128DecodeError>
Decodes a value from input starting at index without bounds
checks.
§Parameters
input: Source byte buffer.index: Start index ininput.
§Returns
Returns the decoded value and the non-zero number of consumed bytes.
§Errors
Returns Leb128DecodeError if the underlying LEB128 bytes are
incomplete, malformed, or non-canonical under strict policy.
§Safety
The caller must guarantee that index is a valid boundary and
at least Self::MIN_UNITS_PER_VALUE byte is readable from
index.
Sourcepub unsafe fn encode_unchecked(
value: i16,
output: &mut [u8],
index: usize,
) -> usize
pub unsafe fn encode_unchecked( value: i16, output: &mut [u8], index: usize, ) -> usize
Encodes value into output starting at index without bounds
checks.
§Parameters
value: Value to encode.output: Destination byte buffer.index: Start index inoutput.
§Returns
Returns the number of written bytes.
§Safety
The caller must guarantee that output.as_mut_ptr().add(index)
is valid to write Self::MAX_UNITS_PER_VALUE bytes.
Source§impl<P> ZigZagCodec<i32, P>where
P: Leb128DecodePolicy,
impl<P> ZigZagCodec<i32, P>where
P: Leb128DecodePolicy,
Sourcepub const MIN_UNITS_PER_VALUE: usize = 1
pub const MIN_UNITS_PER_VALUE: usize = 1
Minimum number of bytes that can represent a complete value.
Sourcepub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u32, NonStrict>::MAX_UNITS_PER_VALUE
pub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u32, NonStrict>::MAX_UNITS_PER_VALUE
Maximum number of bytes required to encode or decode this type.
Sourcepub unsafe fn decode_unchecked(
input: &[u8],
index: usize,
) -> Result<(i32, NonZeroUsize), Leb128DecodeError>
pub unsafe fn decode_unchecked( input: &[u8], index: usize, ) -> Result<(i32, NonZeroUsize), Leb128DecodeError>
Decodes a value from input starting at index without bounds
checks.
§Parameters
input: Source byte buffer.index: Start index ininput.
§Returns
Returns the decoded value and the non-zero number of consumed bytes.
§Errors
Returns Leb128DecodeError if the underlying LEB128 bytes are
incomplete, malformed, or non-canonical under strict policy.
§Safety
The caller must guarantee that index is a valid boundary and
at least Self::MIN_UNITS_PER_VALUE byte is readable from
index.
Sourcepub unsafe fn encode_unchecked(
value: i32,
output: &mut [u8],
index: usize,
) -> usize
pub unsafe fn encode_unchecked( value: i32, output: &mut [u8], index: usize, ) -> usize
Encodes value into output starting at index without bounds
checks.
§Parameters
value: Value to encode.output: Destination byte buffer.index: Start index inoutput.
§Returns
Returns the number of written bytes.
§Safety
The caller must guarantee that output.as_mut_ptr().add(index)
is valid to write Self::MAX_UNITS_PER_VALUE bytes.
Source§impl<P> ZigZagCodec<i64, P>where
P: Leb128DecodePolicy,
impl<P> ZigZagCodec<i64, P>where
P: Leb128DecodePolicy,
Sourcepub const MIN_UNITS_PER_VALUE: usize = 1
pub const MIN_UNITS_PER_VALUE: usize = 1
Minimum number of bytes that can represent a complete value.
Sourcepub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u64, NonStrict>::MAX_UNITS_PER_VALUE
pub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u64, NonStrict>::MAX_UNITS_PER_VALUE
Maximum number of bytes required to encode or decode this type.
Sourcepub unsafe fn decode_unchecked(
input: &[u8],
index: usize,
) -> Result<(i64, NonZeroUsize), Leb128DecodeError>
pub unsafe fn decode_unchecked( input: &[u8], index: usize, ) -> Result<(i64, NonZeroUsize), Leb128DecodeError>
Decodes a value from input starting at index without bounds
checks.
§Parameters
input: Source byte buffer.index: Start index ininput.
§Returns
Returns the decoded value and the non-zero number of consumed bytes.
§Errors
Returns Leb128DecodeError if the underlying LEB128 bytes are
incomplete, malformed, or non-canonical under strict policy.
§Safety
The caller must guarantee that index is a valid boundary and
at least Self::MIN_UNITS_PER_VALUE byte is readable from
index.
Sourcepub unsafe fn encode_unchecked(
value: i64,
output: &mut [u8],
index: usize,
) -> usize
pub unsafe fn encode_unchecked( value: i64, output: &mut [u8], index: usize, ) -> usize
Encodes value into output starting at index without bounds
checks.
§Parameters
value: Value to encode.output: Destination byte buffer.index: Start index inoutput.
§Returns
Returns the number of written bytes.
§Safety
The caller must guarantee that output.as_mut_ptr().add(index)
is valid to write Self::MAX_UNITS_PER_VALUE bytes.
Source§impl<P> ZigZagCodec<i128, P>where
P: Leb128DecodePolicy,
impl<P> ZigZagCodec<i128, P>where
P: Leb128DecodePolicy,
Sourcepub const MIN_UNITS_PER_VALUE: usize = 1
pub const MIN_UNITS_PER_VALUE: usize = 1
Minimum number of bytes that can represent a complete value.
Sourcepub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u128, NonStrict>::MAX_UNITS_PER_VALUE
pub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<u128, NonStrict>::MAX_UNITS_PER_VALUE
Maximum number of bytes required to encode or decode this type.
Sourcepub unsafe fn decode_unchecked(
input: &[u8],
index: usize,
) -> Result<(i128, NonZeroUsize), Leb128DecodeError>
pub unsafe fn decode_unchecked( input: &[u8], index: usize, ) -> Result<(i128, NonZeroUsize), Leb128DecodeError>
Decodes a value from input starting at index without bounds
checks.
§Parameters
input: Source byte buffer.index: Start index ininput.
§Returns
Returns the decoded value and the non-zero number of consumed bytes.
§Errors
Returns Leb128DecodeError if the underlying LEB128 bytes are
incomplete, malformed, or non-canonical under strict policy.
§Safety
The caller must guarantee that index is a valid boundary and
at least Self::MIN_UNITS_PER_VALUE byte is readable from
index.
Sourcepub unsafe fn encode_unchecked(
value: i128,
output: &mut [u8],
index: usize,
) -> usize
pub unsafe fn encode_unchecked( value: i128, output: &mut [u8], index: usize, ) -> usize
Encodes value into output starting at index without bounds
checks.
§Parameters
value: Value to encode.output: Destination byte buffer.index: Start index inoutput.
§Returns
Returns the number of written bytes.
§Safety
The caller must guarantee that output.as_mut_ptr().add(index)
is valid to write Self::MAX_UNITS_PER_VALUE bytes.
Source§impl<P> ZigZagCodec<isize, P>where
P: Leb128DecodePolicy,
impl<P> ZigZagCodec<isize, P>where
P: Leb128DecodePolicy,
Sourcepub const MIN_UNITS_PER_VALUE: usize = 1
pub const MIN_UNITS_PER_VALUE: usize = 1
Minimum number of bytes that can represent a complete value.
Sourcepub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<usize, NonStrict>::MAX_UNITS_PER_VALUE
pub const MAX_UNITS_PER_VALUE: usize = Leb128Codec<usize, NonStrict>::MAX_UNITS_PER_VALUE
Maximum number of bytes required to encode or decode this type.
Sourcepub unsafe fn decode_unchecked(
input: &[u8],
index: usize,
) -> Result<(isize, NonZeroUsize), Leb128DecodeError>
pub unsafe fn decode_unchecked( input: &[u8], index: usize, ) -> Result<(isize, NonZeroUsize), Leb128DecodeError>
Decodes a value from input starting at index without bounds
checks.
§Parameters
input: Source byte buffer.index: Start index ininput.
§Returns
Returns the decoded value and the non-zero number of consumed bytes.
§Errors
Returns Leb128DecodeError if the underlying LEB128 bytes are
incomplete, malformed, or non-canonical under strict policy.
§Safety
The caller must guarantee that index is a valid boundary and
at least Self::MIN_UNITS_PER_VALUE byte is readable from
index.
Sourcepub unsafe fn encode_unchecked(
value: isize,
output: &mut [u8],
index: usize,
) -> usize
pub unsafe fn encode_unchecked( value: isize, output: &mut [u8], index: usize, ) -> usize
Encodes value into output starting at index without bounds
checks.
§Parameters
value: Value to encode.output: Destination byte buffer.index: Start index inoutput.
§Returns
Returns the number of written bytes.
§Safety
The caller must guarantee that output.as_mut_ptr().add(index)
is valid to write Self::MAX_UNITS_PER_VALUE bytes.
Trait Implementations§
Source§impl<T: Clone, P: Clone> Clone for ZigZagCodec<T, P>
impl<T: Clone, P: Clone> Clone for ZigZagCodec<T, P>
Source§fn clone(&self) -> ZigZagCodec<T, P>
fn clone(&self) -> ZigZagCodec<T, P>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<P> Codec for ZigZagCodec<i128, P>where
P: Leb128DecodePolicy,
impl<P> Codec for ZigZagCodec<i128, P>where
P: Leb128DecodePolicy,
Source§type DecodeError = Leb128DecodeError
type DecodeError = Leb128DecodeError
Source§type EncodeError = Infallible
type EncodeError = Infallible
Source§fn min_units_per_value(&self) -> NonZeroUsize
fn min_units_per_value(&self) -> NonZeroUsize
Source§fn max_units_per_value(&self) -> NonZeroUsize
fn max_units_per_value(&self) -> NonZeroUsize
Source§unsafe fn decode_unchecked(
&self,
input: &[u8],
index: usize,
) -> Result<(i128, NonZeroUsize), Self::DecodeError>
unsafe fn decode_unchecked( &self, input: &[u8], index: usize, ) -> Result<(i128, NonZeroUsize), Self::DecodeError>
Source§unsafe fn encode_unchecked(
&self,
value: &i128,
output: &mut [u8],
index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_unchecked( &self, value: &i128, output: &mut [u8], index: usize, ) -> Result<usize, Self::EncodeError>
Source§impl<P> Codec for ZigZagCodec<i16, P>where
P: Leb128DecodePolicy,
impl<P> Codec for ZigZagCodec<i16, P>where
P: Leb128DecodePolicy,
Source§type DecodeError = Leb128DecodeError
type DecodeError = Leb128DecodeError
Source§type EncodeError = Infallible
type EncodeError = Infallible
Source§fn min_units_per_value(&self) -> NonZeroUsize
fn min_units_per_value(&self) -> NonZeroUsize
Source§fn max_units_per_value(&self) -> NonZeroUsize
fn max_units_per_value(&self) -> NonZeroUsize
Source§unsafe fn decode_unchecked(
&self,
input: &[u8],
index: usize,
) -> Result<(i16, NonZeroUsize), Self::DecodeError>
unsafe fn decode_unchecked( &self, input: &[u8], index: usize, ) -> Result<(i16, NonZeroUsize), Self::DecodeError>
Source§unsafe fn encode_unchecked(
&self,
value: &i16,
output: &mut [u8],
index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_unchecked( &self, value: &i16, output: &mut [u8], index: usize, ) -> Result<usize, Self::EncodeError>
Source§impl<P> Codec for ZigZagCodec<i32, P>where
P: Leb128DecodePolicy,
impl<P> Codec for ZigZagCodec<i32, P>where
P: Leb128DecodePolicy,
Source§type DecodeError = Leb128DecodeError
type DecodeError = Leb128DecodeError
Source§type EncodeError = Infallible
type EncodeError = Infallible
Source§fn min_units_per_value(&self) -> NonZeroUsize
fn min_units_per_value(&self) -> NonZeroUsize
Source§fn max_units_per_value(&self) -> NonZeroUsize
fn max_units_per_value(&self) -> NonZeroUsize
Source§unsafe fn decode_unchecked(
&self,
input: &[u8],
index: usize,
) -> Result<(i32, NonZeroUsize), Self::DecodeError>
unsafe fn decode_unchecked( &self, input: &[u8], index: usize, ) -> Result<(i32, NonZeroUsize), Self::DecodeError>
Source§unsafe fn encode_unchecked(
&self,
value: &i32,
output: &mut [u8],
index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_unchecked( &self, value: &i32, output: &mut [u8], index: usize, ) -> Result<usize, Self::EncodeError>
Source§impl<P> Codec for ZigZagCodec<i64, P>where
P: Leb128DecodePolicy,
impl<P> Codec for ZigZagCodec<i64, P>where
P: Leb128DecodePolicy,
Source§type DecodeError = Leb128DecodeError
type DecodeError = Leb128DecodeError
Source§type EncodeError = Infallible
type EncodeError = Infallible
Source§fn min_units_per_value(&self) -> NonZeroUsize
fn min_units_per_value(&self) -> NonZeroUsize
Source§fn max_units_per_value(&self) -> NonZeroUsize
fn max_units_per_value(&self) -> NonZeroUsize
Source§unsafe fn decode_unchecked(
&self,
input: &[u8],
index: usize,
) -> Result<(i64, NonZeroUsize), Self::DecodeError>
unsafe fn decode_unchecked( &self, input: &[u8], index: usize, ) -> Result<(i64, NonZeroUsize), Self::DecodeError>
Source§unsafe fn encode_unchecked(
&self,
value: &i64,
output: &mut [u8],
index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_unchecked( &self, value: &i64, output: &mut [u8], index: usize, ) -> Result<usize, Self::EncodeError>
Source§impl<P> Codec for ZigZagCodec<i8, P>where
P: Leb128DecodePolicy,
impl<P> Codec for ZigZagCodec<i8, P>where
P: Leb128DecodePolicy,
Source§type DecodeError = Leb128DecodeError
type DecodeError = Leb128DecodeError
Source§type EncodeError = Infallible
type EncodeError = Infallible
Source§fn min_units_per_value(&self) -> NonZeroUsize
fn min_units_per_value(&self) -> NonZeroUsize
Source§fn max_units_per_value(&self) -> NonZeroUsize
fn max_units_per_value(&self) -> NonZeroUsize
Source§unsafe fn decode_unchecked(
&self,
input: &[u8],
index: usize,
) -> Result<(i8, NonZeroUsize), Self::DecodeError>
unsafe fn decode_unchecked( &self, input: &[u8], index: usize, ) -> Result<(i8, NonZeroUsize), Self::DecodeError>
Source§unsafe fn encode_unchecked(
&self,
value: &i8,
output: &mut [u8],
index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_unchecked( &self, value: &i8, output: &mut [u8], index: usize, ) -> Result<usize, Self::EncodeError>
Source§impl<P> Codec for ZigZagCodec<isize, P>where
P: Leb128DecodePolicy,
impl<P> Codec for ZigZagCodec<isize, P>where
P: Leb128DecodePolicy,
Source§type DecodeError = Leb128DecodeError
type DecodeError = Leb128DecodeError
Source§type EncodeError = Infallible
type EncodeError = Infallible
Source§fn min_units_per_value(&self) -> NonZeroUsize
fn min_units_per_value(&self) -> NonZeroUsize
Source§fn max_units_per_value(&self) -> NonZeroUsize
fn max_units_per_value(&self) -> NonZeroUsize
Source§unsafe fn decode_unchecked(
&self,
input: &[u8],
index: usize,
) -> Result<(isize, NonZeroUsize), Self::DecodeError>
unsafe fn decode_unchecked( &self, input: &[u8], index: usize, ) -> Result<(isize, NonZeroUsize), Self::DecodeError>
Source§unsafe fn encode_unchecked(
&self,
value: &isize,
output: &mut [u8],
index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_unchecked( &self, value: &isize, output: &mut [u8], index: usize, ) -> Result<usize, Self::EncodeError>
impl<T: Copy, P: Copy> Copy for ZigZagCodec<T, P>
Source§impl<T: Default, P: Default> Default for ZigZagCodec<T, P>
impl<T: Default, P: Default> Default for ZigZagCodec<T, P>
Source§fn default() -> ZigZagCodec<T, P>
fn default() -> ZigZagCodec<T, P>
impl<T: Eq, P: Eq> Eq for ZigZagCodec<T, P>
Source§impl<T: PartialEq, P: PartialEq> PartialEq for ZigZagCodec<T, P>
impl<T: PartialEq, P: PartialEq> PartialEq for ZigZagCodec<T, P>
Source§fn eq(&self, other: &ZigZagCodec<T, P>) -> bool
fn eq(&self, other: &ZigZagCodec<T, P>) -> bool
self and other values to be equal, and is used by ==.