module BinData::Int

def val_as_packed_words(nbits, endian, signed)

def val_as_packed_words(nbits, endian, signed)
  nwords = nbits / bits_per_word(nbits)
  mask   = (1 << bits_per_word(nbits)) - 1
  vals = (0 ... nwords).collect { |i| "val >> #{bits_per_word(nbits) * i}" }
  vals[0].sub!(/ >> 0\b/, "")  # Remove " >> 0" for optimisation
  vals.reverse! if (endian == :big)
  vals = vals.collect { |val| "#{val} & #{mask}" }  # TODO: "& mask" is needed to work around jruby bug. Remove this line when fixed.
  vals.join(",")
end