63 lines
1.2 KiB
Java
63 lines
1.2 KiB
Java
|
/**
|
||
|
*
|
||
|
Copyright (c) 2009 Kazuhiko Arase
|
||
|
|
||
|
URL: http://www.d-project.com/
|
||
|
|
||
|
Licensed under the MIT license:
|
||
|
http://www.opensource.org/licenses/mit-license.php
|
||
|
|
||
|
The word "QR Code" is registered trademark of
|
||
|
DENSO WAVE INCORPORATED
|
||
|
http://www.denso-wave.com/qrcode/faqpatent-e.html
|
||
|
*/
|
||
|
|
||
|
package com.pdfjet;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* BitBuffer
|
||
|
* @author Kazuhiko Arase
|
||
|
*/
|
||
|
class BitBuffer {
|
||
|
|
||
|
private byte[] buffer;
|
||
|
private int length;
|
||
|
private int increments = 32;
|
||
|
|
||
|
|
||
|
public BitBuffer() {
|
||
|
buffer = new byte[increments];
|
||
|
length = 0;
|
||
|
}
|
||
|
|
||
|
public byte[] getBuffer() {
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
public int getLengthInBits() {
|
||
|
return length;
|
||
|
}
|
||
|
|
||
|
public void put(int num, int length) {
|
||
|
for (int i = 0; i < length; i++) {
|
||
|
put(((num >>> (length - i - 1)) & 1) == 1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void put(boolean bit) {
|
||
|
if (length == buffer.length * 8) {
|
||
|
byte[] newBuffer = new byte[buffer.length + increments];
|
||
|
System.arraycopy(buffer, 0, newBuffer, 0, buffer.length);
|
||
|
buffer = newBuffer;
|
||
|
}
|
||
|
|
||
|
if (bit) {
|
||
|
buffer[length / 8] |= (0x80 >>> (length % 8));
|
||
|
}
|
||
|
|
||
|
length++;
|
||
|
}
|
||
|
|
||
|
}
|