]> git.nihav.org Git - nihav.git/blobdiff - src/io/intcode.rs
Rust2018: use new addressing scheme
[nihav.git] / src / io / intcode.rs
index 141377dc686f09e16993c958c7e705ada9d210c0..8d879205762a0c50ba8a1dc6756821ab2aa0befe 100644 (file)
@@ -1,4 +1,4 @@
-use io::bitreader::{BitReader, BitReaderError, BitReaderResult};
+use crate::io::bitreader::{BitReader, BitReaderError, BitReaderResult};
 
 #[derive(Debug)]
 pub enum UintCodeType {
@@ -33,7 +33,7 @@ fn read_unary(br: &mut BitReader, terminator: u32) -> BitReaderResult<u32> {
     }
 }
 
-fn read_unary_lim(br: &mut BitReader, terminator: u32, len: u32) -> BitReaderResult<u32> {
+fn read_unary_lim(br: &mut BitReader, len: u32, terminator: u32) -> BitReaderResult<u32> {
     let mut res: u32 = 0;
     loop {
         if br.read(1)? == terminator { return Ok(res); }
@@ -71,11 +71,11 @@ fn read_rice(br: &mut BitReader, k: u8) -> BitReaderResult<u32> {
 }
 
 fn read_gamma(br: &mut BitReader) -> BitReaderResult<u32> {
-    let mut ret = 0;
+    let mut ret = 1;
     while br.read(1)? != 1 {
         ret = (ret << 1) | br.read(1)?;
     }
-    Ok(ret)
+    Ok(ret - 1)
 }
 
 fn read_gammap(br: &mut BitReader) -> BitReaderResult<u32> {
@@ -96,11 +96,12 @@ fn uval_to_sval0pm(uval: u32) -> i32 {
 }
 
 impl<'a> IntCodeReader for BitReader<'a> {
+    #[inline(always)]
     fn read_code(&mut self, t: UintCodeType) -> BitReaderResult<u32> {
         match t {
             UintCodeType::UnaryOnes               => read_unary(self, 0),
             UintCodeType::UnaryZeroes             => read_unary(self, 1),
-            UintCodeType::LimitedUnary(len, term) => read_unary_lim(self, term, len),
+            UintCodeType::LimitedUnary(len, term) => read_unary_lim(self, len, term),
             UintCodeType::Unary012                => read_unary_lim(self, 2, 0),
             UintCodeType::Unary210                => read_unary210(self),
             UintCodeType::Golomb(m)               => read_golomb(self, m),
@@ -130,7 +131,7 @@ impl<'a> IntCodeReader for BitReader<'a> {
 #[cfg(test)]
 mod test {
     use super::*;
-    use io::bitreader::*;
+    use crate::io::bitreader::*;
 
     #[test]
     fn int_codes() {