module BinData::Int

def create_read_code(nbits, endian)

def create_read_code(nbits, endian)
  bits_per_word = bytes_per_word(nbits) * 8
  nwords        = nbits / bits_per_word
  nbytes        = nbits / 8
  idx = (0 ... nwords).to_a
  idx.reverse! if (endian == :big)
  parts = (0 ... nwords).collect do |i|
            if i.zero?
              "a.at(#{idx[i]})"
            else
              "(a.at(#{idx[i]}) << #{bits_per_word * i})"
            end
          end
  unpack_str = "a = io.readbytes(#{nbytes}).unpack('#{pack_directive(nbits, endian)}')"
  assemble_str = parts.join(" + ")
  "(#{unpack_str}; #{assemble_str})"
end