diff options
Diffstat (limited to 'org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/unpack/ppm/State.java')
-rw-r--r-- | org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/unpack/ppm/State.java | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/unpack/ppm/State.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/unpack/ppm/State.java new file mode 100644 index 0000000..ec131f2 --- /dev/null +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/unpack/ppm/State.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2007 innoSysTec (R) GmbH, Germany. All rights reserved. + * Original author: Edmund Wagner + * Creation date: 01.06.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 org.fox.ttcomics2.junrar.unpack.ppm; + +import org.fox.ttcomics2.junrar.io.Raw; + +public class State extends Pointer { + + public static final int size = 6; + + public State(byte[] mem) { + super(mem); + } + + public static void ppmdSwap(State ptr1, State ptr2) { + byte[] mem1 = ptr1.mem, mem2 = ptr2.mem; + for (int i = 0, pos1 = ptr1.pos, pos2 = ptr2.pos; i < size; i++, pos1++, pos2++) { + byte temp = mem1[pos1]; + mem1[pos1] = mem2[pos2]; + mem2[pos2] = temp; + } + } + + public State init(byte[] mem) { + this.mem = mem; + pos = 0; + return this; + } + + public int getSymbol() { + return mem[pos] & 0xff; + } + + public void setSymbol(int symbol) { + mem[pos] = (byte) symbol; + } + + public int getFreq() { + return mem[pos + 1] & 0xff; + } + + public void setFreq(int freq) { + mem[pos + 1] = (byte) freq; + } + + public void incFreq(int dFreq) { + mem[pos + 1] += dFreq; + } + + public int getSuccessor() { + return Raw.readIntLittleEndian(mem, pos + 2); + } + + public void setSuccessor(int successor) { + Raw.writeIntLittleEndian(mem, pos + 2, successor); + } + + public void setSuccessor(PPMContext successor) { + setSuccessor(successor.getAddress()); + } + + public void setValues(StateRef state) { + setSymbol(state.getSymbol()); + setFreq(state.getFreq()); + setSuccessor(state.getSuccessor()); + } + + public void setValues(State ptr) { + System.arraycopy(ptr.mem, ptr.pos, mem, pos, size); + } + + public State decAddress() { + setAddress(pos - size); + return this; + } + + public State incAddress() { + setAddress(pos + size); + return this; + } + + public String toString() { + StringBuilder buffer = new StringBuilder(); + buffer.append("State["); + buffer.append("\n pos="); + buffer.append(pos); + buffer.append("\n size="); + buffer.append(size); + buffer.append("\n symbol="); + buffer.append(getSymbol()); + buffer.append("\n freq="); + buffer.append(getFreq()); + buffer.append("\n successor="); + buffer.append(getSuccessor()); + buffer.append("\n]"); + return buffer.toString(); + } +} |