mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-11-22 18:47:44 -05:00
rustfmt everything
I want to make the project more accessible by not expecting folks to match my idiosyncratic style. Now almost [1] everything is written in the "standard" style. CI enforces this. [1] "Almost": I used #[rustfmt::skip] in a few sections where I felt aligning things in columns significantly improves readability.
This commit is contained in:
@@ -34,28 +34,35 @@
|
||||
/// encoding](https://developers.google.com/protocol-buffers/docs/encoding#types). Uses the low bit
|
||||
/// to indicate signedness (1 = negative, 0 = non-negative).
|
||||
#[inline(always)]
|
||||
pub fn zigzag32(i: i32) -> u32 { ((i << 1) as u32) ^ ((i >> 31) as u32) }
|
||||
pub fn zigzag32(i: i32) -> u32 {
|
||||
((i << 1) as u32) ^ ((i >> 31) as u32)
|
||||
}
|
||||
|
||||
/// Zigzag-decodes to a signed integer.
|
||||
/// See `zigzag`.
|
||||
#[inline(always)]
|
||||
pub fn unzigzag32(i: u32) -> i32 { ((i >> 1) as i32) ^ -((i & 1) as i32) }
|
||||
pub fn unzigzag32(i: u32) -> i32 {
|
||||
((i >> 1) as i32) ^ -((i & 1) as i32)
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn decode_varint32(data: &[u8], i: usize) -> Result<(u32, usize), ()> {
|
||||
// Unroll a few likely possibilities before going into the robust out-of-line loop.
|
||||
// This aids branch prediction.
|
||||
if data.len() > i && (data[i] & 0x80) == 0 {
|
||||
return Ok((data[i] as u32, i+1))
|
||||
} else if data.len() > i + 1 && (data[i+1] & 0x80) == 0 {
|
||||
return Ok((( (data[i] & 0x7f) as u32) |
|
||||
(( data[i+1] as u32) << 7),
|
||||
i+2))
|
||||
} else if data.len() > i + 2 && (data[i+2] & 0x80) == 0 {
|
||||
return Ok((( (data[i] & 0x7f) as u32) |
|
||||
(((data[i+1] & 0x7f) as u32) << 7) |
|
||||
(( data[i+2] as u32) << 14),
|
||||
i+3))
|
||||
return Ok((data[i] as u32, i + 1));
|
||||
} else if data.len() > i + 1 && (data[i + 1] & 0x80) == 0 {
|
||||
return Ok((
|
||||
((data[i] & 0x7f) as u32) | ((data[i + 1] as u32) << 7),
|
||||
i + 2,
|
||||
));
|
||||
} else if data.len() > i + 2 && (data[i + 2] & 0x80) == 0 {
|
||||
return Ok((
|
||||
((data[i] & 0x7f) as u32)
|
||||
| (((data[i + 1] & 0x7f) as u32) << 7)
|
||||
| ((data[i + 2] as u32) << 14),
|
||||
i + 3,
|
||||
));
|
||||
}
|
||||
decode_varint32_slow(data, i)
|
||||
}
|
||||
@@ -67,11 +74,11 @@ fn decode_varint32_slow(data: &[u8], mut i: usize) -> Result<(u32, usize), ()> {
|
||||
let mut shift = 0;
|
||||
loop {
|
||||
if i == l {
|
||||
return Err(())
|
||||
return Err(());
|
||||
}
|
||||
let b = data[i];
|
||||
if shift == 28 && (b & 0xf0) != 0 {
|
||||
return Err(())
|
||||
return Err(());
|
||||
}
|
||||
out |= ((b & 0x7f) as u32) << shift;
|
||||
shift += 7;
|
||||
@@ -87,27 +94,31 @@ pub fn append_varint32(i: u32, data: &mut Vec<u8>) {
|
||||
if i < 1u32 << 7 {
|
||||
data.push(i as u8);
|
||||
} else if i < 1u32 << 14 {
|
||||
data.extend_from_slice(&[(( i & 0x7F) | 0x80) as u8,
|
||||
(i >> 7) as u8]);
|
||||
data.extend_from_slice(&[((i & 0x7F) | 0x80) as u8, (i >> 7) as u8]);
|
||||
} else if i < 1u32 << 21 {
|
||||
data.extend_from_slice(&[(( i & 0x7F) | 0x80) as u8,
|
||||
(((i >> 7) & 0x7F) | 0x80) as u8,
|
||||
(i >> 14) as u8]);
|
||||
data.extend_from_slice(&[
|
||||
((i & 0x7F) | 0x80) as u8,
|
||||
(((i >> 7) & 0x7F) | 0x80) as u8,
|
||||
(i >> 14) as u8,
|
||||
]);
|
||||
} else if i < 1u32 << 28 {
|
||||
data.extend_from_slice(&[(( i & 0x7F) | 0x80) as u8,
|
||||
(((i >> 7) & 0x7F) | 0x80) as u8,
|
||||
(((i >> 14) & 0x7F) | 0x80) as u8,
|
||||
(i >> 21) as u8]);
|
||||
data.extend_from_slice(&[
|
||||
((i & 0x7F) | 0x80) as u8,
|
||||
(((i >> 7) & 0x7F) | 0x80) as u8,
|
||||
(((i >> 14) & 0x7F) | 0x80) as u8,
|
||||
(i >> 21) as u8,
|
||||
]);
|
||||
} else {
|
||||
data.extend_from_slice(&[(( i & 0x7F) | 0x80) as u8,
|
||||
(((i >> 7) & 0x7F) | 0x80) as u8,
|
||||
(((i >> 14) & 0x7F) | 0x80) as u8,
|
||||
(((i >> 21) & 0x7F) | 0x80) as u8,
|
||||
(i >> 28) as u8]);
|
||||
data.extend_from_slice(&[
|
||||
((i & 0x7F) | 0x80) as u8,
|
||||
(((i >> 7) & 0x7F) | 0x80) as u8,
|
||||
(((i >> 14) & 0x7F) | 0x80) as u8,
|
||||
(((i >> 21) & 0x7F) | 0x80) as u8,
|
||||
(i >> 28) as u8,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -119,12 +130,30 @@ mod tests {
|
||||
encoded: u32,
|
||||
}
|
||||
let tests = [
|
||||
Test{decoded: 0, encoded: 0},
|
||||
Test{decoded: -1, encoded: 1},
|
||||
Test{decoded: 1, encoded: 2},
|
||||
Test{decoded: -2, encoded: 3},
|
||||
Test{decoded: 2147483647, encoded: 4294967294},
|
||||
Test{decoded: -2147483648, encoded: 4294967295},
|
||||
Test {
|
||||
decoded: 0,
|
||||
encoded: 0,
|
||||
},
|
||||
Test {
|
||||
decoded: -1,
|
||||
encoded: 1,
|
||||
},
|
||||
Test {
|
||||
decoded: 1,
|
||||
encoded: 2,
|
||||
},
|
||||
Test {
|
||||
decoded: -2,
|
||||
encoded: 3,
|
||||
},
|
||||
Test {
|
||||
decoded: 2147483647,
|
||||
encoded: 4294967294,
|
||||
},
|
||||
Test {
|
||||
decoded: -2147483648,
|
||||
encoded: 4294967295,
|
||||
},
|
||||
];
|
||||
for test in &tests {
|
||||
assert_eq!(test.encoded, zigzag32(test.decoded));
|
||||
@@ -139,11 +168,26 @@ mod tests {
|
||||
encoded: &'static [u8],
|
||||
}
|
||||
let tests = [
|
||||
Test{decoded: 1, encoded: b"\x01"},
|
||||
Test{decoded: 257, encoded: b"\x81\x02"},
|
||||
Test{decoded: 49409, encoded: b"\x81\x82\x03"},
|
||||
Test{decoded: 8438017, encoded: b"\x81\x82\x83\x04"},
|
||||
Test{decoded: 1350615297, encoded: b"\x81\x82\x83\x84\x05"},
|
||||
Test {
|
||||
decoded: 1,
|
||||
encoded: b"\x01",
|
||||
},
|
||||
Test {
|
||||
decoded: 257,
|
||||
encoded: b"\x81\x02",
|
||||
},
|
||||
Test {
|
||||
decoded: 49409,
|
||||
encoded: b"\x81\x82\x03",
|
||||
},
|
||||
Test {
|
||||
decoded: 8438017,
|
||||
encoded: b"\x81\x82\x83\x04",
|
||||
},
|
||||
Test {
|
||||
decoded: 1350615297,
|
||||
encoded: b"\x81\x82\x83\x84\x05",
|
||||
},
|
||||
];
|
||||
for test in &tests {
|
||||
// Test encoding to an empty buffer.
|
||||
@@ -161,13 +205,17 @@ mod tests {
|
||||
assert_eq!(out, buf);
|
||||
|
||||
// Test decoding from the beginning of the string.
|
||||
assert_eq!((test.decoded, test.encoded.len()),
|
||||
decode_varint32(test.encoded, 0).unwrap());
|
||||
assert_eq!(
|
||||
(test.decoded, test.encoded.len()),
|
||||
decode_varint32(test.encoded, 0).unwrap()
|
||||
);
|
||||
|
||||
// ...and from the middle of a buffer.
|
||||
buf.push(b'x');
|
||||
assert_eq!((test.decoded, test.encoded.len() + 1),
|
||||
decode_varint32(&buf, 1).unwrap());
|
||||
assert_eq!(
|
||||
(test.decoded, test.encoded.len() + 1),
|
||||
decode_varint32(&buf, 1).unwrap()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +228,6 @@ mod tests {
|
||||
b"\x80\x80",
|
||||
b"\x80\x80\x80",
|
||||
b"\x80\x80\x80\x80",
|
||||
|
||||
// int32 overflows
|
||||
b"\x80\x80\x80\x80\x80",
|
||||
b"\x80\x80\x80\x80\x80\x00",
|
||||
|
||||
Reference in New Issue
Block a user