Class: QrCodeMaker::QRBitBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/qr_code_maker/encoder.rb

Constant Summary collapse

PAD0 =
0xEC
PAD1 =
0x11

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version) ⇒ QRBitBuffer

Returns a new instance of QRBitBuffer.



452
453
454
455
456
# File 'lib/qr_code_maker/encoder.rb', line 452

def initialize(version)
  @version = version
  @buffer = []
  @length = 0
end

Instance Attribute Details

#bufferObject (readonly)

Returns the value of attribute buffer.



447
448
449
# File 'lib/qr_code_maker/encoder.rb', line 447

def buffer
  @buffer
end

Instance Method Details

#alphanumeric_encoding_start(length) ⇒ Object



491
492
493
494
# File 'lib/qr_code_maker/encoder.rb', line 491

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) ⇒ Object



486
487
488
489
# File 'lib/qr_code_maker/encoder.rb', line 486

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) ⇒ Object



512
513
514
# File 'lib/qr_code_maker/encoder.rb', line 512

def end_of_message(max_data_bits)
  put(0, 4) unless get_length_in_bits + 4 > max_data_bits
end

#get(index) ⇒ Object



458
459
460
461
# File 'lib/qr_code_maker/encoder.rb', line 458

def get(index)
  buf_index = (index / 8).floor
  (QRUtil.rszf(@buffer[buf_index], 7 - index % 8) & 1) == 1
end

#get_length_in_bitsObject



469
470
471
# File 'lib/qr_code_maker/encoder.rb', line 469

def get_length_in_bits
  @length
end

#numeric_encoding_start(length) ⇒ Object



496
497
498
499
# File 'lib/qr_code_maker/encoder.rb', line 496

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) ⇒ Object



501
502
503
504
505
506
507
508
509
510
# File 'lib/qr_code_maker/encoder.rb', line 501

def pad_until(prefered_size)
  while get_length_in_bits % 8 != 0
    put_bit(false)
  end

  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) ⇒ Object



463
464
465
466
467
# File 'lib/qr_code_maker/encoder.rb', line 463

def put(num, length)
  (0...length).each do |i|
    put_bit((QRUtil.rszf(num, length - i - 1) & 1) == 1)
  end
end

#put_bit(bit) ⇒ Object



473
474
475
476
477
478
479
480
481
482
483
484
# File 'lib/qr_code_maker/encoder.rb', line 473

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