1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::{Error, VInt64};
#[inline]
pub fn encode(value: i64) -> VInt64 {
value.into()
}
#[inline]
pub fn decode(input: &mut &[u8]) -> Result<i64, Error> {
super::decode(input).map(zigzag::decode)
}
#[inline]
pub fn encoded_len(value: i64) -> usize {
super::encoded_len(zigzag::encode(value))
}
pub mod zigzag {
#[inline]
pub fn encode(value: i64) -> u64 {
((value << 1) ^ (value >> 63)) as u64
}
#[inline]
pub fn decode(encoded: u64) -> i64 {
(encoded >> 1) as i64 ^ -((encoded & 1) as i64)
}
}