From 124f869faae3a0f75a3825e6a8e195c17f3c626a Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 16 Oct 2014 23:34:20 +0400 Subject: initial for idea --- .../java/com/github/junrar/unpack/vm/BitInput.java | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 org.fox.ttcomics/src/main/java/com/github/junrar/unpack/vm/BitInput.java (limited to 'org.fox.ttcomics/src/main/java/com/github/junrar/unpack/vm/BitInput.java') diff --git a/org.fox.ttcomics/src/main/java/com/github/junrar/unpack/vm/BitInput.java b/org.fox.ttcomics/src/main/java/com/github/junrar/unpack/vm/BitInput.java new file mode 100644 index 0000000..603cb77 --- /dev/null +++ b/org.fox.ttcomics/src/main/java/com/github/junrar/unpack/vm/BitInput.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2007 innoSysTec (R) GmbH, Germany. All rights reserved. + * Original author: Edmund Wagner + * Creation date: 31.05.2007 + * + * Source: $HeadURL$ + * Last changed: $LastChangedDate$ + * + * the unrar licence applies to all junrar source and binary distributions + * you are not allowed to use this source to re-create the RAR compression algorithm + * + * Here some html entities which can be used for escaping javadoc tags: + * "&": "&" or "&" + * "<": "<" or "<" + * ">": ">" or ">" + * "@": "@" + */ +package com.github.junrar.unpack.vm; + +/** + * DOCUMENT ME + * + * @author $LastChangedBy$ + * @version $LastChangedRevision$ + */ +public class BitInput { + /** + * the max size of the input + */ + public static final int MAX_SIZE = 0x8000; + protected int inAddr; + protected int inBit; + protected byte[] inBuf; + + /** + * + */ + public void InitBitInput() + { + inAddr=0; + inBit=0; + } + /** + * @param Bits + */ + public void addbits(int Bits) + { + Bits+=inBit; + inAddr+=Bits>>3; + inBit=Bits&7; + } + + /** + * @return the bits (unsigned short) + */ + public int getbits() + { +// int BitField=0; +// BitField|=(int)(inBuf[inAddr] << 16)&0xFF0000; +// BitField|=(int)(inBuf[inAddr+1] << 8)&0xff00; +// BitField|=(int)(inBuf[inAddr+2])&0xFF; +// BitField >>>= (8-inBit); +// return (BitField & 0xffff); + return (((((inBuf[inAddr] & 0xff) << 16) + + ((inBuf[inAddr+1] & 0xff) << 8) + + ((inBuf[inAddr+2] & 0xff))) >>> (8-inBit)) & 0xffff); + } + + /** + * + */ + public BitInput() + { + inBuf=new byte[MAX_SIZE]; + } + + /** + * @param Bits add the bits + */ + public void faddbits(int Bits) + { + addbits(Bits); + } + + + /** + * @return get the bits + */ + public int fgetbits() + { + return(getbits()); + } + + /** + * Indicates an Overfow + * @param IncPtr how many bytes to inc + * @return true if an Oververflow would occur + */ + public boolean Overflow(int IncPtr) { + return(inAddr+IncPtr>=MAX_SIZE); + } + public byte[] getInBuf() + { + return inBuf; + } + + +} -- cgit v1.2.3