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/ppm/State.java | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 org.fox.ttcomics/src/main/java/com/github/junrar/unpack/ppm/State.java (limited to 'org.fox.ttcomics/src/main/java/com/github/junrar/unpack/ppm/State.java') diff --git a/org.fox.ttcomics/src/main/java/com/github/junrar/unpack/ppm/State.java b/org.fox.ttcomics/src/main/java/com/github/junrar/unpack/ppm/State.java new file mode 100644 index 0000000..812fb40 --- /dev/null +++ b/org.fox.ttcomics/src/main/java/com/github/junrar/unpack/ppm/State.java @@ -0,0 +1,119 @@ +/* + * 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 com.github.junrar.unpack.ppm; + +import com.github.junrar.io.Raw; + +/** + * DOCUMENT ME + * + * @author $LastChangedBy$ + * @version $LastChangedRevision$ + */ +public class State extends Pointer { + + public static final int size = 6; + + public State(byte[] mem) { + super(mem); + } + + 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(PPMContext successor) { + setSuccessor(successor.getAddress()); + } + + public void setSuccessor(int successor) { + Raw.writeIntLittleEndian(mem, pos + 2, successor); + } + + 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 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 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(); + } +} -- cgit v1.2.3