internal CLenPriceEnc(CLenPriceEnc other) : base(other) { mPrices = new uint[CLzmaEnc.LZMA_NUM_PB_STATES_MAX][]; for (int i = 0; i < mPrices.Length; i++) { mPrices[i] = new uint[CLzmaEnc.kLenNumSymbolsTotal]; for (int j = 0; j < CLzmaEnc.kLenNumSymbolsTotal; j++) mPrices[i][j] = other.mPrices[i][j]; } mTableSize = other.mTableSize; mCounters = new uint[CLzmaEnc.LZMA_NUM_PB_STATES_MAX]; for (int i = 0; i < mCounters.Length; i++) mCounters[i] = other.mCounters[i]; }
internal void LzmaEnc_RestoreState() { TR("LzmaEnc_RestoreState", 0); mLenEnc = new CLenPriceEnc(mSaveState.mLenEnc); mRepLenEnc = new CLenPriceEnc(mSaveState.mRepLenEnc); mState = mSaveState.mState; for (int i = 0; i < kNumStates; i++) { memcpy(mIsMatch[i], mSaveState.mIsMatch[i], LZMA_NUM_PB_STATES_MAX * 2); memcpy(mIsRep0Long[i], mSaveState.mIsRep0Long[i], LZMA_NUM_PB_STATES_MAX * 2); } for (int i = 0; i < kNumLenToPosStates; i++) memcpy(mPosSlotEncoder[i], mSaveState.mPosSlotEncoder[i], (1 << kNumPosSlotBits) * 2); memcpy(mIsRep, mSaveState.mIsRep, kNumStates * 2); memcpy(mIsRepG0, mSaveState.mIsRepG0, kNumStates * 2); memcpy(mIsRepG1, mSaveState.mIsRepG1, kNumStates * 2); memcpy(mIsRepG2, mSaveState.mIsRepG2, kNumStates * 2); memcpy(mPosEncoders, mSaveState.mPosEncoders, (kNumFullDistances - kEndPosModelIndex) * 2); memcpy(mPosAlignEncoder, mSaveState.mPosAlignEncoder, (1 << kNumAlignBits) * 2); mReps = mSaveState.mReps; memcpy(mLitProbs, mSaveState.mLitProbs, (0x300 << mLcLp) * 2); }