From 71478fd62d8483483abb34609cdabb7f9cbadfd6 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 19 Dec 2015 14:18:43 +0000 Subject: Add hostTools from https://github.com/Noltari/cfe_bcm63xx --- hostTools/lzma/compress/LenCoder.cpp | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 hostTools/lzma/compress/LenCoder.cpp (limited to 'hostTools/lzma/compress/LenCoder.cpp') diff --git a/hostTools/lzma/compress/LenCoder.cpp b/hostTools/lzma/compress/LenCoder.cpp new file mode 100644 index 0000000..35162b2 --- /dev/null +++ b/hostTools/lzma/compress/LenCoder.cpp @@ -0,0 +1,73 @@ +#include "LenCoder.h" + +using namespace NCompression; +using namespace NArithmetic; + +namespace NLength { + +void CEncoder::Init() +{ + m_Choice.Init(); + for (UINT32 aPosState = 0; aPosState < m_NumPosStates; aPosState++) + { + m_LowCoder[aPosState].Init(); + m_MidCoder[aPosState].Init(); + } + m_Choice2.Init(); + m_HighCoder.Init(); +} + +void CEncoder::Encode(CMyRangeEncoder *aRangeEncoder, UINT32 aSymbol, UINT32 aPosState) +{ + if(aSymbol < kNumLowSymbols) + { + m_Choice.Encode(aRangeEncoder, 0); + m_LowCoder[aPosState].Encode(aRangeEncoder, aSymbol); + } + else + { + aSymbol -= kNumLowSymbols; + m_Choice.Encode(aRangeEncoder, 1); + if(aSymbol < kNumMidSymbols) + { + m_Choice2.Encode(aRangeEncoder, 0); + m_MidCoder[aPosState].Encode(aRangeEncoder, aSymbol); + } + else + { + aSymbol -= kNumMidSymbols; + m_Choice2.Encode(aRangeEncoder, 1); + m_HighCoder.Encode(aRangeEncoder, aSymbol); + } + } +} + +UINT32 CEncoder::GetPrice(UINT32 aSymbol, UINT32 aPosState) const +{ + UINT32 aPrice = 0; + if(aSymbol < kNumLowSymbols) + { + aPrice += m_Choice.GetPrice(0); + aPrice += m_LowCoder[aPosState].GetPrice(aSymbol); + } + else + { + aSymbol -= kNumLowSymbols; + aPrice += m_Choice.GetPrice(1); + if(aSymbol < kNumMidSymbols) + { + aPrice += m_Choice2.GetPrice(0); + aPrice += m_MidCoder[aPosState].GetPrice(aSymbol); + } + else + { + aSymbol -= kNumMidSymbols; + aPrice += m_Choice2.GetPrice(1); + aPrice += m_HighCoder.GetPrice(aSymbol); + } + } + return aPrice; +} + +} + -- cgit v1.2.3