anchor.diff:              loop count 0 0
   
           let readRest () =
  -            if bufferBytePos = 8 then 
  -                bufferBytePos <- 0
  -                bufferIdx     <- bufferIdx + 1
  +            let offset count (buffer : byte[]) = 
  +                let temp = buffer.[0]
  +                buffer.[0] <- temp <<< count
  +
  +                for idx = 1 to buffer.Length-1 do
  +                    let byte, prevByte = buffer.[idx], buffer.[idx-1]
  +                    buffer.[idx-1] <- byte >>> (8 - count) ||| prevByte
  +                    buffer.[idx]   <- byte <<< count
  +            
  +                buffer
  +
  +            incrBufferIdx()
   
               let leftOnBuffer = bufferSize - bufferIdx
               let leftOnStream = stream.Length - stream.Position |> int
  
positive.code:             let arrSize = leftOnBuffer + leftOnStream
              let bytes   = Array.zeroCreate<byte> arrSize
  
              // read the bytes left on the buffer
              for idx = bufferIdx to bufferSize-1 do
                  bytes.[idx - bufferIdx] <- buffer.[idx]
  
              // then read bytes left on the stream
              if stream.Read(bytes, leftOnBuffer, leftOnStream) <> leftOnStream then
                  raise InsufficientBytes
  
              if bufferBytePos = 0 then bytes
              else [||]
  
          let readFrom (Reader(count, convert)) =
              match count with
  
negative.code:         let mutable bufferIdx     = 0
          let mutable bufferBytePos = 0
  
          let incrBufferIdx () =
              if bufferBytePos = 8 then 
                  bufferBytePos <- 0
                  bufferIdx     <- bufferIdx + 1
  
          let readIntoBuffer () =
              match stream.Read(buffer, 0, defaultBufferSize) with
              | -1 -> raise InsufficientBytes
  