com.github.junrar.unpack.ppm.State Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junrar Show documentation
Show all versions of junrar Show documentation
rar decompression library in plain java
/*
* 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();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy