]> git.lizzy.rs Git - rust.git/commitdiff
rustc_metadata: store dense indexes in little-endian instead of big.
authorEduard Burtescu <edy.burt@gmail.com>
Thu, 8 Sep 2016 16:54:29 +0000 (19:54 +0300)
committerEduard Burtescu <edy.burt@gmail.com>
Tue, 20 Sep 2016 17:08:04 +0000 (20:08 +0300)
src/librustc_metadata/index.rs

index 98a43c7639c3375655d788e7a4dfd4c7fcdc1031..80d5141c99ca5568363407410db4d7e748afba09 100644 (file)
@@ -44,7 +44,7 @@ pub fn lookup_item(&self, bytes: &[u8], def_index: DefIndex) -> Option<u32> {
         debug!("lookup_item: index={:?} words.len={:?}",
                index, words.len());
 
-        let position = u32::from_be(words[index]);
+        let position = u32::from_le(words[index]);
         if position == u32::MAX {
             debug!("lookup_item: position=u32::MAX");
             None
@@ -61,7 +61,7 @@ pub fn iter_enumerated<'a>(&self, bytes: &'a [u8])
             if position == u32::MAX {
                 None
             } else {
-                Some((DefIndex::new(index), u32::from_be(position)))
+                Some((DefIndex::new(index), u32::from_le(position)))
             }
         })
     }
@@ -100,13 +100,11 @@ pub fn record_index(&mut self, item: DefIndex, position: usize) {
                 "recorded position for item {:?} twice, first at {:?} and now at {:?}",
                 item, self.positions[item], position);
 
-        self.positions[item] = position;
+        self.positions[item] = position.to_le();
     }
 
     pub fn write_index(&self, buf: &mut Cursor<Vec<u8>>) {
-        for &position in &self.positions {
-            write_be_u32(buf, position);
-        }
+        buf.write_all(words_to_bytes(&self.positions)).unwrap();
     }
 }
 
@@ -120,7 +118,7 @@ pub struct DenseIndex {
 impl DenseIndex {
     pub fn lookup(&self, buf: &[u8], ix: u32) -> Option<u32> {
         let data = bytes_to_words(&buf[self.start..self.end]);
-        data.get(ix as usize).map(|d| u32::from_be(*d))
+        data.get(ix as usize).map(|d| u32::from_le(*d))
     }
     pub fn from_buf(buf: &[u8], start: usize, end: usize) -> Self {
         assert!((end-start)%4 == 0 && start <= end && end <= buf.len());
@@ -135,23 +133,16 @@ pub fn write_dense_index(entries: Vec<u32>, buf: &mut Cursor<Vec<u8>>) {
     let elen = entries.len();
     assert!(elen < u32::MAX as usize);
 
-    for entry in entries {
-        write_be_u32(buf, entry);
-    }
+    buf.write_all(words_to_bytes(&entries)).unwrap();
 
     info!("write_dense_index: {} entries", elen);
 }
 
-fn write_be_u32<W: Write>(w: &mut W, u: u32) {
-    let _ = w.write_all(&[
-        (u >> 24) as u8,
-        (u >> 16) as u8,
-        (u >>  8) as u8,
-        (u >>  0) as u8,
-    ]);
-}
-
 fn bytes_to_words(b: &[u8]) -> &[u32] {
     assert!(b.len() % 4 == 0);
     unsafe { slice::from_raw_parts(b.as_ptr() as *const u32, b.len()/4) }
 }
+
+fn words_to_bytes(w: &[u32]) -> &[u8] {
+    unsafe { slice::from_raw_parts(w.as_ptr() as *const u8, w.len()*4) }
+}