xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // 7zCompressionMode.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_7Z_COMPRESSION_MODE_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_7Z_COMPRESSION_MODE_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MethodId.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MethodProps.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
10*f6dc9357SAndroid Build Coastguard Worker namespace N7z {
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker struct CMethodFull: public CMethodProps
13*f6dc9357SAndroid Build Coastguard Worker {
14*f6dc9357SAndroid Build Coastguard Worker   CMethodId Id;
15*f6dc9357SAndroid Build Coastguard Worker   UInt32 NumStreams;
16*f6dc9357SAndroid Build Coastguard Worker   int CodecIndex;
17*f6dc9357SAndroid Build Coastguard Worker   UInt32 NumThreads;
18*f6dc9357SAndroid Build Coastguard Worker   bool Set_NumThreads;
19*f6dc9357SAndroid Build Coastguard Worker 
CMethodFullCMethodFull20*f6dc9357SAndroid Build Coastguard Worker   CMethodFull(): CodecIndex(-1), NumThreads(1), Set_NumThreads(false) {}
IsSimpleCoderCMethodFull21*f6dc9357SAndroid Build Coastguard Worker   bool IsSimpleCoder() const { return NumStreams == 1; }
22*f6dc9357SAndroid Build Coastguard Worker };
23*f6dc9357SAndroid Build Coastguard Worker 
24*f6dc9357SAndroid Build Coastguard Worker struct CBond2
25*f6dc9357SAndroid Build Coastguard Worker {
26*f6dc9357SAndroid Build Coastguard Worker   UInt32 OutCoder;
27*f6dc9357SAndroid Build Coastguard Worker   UInt32 OutStream;
28*f6dc9357SAndroid Build Coastguard Worker   UInt32 InCoder;
29*f6dc9357SAndroid Build Coastguard Worker };
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker struct CCompressionMethodMode
32*f6dc9357SAndroid Build Coastguard Worker {
33*f6dc9357SAndroid Build Coastguard Worker   /*
34*f6dc9357SAndroid Build Coastguard Worker     if (Bonds.Empty()), then default bonds must be created
35*f6dc9357SAndroid Build Coastguard Worker     if (Filter_was_Inserted)
36*f6dc9357SAndroid Build Coastguard Worker     {
37*f6dc9357SAndroid Build Coastguard Worker       Methods[0] is filter method
38*f6dc9357SAndroid Build Coastguard Worker       Bonds don't contain bonds for filter (these bonds must be created)
39*f6dc9357SAndroid Build Coastguard Worker     }
40*f6dc9357SAndroid Build Coastguard Worker   */
41*f6dc9357SAndroid Build Coastguard Worker 
42*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CMethodFull> Methods;
43*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<CBond2> Bonds;
44*f6dc9357SAndroid Build Coastguard Worker 
IsThereBond_to_CoderCCompressionMethodMode45*f6dc9357SAndroid Build Coastguard Worker   bool IsThereBond_to_Coder(unsigned coderIndex) const
46*f6dc9357SAndroid Build Coastguard Worker   {
47*f6dc9357SAndroid Build Coastguard Worker     FOR_VECTOR(i, Bonds)
48*f6dc9357SAndroid Build Coastguard Worker       if (Bonds[i].InCoder == coderIndex)
49*f6dc9357SAndroid Build Coastguard Worker         return true;
50*f6dc9357SAndroid Build Coastguard Worker     return false;
51*f6dc9357SAndroid Build Coastguard Worker   }
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker   bool DefaultMethod_was_Inserted;
54*f6dc9357SAndroid Build Coastguard Worker   bool Filter_was_Inserted;
55*f6dc9357SAndroid Build Coastguard Worker   bool PasswordIsDefined;
56*f6dc9357SAndroid Build Coastguard Worker   bool MemoryUsageLimit_WasSet;
57*f6dc9357SAndroid Build Coastguard Worker 
58*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_ST
59*f6dc9357SAndroid Build Coastguard Worker   bool NumThreads_WasForced;
60*f6dc9357SAndroid Build Coastguard Worker   bool MultiThreadMixer;
61*f6dc9357SAndroid Build Coastguard Worker   UInt32 NumThreads;
62*f6dc9357SAndroid Build Coastguard Worker   #endif
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker   UString Password; // _Wipe
65*f6dc9357SAndroid Build Coastguard Worker   UInt64 MemoryUsageLimit;
66*f6dc9357SAndroid Build Coastguard Worker 
IsEmptyCCompressionMethodMode67*f6dc9357SAndroid Build Coastguard Worker   bool IsEmpty() const { return (Methods.IsEmpty() && !PasswordIsDefined); }
CCompressionMethodModeCCompressionMethodMode68*f6dc9357SAndroid Build Coastguard Worker   CCompressionMethodMode():
69*f6dc9357SAndroid Build Coastguard Worker         DefaultMethod_was_Inserted(false)
70*f6dc9357SAndroid Build Coastguard Worker       , Filter_was_Inserted(false)
71*f6dc9357SAndroid Build Coastguard Worker       , PasswordIsDefined(false)
72*f6dc9357SAndroid Build Coastguard Worker       , MemoryUsageLimit_WasSet(false)
73*f6dc9357SAndroid Build Coastguard Worker       #ifndef Z7_ST
74*f6dc9357SAndroid Build Coastguard Worker       , NumThreads_WasForced(false)
75*f6dc9357SAndroid Build Coastguard Worker       , MultiThreadMixer(true)
76*f6dc9357SAndroid Build Coastguard Worker       , NumThreads(1)
77*f6dc9357SAndroid Build Coastguard Worker       #endif
78*f6dc9357SAndroid Build Coastguard Worker       , MemoryUsageLimit((UInt64)1 << 30)
79*f6dc9357SAndroid Build Coastguard Worker   {}
80*f6dc9357SAndroid Build Coastguard Worker 
81*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_CPP_IS_SUPPORTED_default
82*f6dc9357SAndroid Build Coastguard Worker   CCompressionMethodMode(const CCompressionMethodMode &) = default;
83*f6dc9357SAndroid Build Coastguard Worker   CCompressionMethodMode& operator =(const CCompressionMethodMode &) = default;
84*f6dc9357SAndroid Build Coastguard Worker #endif
~CCompressionMethodModeCCompressionMethodMode85*f6dc9357SAndroid Build Coastguard Worker   ~CCompressionMethodMode() { Password.Wipe_and_Empty(); }
86*f6dc9357SAndroid Build Coastguard Worker };
87*f6dc9357SAndroid Build Coastguard Worker 
88*f6dc9357SAndroid Build Coastguard Worker }}
89*f6dc9357SAndroid Build Coastguard Worker 
90*f6dc9357SAndroid Build Coastguard Worker #endif
91