blob: 2f1190508fbb8c0329ee2900b08c6ebc5ad06494 (
plain) (
blame)
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
|
#pragma once
#include <util/system/defaults.h>
namespace NYson {
////////////////////////////////////////////////////////////////////////////////
//! Functions that provide coding of integers with property: 0 <= f(x) <= 2 * |x|
//! Actually taken 'as is' from protobuf/wire_format_lite.h
inline ui32 ZigZagEncode32(i32 n) {
// Note: the right-shift must be arithmetic
return (ui32(n) << 1) ^ (n >> 31);
}
inline i32 ZigZagDecode32(ui32 n) {
return (n >> 1) ^ -static_cast<i32>(n & 1);
}
inline ui64 ZigZagEncode64(i64 n) {
// Note: the right-shift must be arithmetic
return (ui64(n) << 1) ^ (n >> 63);
}
inline i64 ZigZagDecode64(ui64 n) {
return (n >> 1) ^ -static_cast<i64>(n & 1);
}
////////////////////////////////////////////////////////////////////////////////
} // namespace NYson
|