Mercurial > vba-linux
diff src/win32/7zip/7z/CPP/7zip/Archive/Common/CoderMixer2.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/win32/7zip/7z/CPP/7zip/Archive/Common/CoderMixer2.cpp Sat Mar 03 10:31:27 2012 -0600 1.3 @@ -0,0 +1,121 @@ 1.4 +// CoderMixer2.cpp 1.5 + 1.6 +#include "StdAfx.h" 1.7 + 1.8 +#include "CoderMixer2.h" 1.9 + 1.10 +namespace NCoderMixer { 1.11 + 1.12 +CBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo): 1.13 + _srcBindInfo(srcBindInfo) 1.14 +{ 1.15 + srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams); 1.16 + 1.17 + UInt32 j; 1.18 + for (j = 0; j < NumSrcInStreams; j++) 1.19 + { 1.20 + _srcInToDestOutMap.Add(0); 1.21 + DestOutToSrcInMap.Add(0); 1.22 + } 1.23 + for (j = 0; j < _numSrcOutStreams; j++) 1.24 + { 1.25 + _srcOutToDestInMap.Add(0); 1.26 + _destInToSrcOutMap.Add(0); 1.27 + } 1.28 + 1.29 + UInt32 destInOffset = 0; 1.30 + UInt32 destOutOffset = 0; 1.31 + UInt32 srcInOffset = NumSrcInStreams; 1.32 + UInt32 srcOutOffset = _numSrcOutStreams; 1.33 + 1.34 + for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--) 1.35 + { 1.36 + const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i]; 1.37 + 1.38 + srcInOffset -= srcCoderInfo.NumInStreams; 1.39 + srcOutOffset -= srcCoderInfo.NumOutStreams; 1.40 + 1.41 + UInt32 j; 1.42 + for (j = 0; j < srcCoderInfo.NumInStreams; j++, destOutOffset++) 1.43 + { 1.44 + UInt32 index = srcInOffset + j; 1.45 + _srcInToDestOutMap[index] = destOutOffset; 1.46 + DestOutToSrcInMap[destOutOffset] = index; 1.47 + } 1.48 + for (j = 0; j < srcCoderInfo.NumOutStreams; j++, destInOffset++) 1.49 + { 1.50 + UInt32 index = srcOutOffset + j; 1.51 + _srcOutToDestInMap[index] = destInOffset; 1.52 + _destInToSrcOutMap[destInOffset] = index; 1.53 + } 1.54 + } 1.55 +} 1.56 + 1.57 +void CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo) 1.58 +{ 1.59 + destBindInfo.Coders.Clear(); 1.60 + destBindInfo.BindPairs.Clear(); 1.61 + destBindInfo.InStreams.Clear(); 1.62 + destBindInfo.OutStreams.Clear(); 1.63 + 1.64 + int i; 1.65 + for (i = _srcBindInfo.Coders.Size() - 1; i >= 0; i--) 1.66 + { 1.67 + const CCoderStreamsInfo &srcCoderInfo = _srcBindInfo.Coders[i]; 1.68 + CCoderStreamsInfo destCoderInfo; 1.69 + destCoderInfo.NumInStreams = srcCoderInfo.NumOutStreams; 1.70 + destCoderInfo.NumOutStreams = srcCoderInfo.NumInStreams; 1.71 + destBindInfo.Coders.Add(destCoderInfo); 1.72 + } 1.73 + for (i = _srcBindInfo.BindPairs.Size() - 1; i >= 0; i--) 1.74 + { 1.75 + const CBindPair &srcBindPair = _srcBindInfo.BindPairs[i]; 1.76 + CBindPair destBindPair; 1.77 + destBindPair.InIndex = _srcOutToDestInMap[srcBindPair.OutIndex]; 1.78 + destBindPair.OutIndex = _srcInToDestOutMap[srcBindPair.InIndex]; 1.79 + destBindInfo.BindPairs.Add(destBindPair); 1.80 + } 1.81 + for (i = 0; i < _srcBindInfo.InStreams.Size(); i++) 1.82 + destBindInfo.OutStreams.Add(_srcInToDestOutMap[_srcBindInfo.InStreams[i]]); 1.83 + for (i = 0; i < _srcBindInfo.OutStreams.Size(); i++) 1.84 + destBindInfo.InStreams.Add(_srcOutToDestInMap[_srcBindInfo.OutStreams[i]]); 1.85 +} 1.86 + 1.87 +CCoderInfo2::CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams): 1.88 + NumInStreams(numInStreams), 1.89 + NumOutStreams(numOutStreams) 1.90 +{ 1.91 + InSizes.Reserve(NumInStreams); 1.92 + InSizePointers.Reserve(NumInStreams); 1.93 + OutSizePointers.Reserve(NumOutStreams); 1.94 + OutSizePointers.Reserve(NumOutStreams); 1.95 +} 1.96 + 1.97 +static void SetSizes(const UInt64 **srcSizes, CRecordVector<UInt64> &sizes, 1.98 + CRecordVector<const UInt64 *> &sizePointers, UInt32 numItems) 1.99 +{ 1.100 + sizes.Clear(); 1.101 + sizePointers.Clear(); 1.102 + for(UInt32 i = 0; i < numItems; i++) 1.103 + { 1.104 + if (srcSizes == 0 || srcSizes[i] == NULL) 1.105 + { 1.106 + sizes.Add(0); 1.107 + sizePointers.Add(NULL); 1.108 + } 1.109 + else 1.110 + { 1.111 + sizes.Add(*srcSizes[i]); 1.112 + sizePointers.Add(&sizes.Back()); 1.113 + } 1.114 + } 1.115 +} 1.116 + 1.117 +void CCoderInfo2::SetCoderInfo(const UInt64 **inSizes, 1.118 + const UInt64 **outSizes) 1.119 +{ 1.120 + SetSizes(inSizes, InSizes, InSizePointers, NumInStreams); 1.121 + SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams); 1.122 +} 1.123 + 1.124 +}