亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ppmcontext.java

?? 這是架包java-unrar-0.2.jar的源碼
?? JAVA
字號:
/*
 * 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 "&"
 * "<":  "&#060;" or "&lt;"
 * ">":  "&#062;" or "&gt;"
 * "@":  "&#064;" 
 */
package de.innosystec.unrar.unpack.ppm;

import de.innosystec.unrar.io.Raw;

/**
 * DOCUMENT ME
 * 
 * @author $LastChangedBy$
 * @version $LastChangedRevision$
 */
public class PPMContext extends Pointer
{

    private static final int unionSize = Math.max(FreqData.size, State.size);

	public static final int size = 2 + unionSize + 4; // 12

    // ushort NumStats;
	private int numStats; // determines if feqData or onstate is used

	// (1==onestate)

	private final FreqData freqData; // -\

	// |-> union
	private final State oneState; // -/

	private int suffix; // pointer ppmcontext

	public final static int[] ExpEscape =
            { 25, 14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2 };

    // Temp fields
    private final State tempState1 = new State(null);
    private final State tempState2 = new State(null);
    private final State tempState3 = new State(null);
    private final State tempState4 = new State(null);
    private final State tempState5 = new State(null);
    private PPMContext tempPPMContext = null;
    private final int[] ps = new int[256];

	public PPMContext(byte[] mem)
	{
		super(mem);
		oneState = new State(mem);
		freqData = new FreqData(mem);
	}

    public PPMContext init(byte[] mem) {
		this.mem = mem;
        pos = 0;
		oneState.init(mem);
		freqData.init(mem);
        return this;
    }

	public FreqData getFreqData()
	{
		return freqData;
	}

	public void setFreqData(FreqData freqData)
	{
		this.freqData.setSummFreq(freqData.getSummFreq());
		this.freqData.setStats(freqData.getStats());
	}

	public final int getNumStats()
	{
		if (mem!=null){
			numStats = Raw.readShortLittleEndian(mem,  pos)&0xffff;
		}
		return numStats;
	}

	public final void setNumStats(int numStats)
	{
		this.numStats = numStats&0xffff;
		if (mem != null) {
			Raw.writeShortLittleEndian(mem, pos, (short)numStats);
		}
	}

	public State getOneState()
	{
		return oneState;
	}

	public void setOneState(StateRef oneState)
	{
		this.oneState.setValues(oneState);
	}

	public int getSuffix()
	{
		if(mem!=null){
			suffix = Raw.readIntLittleEndian(mem,  pos+8);
		}
		return suffix;
	}

	public void setSuffix(PPMContext suffix)
	{
		setSuffix(suffix.getAddress());
	}

	public void setSuffix(int suffix)
	{
		this.suffix = suffix;
		if (mem != null) {
			Raw.writeIntLittleEndian(mem, pos + 8, suffix);
		}
	}

	@Override
	public void setAddress(int pos)
	{
        super.setAddress(pos);
        oneState.setAddress(pos+2);
        freqData.setAddress(pos+2);
	}

    private PPMContext getTempPPMContext(byte[] mem) {
        if (tempPPMContext == null) {
            tempPPMContext = new PPMContext(null);
        }
        return tempPPMContext.init(mem);
    }

	public int createChild(ModelPPM model, State pStats/* ptr */,
			StateRef firstState /* ref */)
	{
		PPMContext pc = getTempPPMContext(model.getSubAlloc().getHeap());
		pc.setAddress(model.getSubAlloc().allocContext()); 
		if (pc != null) { 
			pc.setNumStats(1);
			pc.setOneState(firstState);
			pc.setSuffix(this);
			pStats.setSuccessor(pc);
		}
		return pc.getAddress();
	}

	public void rescale(ModelPPM model)
	{
		int OldNS = getNumStats(), i = getNumStats() - 1, Adder, EscFreq;
		// STATE* p1, * p;
		State p1 = new State(model.getHeap());
		State p = new State(model.getHeap());
		State temp = new State(model.getHeap());

		for (p.setAddress(model.getFoundState().getAddress());
                p.getAddress() != freqData.getStats();
                p.decAddress()) {
			temp.setAddress(p.getAddress() - State.size);
			State.ppmdSwap(p, temp);
		}
		temp.setAddress(freqData.getStats());
		temp.incFreq(4);
		freqData.incSummFreq(4);
		EscFreq = freqData.getSummFreq() - p.getFreq();
		Adder = (model.getOrderFall() != 0) ? 1 : 0;
		p.setFreq((p.getFreq() + Adder) >>> 1);
		freqData.setSummFreq(p.getFreq());
		do {
            p.incAddress();
			EscFreq -= p.getFreq();
			p.setFreq((p.getFreq() + Adder) >>> 1);
			freqData.incSummFreq(p.getFreq());
			temp.setAddress(p.getAddress() - State.size);
			if (p.getFreq() > temp.getFreq()) {
				p1.setAddress(p.getAddress());
                StateRef tmp = new StateRef();
                tmp.setValues(p1);
				State temp2 = new State(model.getHeap());
				State temp3 = new State(model.getHeap());
				do {
					// p1[0]=p1[-1];
					temp2.setAddress(p1.getAddress() - State.size);
					p1.setValues(temp2);
                    p1.decAddress();
					temp3.setAddress(p1.getAddress() - State.size);
				} while (p1.getAddress() != freqData.getStats() && tmp.getFreq() > temp3.getFreq());
				p1.setValues(tmp);
			}
		} while (--i != 0);
		if (p.getFreq() == 0) {
			do {
				i++;
				p.decAddress();
			} while (p.getFreq() == 0);
			EscFreq += i;
            setNumStats(getNumStats() - i);
			if (getNumStats() == 1) {
				StateRef tmp = new StateRef();
				temp.setAddress(freqData.getStats());
				tmp.setValues(temp);
				// STATE tmp=*U.Stats;
				do {
                    // tmp.Freq-=(tmp.Freq >> 1)
					tmp.decFreq(tmp.getFreq() >>> 1);
					EscFreq >>>= 1;
				} while (EscFreq > 1);
				model.getSubAlloc().freeUnits(freqData.getStats(),(OldNS + 1) >>> 1);
				oneState.setValues(tmp);
				model.getFoundState().setAddress(oneState.getAddress());
				return;
			}
		}
		EscFreq -= EscFreq >>> 1;
		freqData.incSummFreq(EscFreq);
		int n0 = (OldNS + 1) >>> 1, n1 = (getNumStats() + 1) >>> 1;
		if (n0 != n1) {
			freqData.setStats(model.getSubAlloc().shrinkUnits(freqData.getStats(), n0, n1));
		}
		model.getFoundState().setAddress(freqData.getStats());
	}

	private int getArrayIndex(ModelPPM Model, State rs)
	{
		PPMContext tempSuffix = getTempPPMContext(Model.getSubAlloc().getHeap());
		tempSuffix.setAddress(getSuffix());
		int ret = 0;
		ret += Model.getPrevSuccess();
		ret += Model.getNS2BSIndx()[tempSuffix.getNumStats() - 1];
		ret += Model.getHiBitsFlag() + 2* Model.getHB2Flag()[rs.getSymbol()];
		ret += ((Model.getRunLength() >>> 26) & 0x20);
		return ret;
	}

    public int getMean(int summ, int shift, int round)
	{
		return ( (summ + (1 << (shift - round) ) ) >>> (shift) );
	}

	public void decodeBinSymbol(ModelPPM model)
	{
		State rs = tempState1.init(model.getHeap());
		rs.setAddress(oneState.getAddress());// State&
		model.setHiBitsFlag(model.getHB2Flag()[model.getFoundState().getSymbol()]);
		int off1 = rs.getFreq() - 1;
		int off2 = getArrayIndex(model, rs);
		int bs = model.getBinSumm()[off1][off2];
		if (model.getCoder().getCurrentShiftCount(ModelPPM.TOT_BITS) < bs) {
			model.getFoundState().setAddress(rs.getAddress());
			rs.incFreq((rs.getFreq() < 128) ? 1 : 0);
			model.getCoder().getSubRange().setLowCount(0);
			model.getCoder().getSubRange().setHighCount(bs); 
			bs = ((bs + ModelPPM.INTERVAL - getMean(bs, ModelPPM.PERIOD_BITS, 2)) & 0xffff);
			model.getBinSumm()[off1][off2] = bs;
			model.setPrevSuccess(1); 
			model.incRunLength(1);
		} else {
			model.getCoder().getSubRange().setLowCount(bs);
			bs = (bs - getMean(bs, ModelPPM.PERIOD_BITS, 2)) & 0xFFFF;
			model.getBinSumm()[off1][off2] = bs;
			model.getCoder().getSubRange().setHighCount(ModelPPM.BIN_SCALE);
			model.setInitEsc(ExpEscape[bs >>> 10]);
			model.setNumMasked(1);
			model.getCharMask()[rs.getSymbol()] = model.getEscCount();
			model.setPrevSuccess(0);
			model.getFoundState().setAddress(0);
		}
		//int a = 0;//TODO just 4 debugging
	}

//	public static void ppmdSwap(ModelPPM model, StatePtr state1, StatePtr state2)
//	{
//		byte[] bytes = model.getSubAlloc().getHeap();
//		int p1 = state1.getAddress();
//		int p2 = state2.getAddress();
//		
//		for (int i = 0; i < StatePtr.size; i++) {
//			byte temp = bytes[p1+i];
//			bytes[p1+i] = bytes[p2+i];
//			bytes[p2+i] = temp;
//		}
//		state1.setAddress(p1);
//		state2.setAddress(p2);
//	}

	public void update1(ModelPPM model, int p/* ptr */)
	{
		model.getFoundState().setAddress(p);
		model.getFoundState().incFreq(4);
		freqData.incSummFreq(4);
		State p0 = tempState3.init(model.getHeap());
		State p1 = tempState4.init(model.getHeap());
		p0.setAddress(p);
		p1.setAddress(p - State.size);
		if (p0.getFreq() > p1.getFreq()) {
			State.ppmdSwap(p0, p1);
			model.getFoundState().setAddress(p1.getAddress());
			if (p1.getFreq() > ModelPPM.MAX_FREQ)
				rescale(model);
		}
	}

	public boolean decodeSymbol2(ModelPPM model)
	{
		long count;
        int hiCnt, i = getNumStats() - model.getNumMasked();
		SEE2Context psee2c = makeEscFreq2(model, i);
		RangeCoder coder = model.getCoder();
		// STATE* ps[256], ** pps=ps, * p=U.Stats-1;
		State p = tempState1.init(model.getHeap());
		State temp = tempState2.init(model.getHeap());
		p.setAddress(freqData.getStats() - State.size); 
		int pps = 0;
		hiCnt = 0;

		do {
			do {
				p.incAddress();// p++;
			} while (model.getCharMask()[p.getSymbol()] == model.getEscCount());
			hiCnt += p.getFreq();
			ps[pps++] = p.getAddress();
		} while (--i != 0);
		coder.getSubRange().incScale(hiCnt);
		count = coder.getCurrentCount();
		if (count >= coder.getSubRange().getScale()) {
			return false;
		}
		pps = 0;
		p.setAddress(ps[pps]);
		if (count < hiCnt) {
			hiCnt = 0;
			while ((hiCnt += p.getFreq()) <= count) {
				p.setAddress(ps[++pps]);// p=*++pps;
			}
			coder.getSubRange().setHighCount(hiCnt);
			coder.getSubRange().setLowCount(hiCnt - p.getFreq());
			psee2c.update();
			update2(model, p.getAddress());
		} else {
			coder.getSubRange().setLowCount(hiCnt);
			coder.getSubRange().setHighCount(coder.getSubRange().getScale());
			i = getNumStats() - model.getNumMasked();// ->NumMasked;
			pps--;
			do {
				temp.setAddress(ps[++pps]);// (*++pps)
				model.getCharMask()[temp.getSymbol()] = model.getEscCount();
			} while (--i != 0);
			psee2c.incSumm((int)coder.getSubRange().getScale());
			model.setNumMasked(getNumStats());
		}
		return (true);
	}

	public void update2(ModelPPM model, int p/* state ptr */)
	{
		State temp = tempState5.init(model.getHeap());
		temp.setAddress(p);
		model.getFoundState().setAddress(p);
		model.getFoundState().incFreq(4); 
		freqData.incSummFreq(4);
		if (temp.getFreq() > ModelPPM.MAX_FREQ) {
			rescale(model);
		}
		model.incEscCount(1);
		model.setRunLength(model.getInitRL());
	}

	private SEE2Context makeEscFreq2(ModelPPM model, int Diff)
	{
		SEE2Context psee2c;
        int numStats = getNumStats();
		if (numStats != 256) {
			PPMContext suff = getTempPPMContext(model.getHeap());
			suff.setAddress(getSuffix());
            int idx1 = model.getNS2Indx()[Diff - 1];
            int idx2 = 0;
            idx2 += (Diff < suff.getNumStats() - numStats) ? 1 : 0;
			idx2 += 2 * ((freqData.getSummFreq() < 11 * numStats) ? 1 : 0); 
			idx2 += 4 * ((model.getNumMasked() > Diff) ? 1 : 0); 
			idx2 += model.getHiBitsFlag();
			psee2c = model.getSEE2Cont()[idx1][idx2];
			model.getCoder().getSubRange().setScale(psee2c.getMean());
		} else {
			psee2c = model.getDummySEE2Cont();
			model.getCoder().getSubRange().setScale(1);
		}
		return psee2c;
	}

	public boolean decodeSymbol1(ModelPPM model)
	{

		RangeCoder coder = model.getCoder();
		coder.getSubRange().setScale(freqData.getSummFreq());
		State p = new State(model.getHeap());
		p.setAddress(freqData.getStats());
		int i, HiCnt;
		long count = coder.getCurrentCount();
		if (count >= coder.getSubRange().getScale()) {
			return false;
		}
		if (count < (HiCnt = p.getFreq())) {
			coder.getSubRange().setHighCount(HiCnt);
			model.setPrevSuccess((2 * HiCnt > coder.getSubRange().getScale()) ? 1 : 0);
			model.incRunLength(model.getPrevSuccess());
			HiCnt += 4;
			model.getFoundState().setAddress(p.getAddress());
			model.getFoundState().setFreq(HiCnt);
			freqData.incSummFreq(4);
			if (HiCnt > ModelPPM.MAX_FREQ) {
				rescale(model);
			}
			coder.getSubRange().setLowCount(0);
			return true;
		} else {
			if (model.getFoundState().getAddress() == 0) {
				return (false);
			}
		}
		model.setPrevSuccess(0);
        int numStats = getNumStats();
		i = numStats - 1;
		while ((HiCnt += p.incAddress().getFreq()) <= count)
		{
			if (--i == 0) {
				model.setHiBitsFlag(model.getHB2Flag()[model.getFoundState().getSymbol()]);
				coder.getSubRange().setLowCount(HiCnt);
				model.getCharMask()[p.getSymbol()] = model.getEscCount();
				model.setNumMasked(numStats);
				i = numStats - 1;
				model.getFoundState().setAddress(0);
				do {
					model.getCharMask()[p.decAddress().getSymbol()] = model.getEscCount();
				} while (--i != 0);
				coder.getSubRange().setHighCount(coder.getSubRange().getScale());
				return (true);
			}
		}
		coder.getSubRange().setLowCount(HiCnt-p.getFreq());
		coder.getSubRange().setHighCount(HiCnt);
		update1(model, p.getAddress());
		return (true);
	}

    public String toString() {
        StringBuilder buffer = new StringBuilder();
        buffer.append("PPMContext[");
        buffer.append("\n  pos=");
        buffer.append(pos);
        buffer.append("\n  size=");
        buffer.append(size);
        buffer.append("\n  numStats=");
        buffer.append(getNumStats());
        buffer.append("\n  Suffix=");
        buffer.append(getSuffix());
        buffer.append("\n  freqData=");
        buffer.append(freqData);
        buffer.append("\n  oneState=");
        buffer.append(oneState);
        buffer.append("\n]");
        return buffer.toString();
    }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人av在线| 一区二区欧美在线观看| 欧美日韩国产高清一区| 91丨九色丨蝌蚪富婆spa| 99久久精品99国产精品| 不卡欧美aaaaa| www.亚洲人| 欧美体内she精高潮| 欧美日韩中文字幕一区| 91精品国产一区二区人妖| 91精品国产91热久久久做人人| 3d动漫精品啪啪1区2区免费| 欧美大片在线观看一区二区| 久久久久国产精品麻豆ai换脸 | 一区av在线播放| 亚洲一卡二卡三卡四卡五卡| 亚洲一级二级三级| 裸体健美xxxx欧美裸体表演| 加勒比av一区二区| 99精品在线免费| 在线成人小视频| 久久久久久久久久美女| 亚洲欧美日韩系列| 久草精品在线观看| 91看片淫黄大片一级在线观看| 欧美日韩视频不卡| 国产视频一区二区在线| 亚洲精品菠萝久久久久久久| 日本中文字幕一区二区有限公司| 国产成人夜色高潮福利影视| 欧美在线制服丝袜| 久久久精品国产99久久精品芒果| 一区二区在线观看不卡| 麻豆成人久久精品二区三区红| 99在线视频精品| 日韩一区国产二区欧美三区| 中文字幕在线视频一区| 久久精品国产99国产| 91免费看片在线观看| 欧美白人最猛性xxxxx69交| 中文字幕亚洲不卡| 国产一区二区三区久久久| 色婷婷精品大视频在线蜜桃视频| 久久一夜天堂av一区二区三区| 天天色综合成人网| 国产综合久久久久影院| 欧美视频一区二区三区在线观看| 国产午夜精品久久久久久免费视| 日韩精品乱码av一区二区| 成人av网址在线| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲制服丝袜av| 国产91精品入口| 日韩视频在线你懂得| 亚洲视频一区二区在线| 韩国精品主播一区二区在线观看| 欧美日韩精品欧美日韩精品一| 18欧美亚洲精品| 国产福利一区在线观看| 日韩视频免费观看高清完整版| 亚洲乱码国产乱码精品精98午夜| 成人综合婷婷国产精品久久蜜臀 | 成人白浆超碰人人人人| 精品国产99国产精品| 日韩在线观看一区二区| 91丝袜国产在线播放| 国产精品久久777777| 国产精品一二三在| 国产区在线观看成人精品| 蜜桃av一区二区在线观看| 欧美日韩高清在线播放| 婷婷久久综合九色综合绿巨人| 欧美四级电影网| 婷婷国产在线综合| 91精品国产乱码| 麻豆国产欧美一区二区三区| 日韩一区二区三免费高清| 免费成人你懂的| 久久影院午夜论| 成人高清免费在线播放| 亚洲人精品午夜| 欧美无砖专区一中文字| 日韩精品视频网站| 欧美成人乱码一区二区三区| 国精产品一区一区三区mba桃花| 精品日韩99亚洲| 国产69精品久久久久777| 亚洲欧美在线观看| 欧美三片在线视频观看| 日本va欧美va精品| 国产欧美精品一区aⅴ影院| 成人高清在线视频| 亚洲国产成人av网| 欧美成人三级电影在线| 成人福利视频在线看| 亚洲综合一区在线| 欧美一级专区免费大片| 国产福利视频一区二区三区| 亚洲欧美日韩人成在线播放| 欧美乱妇15p| 国产69精品一区二区亚洲孕妇| 一区二区三区四区av| 欧美一区二区三区啪啪| 成人影视亚洲图片在线| 亚洲电影在线播放| 国产婷婷精品av在线| 在线精品视频免费播放| 韩国av一区二区三区| 亚洲精品成a人| 久久久午夜精品| 欧美偷拍一区二区| 成人性生交大片免费看中文 | 国产精品美女久久久久高潮| 欧美性xxxxx极品少妇| 国产乱码精品一品二品| 亚洲成精国产精品女| 国产亚洲人成网站| 69精品人人人人| 99久久免费精品高清特色大片| 日本在线不卡一区| 一区二区三区视频在线观看| 久久精品在线观看| 日韩视频在线你懂得| 欧美日韩中文精品| 99精品国产视频| 国产成人在线视频播放| 免费人成在线不卡| 亚洲国产日韩综合久久精品| 国产精品久久久久久久久久久免费看 | 91精品久久久久久久99蜜桃| 成人91在线观看| 国产美女精品人人做人人爽| 日韩中文字幕一区二区三区| 夜夜精品浪潮av一区二区三区| 中文字幕精品—区二区四季| 欧美精品一区二区久久婷婷| 欧美日韩不卡一区| 欧美亚洲国产怡红院影院| 97se亚洲国产综合自在线不卡| 国产一区 二区 三区一级| 美女尤物国产一区| 奇米色一区二区三区四区| 亚洲一二三四久久| 亚洲综合在线免费观看| 亚洲视频一二三区| 亚洲人123区| 亚洲欧洲综合另类在线| 亚洲欧美日韩国产成人精品影院| 国产精品嫩草99a| 中文字幕亚洲综合久久菠萝蜜| 国产精品久久久久影院| 国产精品卡一卡二卡三| 亚洲欧美自拍偷拍色图| 亚洲欧美一区二区在线观看| 亚洲三级在线免费| 一个色综合av| 日韩影院精彩在线| 麻豆免费精品视频| 精品一区二区免费视频| 韩国成人在线视频| 岛国一区二区在线观看| 91在线无精精品入口| 在线免费观看视频一区| 欧美精品日韩一本| 精品88久久久久88久久久| 久久五月婷婷丁香社区| 国产精品国产三级国产三级人妇 | 悠悠色在线精品| 视频一区二区中文字幕| 黄色日韩三级电影| 成人小视频免费观看| 91免费版在线看| 欧美久久久一区| 久久综合精品国产一区二区三区| 久久精品在这里| 亚洲黄色小说网站| 日本va欧美va精品发布| 成人综合在线观看| 欧美日韩不卡在线| 久久久久99精品一区| 亚洲已满18点击进入久久| 久久黄色级2电影| 色综合天天综合网国产成人综合天| 欧美视频一区在线观看| 国产亚洲欧美日韩日本| 亚洲一区二区在线免费观看视频| 久久精品国产精品青草| 日本久久一区二区三区| 精品久久久久久久久久久久包黑料| 国产精品丝袜91| 久久99蜜桃精品| 91高清在线观看| 中文av一区二区| 麻豆精品久久精品色综合| 色欧美乱欧美15图片| 日本一区二区三区视频视频| 视频一区国产视频| 在线免费不卡视频| 国产精品美日韩| 国产麻豆精品一区二区|