class RQRCodeCore::QRBitBuffer

Constants

PAD0
PAD1

Attributes

buffer[R]

Public Class Methods

new(version) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 10
def initialize(version)
  @version = version
  @buffer = []
  @length = 0
end

Public Instance Methods

alphanumeric_encoding_start(length) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 49
def alphanumeric_encoding_start(length)
  put(QRMODE[:mode_alpha_numk], 4)
  put(length, QRUtil.get_length_in_bits(QRMODE[:mode_alpha_numk], @version))
end
byte_encoding_start(length) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 44
def byte_encoding_start(length)
  put(QRMODE[:mode_8bit_byte], 4)
  put(length, QRUtil.get_length_in_bits(QRMODE[:mode_8bit_byte], @version))
end
end_of_message(max_data_bits) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 72
def end_of_message(max_data_bits)
  put(0, 4) unless get_length_in_bits + 4 > max_data_bits
end
get(index) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 16
def get(index)
  buf_index = (index / 8).floor
  ((QRUtil.rszf(@buffer[buf_index], 7 - index % 8)) & 1) == 1
end
get_length_in_bits() click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 27
def get_length_in_bits
  @length
end
numeric_encoding_start(length) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 54
def numeric_encoding_start(length)
  put(QRMODE[:mode_number], 4)
  put(length, QRUtil.get_length_in_bits(QRMODE[:mode_number], @version))
end
pad_until(prefered_size) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 59
def pad_until(prefered_size)
  # Align on byte
  while get_length_in_bits % 8 != 0
    put_bit(false)
  end

  # Pad with padding code words
  while get_length_in_bits < prefered_size
    put(PAD0, 8)
    put(PAD1, 8) if get_length_in_bits < prefered_size
  end
end
put(num, length) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 21
def put(num, length)
  (0...length).each do |i|
    put_bit(((QRUtil.rszf(num, length - i - 1)) & 1) == 1)
  end
end
put_bit(bit) click to toggle source
# File lib/rqrcode_core/qrcode/qr_bit_buffer.rb, line 31
def put_bit(bit)
  buf_index = (@length / 8).floor
  if @buffer.size <= buf_index
    @buffer << 0
  end

  if bit
    @buffer[buf_index] |= QRUtil.rszf(0x80, @length % 8)
  end

  @length += 1
end