Mercurial > vba-linux
comparison 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 |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // CoderMixer2.cpp | |
2 | |
3 #include "StdAfx.h" | |
4 | |
5 #include "CoderMixer2.h" | |
6 | |
7 namespace NCoderMixer { | |
8 | |
9 CBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo): | |
10 _srcBindInfo(srcBindInfo) | |
11 { | |
12 srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams); | |
13 | |
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 } | |
25 | |
26 UInt32 destInOffset = 0; | |
27 UInt32 destOutOffset = 0; | |
28 UInt32 srcInOffset = NumSrcInStreams; | |
29 UInt32 srcOutOffset = _numSrcOutStreams; | |
30 | |
31 for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--) | |
32 { | |
33 const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i]; | |
34 | |
35 srcInOffset -= srcCoderInfo.NumInStreams; | |
36 srcOutOffset -= srcCoderInfo.NumOutStreams; | |
37 | |
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 } | |
53 | |
54 void CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo) | |
55 { | |
56 destBindInfo.Coders.Clear(); | |
57 destBindInfo.BindPairs.Clear(); | |
58 destBindInfo.InStreams.Clear(); | |
59 destBindInfo.OutStreams.Clear(); | |
60 | |
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 } | |
83 | |
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 } | |
93 | |
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 else | |
107 { | |
108 sizes.Add(*srcSizes[i]); | |
109 sizePointers.Add(&sizes.Back()); | |
110 } | |
111 } | |
112 } | |
113 | |
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 } | |
120 | |
121 } |