Mercurial > vba-linux
view 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 source
1 // CoderMixer2.cpp3 #include "StdAfx.h"5 #include "CoderMixer2.h"7 namespace NCoderMixer {9 CBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo):10 _srcBindInfo(srcBindInfo)11 {12 srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams);14 UInt32 j;15 for (j = 0; j < NumSrcInStreams; j++)16 {17 _srcInToDestOutMap.Add(0);18 DestOutToSrcInMap.Add(0);19 }20 for (j = 0; j < _numSrcOutStreams; j++)21 {22 _srcOutToDestInMap.Add(0);23 _destInToSrcOutMap.Add(0);24 }26 UInt32 destInOffset = 0;27 UInt32 destOutOffset = 0;28 UInt32 srcInOffset = NumSrcInStreams;29 UInt32 srcOutOffset = _numSrcOutStreams;31 for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--)32 {33 const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i];35 srcInOffset -= srcCoderInfo.NumInStreams;36 srcOutOffset -= srcCoderInfo.NumOutStreams;38 UInt32 j;39 for (j = 0; j < srcCoderInfo.NumInStreams; j++, destOutOffset++)40 {41 UInt32 index = srcInOffset + j;42 _srcInToDestOutMap[index] = destOutOffset;43 DestOutToSrcInMap[destOutOffset] = index;44 }45 for (j = 0; j < srcCoderInfo.NumOutStreams; j++, destInOffset++)46 {47 UInt32 index = srcOutOffset + j;48 _srcOutToDestInMap[index] = destInOffset;49 _destInToSrcOutMap[destInOffset] = index;50 }51 }52 }54 void CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo)55 {56 destBindInfo.Coders.Clear();57 destBindInfo.BindPairs.Clear();58 destBindInfo.InStreams.Clear();59 destBindInfo.OutStreams.Clear();61 int i;62 for (i = _srcBindInfo.Coders.Size() - 1; i >= 0; i--)63 {64 const CCoderStreamsInfo &srcCoderInfo = _srcBindInfo.Coders[i];65 CCoderStreamsInfo destCoderInfo;66 destCoderInfo.NumInStreams = srcCoderInfo.NumOutStreams;67 destCoderInfo.NumOutStreams = srcCoderInfo.NumInStreams;68 destBindInfo.Coders.Add(destCoderInfo);69 }70 for (i = _srcBindInfo.BindPairs.Size() - 1; i >= 0; i--)71 {72 const CBindPair &srcBindPair = _srcBindInfo.BindPairs[i];73 CBindPair destBindPair;74 destBindPair.InIndex = _srcOutToDestInMap[srcBindPair.OutIndex];75 destBindPair.OutIndex = _srcInToDestOutMap[srcBindPair.InIndex];76 destBindInfo.BindPairs.Add(destBindPair);77 }78 for (i = 0; i < _srcBindInfo.InStreams.Size(); i++)79 destBindInfo.OutStreams.Add(_srcInToDestOutMap[_srcBindInfo.InStreams[i]]);80 for (i = 0; i < _srcBindInfo.OutStreams.Size(); i++)81 destBindInfo.InStreams.Add(_srcOutToDestInMap[_srcBindInfo.OutStreams[i]]);82 }84 CCoderInfo2::CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams):85 NumInStreams(numInStreams),86 NumOutStreams(numOutStreams)87 {88 InSizes.Reserve(NumInStreams);89 InSizePointers.Reserve(NumInStreams);90 OutSizePointers.Reserve(NumOutStreams);91 OutSizePointers.Reserve(NumOutStreams);92 }94 static void SetSizes(const UInt64 **srcSizes, CRecordVector<UInt64> &sizes,95 CRecordVector<const UInt64 *> &sizePointers, UInt32 numItems)96 {97 sizes.Clear();98 sizePointers.Clear();99 for(UInt32 i = 0; i < numItems; i++)100 {101 if (srcSizes == 0 || srcSizes[i] == NULL)102 {103 sizes.Add(0);104 sizePointers.Add(NULL);105 }106 else107 {108 sizes.Add(*srcSizes[i]);109 sizePointers.Add(&sizes.Back());110 }111 }112 }114 void CCoderInfo2::SetCoderInfo(const UInt64 **inSizes,115 const UInt64 **outSizes)116 {117 SetSizes(inSizes, InSizes, InSizePointers, NumInStreams);118 SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams);119 }121 }