diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2021-03-18 18:54:01 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2021-03-18 20:09:00 +0100 |
| commit | e5d09fbbe99f87efdb9ed23d6770fa0f62fdffcf (patch) | |
| tree | 77f4aff3d3de7214d23350cb7f2149544aa28c1a | |
| parent | 5003b3dc31d422dd568eaa6d8339ecdb0df2c526 (diff) | |
| download | rust-e5d09fbbe99f87efdb9ed23d6770fa0f62fdffcf.tar.gz rust-e5d09fbbe99f87efdb9ed23d6770fa0f62fdffcf.zip | |
Simplify IntEncodedWithFixedSize.
| -rw-r--r-- | compiler/rustc_serialize/src/lib.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_serialize/src/opaque.rs | 18 |
2 files changed, 7 insertions, 13 deletions
diff --git a/compiler/rustc_serialize/src/lib.rs b/compiler/rustc_serialize/src/lib.rs index e439ddcdaa9..40b9522949d 100644 --- a/compiler/rustc_serialize/src/lib.rs +++ b/compiler/rustc_serialize/src/lib.rs @@ -17,6 +17,8 @@ Core encoding and decoding interfaces. #![feature(vec_spare_capacity)] #![feature(core_intrinsics)] #![feature(int_bits_const)] +#![feature(maybe_uninit_array_assume_init)] +#![feature(maybe_uninit_uninit_array)] #![feature(maybe_uninit_slice)] #![feature(new_uninit)] #![cfg_attr(test, feature(test))] diff --git a/compiler/rustc_serialize/src/opaque.rs b/compiler/rustc_serialize/src/opaque.rs index 8d833dbf88e..6aad3f498e9 100644 --- a/compiler/rustc_serialize/src/opaque.rs +++ b/compiler/rustc_serialize/src/opaque.rs @@ -729,9 +729,7 @@ impl IntEncodedWithFixedSize { impl serialize::Encodable<Encoder> for IntEncodedWithFixedSize { fn encode(&self, e: &mut Encoder) -> EncodeResult { let start_pos = e.position(); - for i in 0..IntEncodedWithFixedSize::ENCODED_SIZE { - ((self.0 >> (i * 8)) as u8).encode(e)?; - } + e.emit_raw_bytes(&self.0.to_le_bytes()); let end_pos = e.position(); assert_eq!((end_pos - start_pos), IntEncodedWithFixedSize::ENCODED_SIZE); Ok(()) @@ -741,9 +739,7 @@ impl serialize::Encodable<Encoder> for IntEncodedWithFixedSize { impl serialize::Encodable<FileEncoder> for IntEncodedWithFixedSize { fn encode(&self, e: &mut FileEncoder) -> FileEncodeResult { let start_pos = e.position(); - for i in 0..IntEncodedWithFixedSize::ENCODED_SIZE { - ((self.0 >> (i * 8)) as u8).encode(e)?; - } + e.emit_raw_bytes(&self.0.to_le_bytes())?; let end_pos = e.position(); assert_eq!((end_pos - start_pos), IntEncodedWithFixedSize::ENCODED_SIZE); Ok(()) @@ -752,17 +748,13 @@ impl serialize::Encodable<FileEncoder> for IntEncodedWithFixedSize { impl<'a> serialize::Decodable<Decoder<'a>> for IntEncodedWithFixedSize { fn decode(decoder: &mut Decoder<'a>) -> Result<IntEncodedWithFixedSize, String> { - let mut value: u64 = 0; + let mut bytes = MaybeUninit::uninit_array(); let start_pos = decoder.position(); - - for i in 0..IntEncodedWithFixedSize::ENCODED_SIZE { - let byte: u8 = serialize::Decodable::decode(decoder)?; - value |= (byte as u64) << (i * 8); - } - + decoder.read_raw_bytes(&mut bytes)?; let end_pos = decoder.position(); assert_eq!((end_pos - start_pos), IntEncodedWithFixedSize::ENCODED_SIZE); + let value = u64::from_le_bytes(unsafe { MaybeUninit::array_assume_init(bytes) }); Ok(IntEncodedWithFixedSize(value)) } } |
