1370b324cSopenharmony_ci// 7zCompressionMode.h
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#ifndef ZIP7_INC_7Z_COMPRESSION_MODE_H
4370b324cSopenharmony_ci#define ZIP7_INC_7Z_COMPRESSION_MODE_H
5370b324cSopenharmony_ci
6370b324cSopenharmony_ci#include "../../Common/MethodId.h"
7370b324cSopenharmony_ci#include "../../Common/MethodProps.h"
8370b324cSopenharmony_ci
9370b324cSopenharmony_cinamespace NArchive {
10370b324cSopenharmony_cinamespace N7z {
11370b324cSopenharmony_ci
12370b324cSopenharmony_cistruct CMethodFull: public CMethodProps
13370b324cSopenharmony_ci{
14370b324cSopenharmony_ci  CMethodId Id;
15370b324cSopenharmony_ci  UInt32 NumStreams;
16370b324cSopenharmony_ci  int CodecIndex;
17370b324cSopenharmony_ci  UInt32 NumThreads;
18370b324cSopenharmony_ci  bool Set_NumThreads;
19370b324cSopenharmony_ci
20370b324cSopenharmony_ci  CMethodFull(): CodecIndex(-1), NumThreads(1), Set_NumThreads(false) {}
21370b324cSopenharmony_ci  bool IsSimpleCoder() const { return NumStreams == 1; }
22370b324cSopenharmony_ci};
23370b324cSopenharmony_ci
24370b324cSopenharmony_cistruct CBond2
25370b324cSopenharmony_ci{
26370b324cSopenharmony_ci  UInt32 OutCoder;
27370b324cSopenharmony_ci  UInt32 OutStream;
28370b324cSopenharmony_ci  UInt32 InCoder;
29370b324cSopenharmony_ci};
30370b324cSopenharmony_ci
31370b324cSopenharmony_cistruct CCompressionMethodMode
32370b324cSopenharmony_ci{
33370b324cSopenharmony_ci  /*
34370b324cSopenharmony_ci    if (Bonds.Empty()), then default bonds must be created
35370b324cSopenharmony_ci    if (Filter_was_Inserted)
36370b324cSopenharmony_ci    {
37370b324cSopenharmony_ci      Methods[0] is filter method
38370b324cSopenharmony_ci      Bonds don't contain bonds for filter (these bonds must be created)
39370b324cSopenharmony_ci    }
40370b324cSopenharmony_ci  */
41370b324cSopenharmony_ci
42370b324cSopenharmony_ci  CObjectVector<CMethodFull> Methods;
43370b324cSopenharmony_ci  CRecordVector<CBond2> Bonds;
44370b324cSopenharmony_ci
45370b324cSopenharmony_ci  bool IsThereBond_to_Coder(unsigned coderIndex) const
46370b324cSopenharmony_ci  {
47370b324cSopenharmony_ci    FOR_VECTOR(i, Bonds)
48370b324cSopenharmony_ci      if (Bonds[i].InCoder == coderIndex)
49370b324cSopenharmony_ci        return true;
50370b324cSopenharmony_ci    return false;
51370b324cSopenharmony_ci  }
52370b324cSopenharmony_ci
53370b324cSopenharmony_ci  bool DefaultMethod_was_Inserted;
54370b324cSopenharmony_ci  bool Filter_was_Inserted;
55370b324cSopenharmony_ci
56370b324cSopenharmony_ci  #ifndef Z7_ST
57370b324cSopenharmony_ci  UInt32 NumThreads;
58370b324cSopenharmony_ci  bool NumThreads_WasForced;
59370b324cSopenharmony_ci  bool MultiThreadMixer;
60370b324cSopenharmony_ci  #endif
61370b324cSopenharmony_ci
62370b324cSopenharmony_ci  UInt64 MemoryUsageLimit;
63370b324cSopenharmony_ci  bool MemoryUsageLimit_WasSet;
64370b324cSopenharmony_ci
65370b324cSopenharmony_ci  bool PasswordIsDefined;
66370b324cSopenharmony_ci  UString Password; // _Wipe
67370b324cSopenharmony_ci
68370b324cSopenharmony_ci  bool IsEmpty() const { return (Methods.IsEmpty() && !PasswordIsDefined); }
69370b324cSopenharmony_ci  CCompressionMethodMode():
70370b324cSopenharmony_ci        DefaultMethod_was_Inserted(false)
71370b324cSopenharmony_ci      , Filter_was_Inserted(false)
72370b324cSopenharmony_ci      #ifndef Z7_ST
73370b324cSopenharmony_ci      , NumThreads(1)
74370b324cSopenharmony_ci      , NumThreads_WasForced(false)
75370b324cSopenharmony_ci      , MultiThreadMixer(true)
76370b324cSopenharmony_ci      #endif
77370b324cSopenharmony_ci      , MemoryUsageLimit((UInt64)1 << 30)
78370b324cSopenharmony_ci      , MemoryUsageLimit_WasSet(false)
79370b324cSopenharmony_ci      , PasswordIsDefined(false)
80370b324cSopenharmony_ci  {}
81370b324cSopenharmony_ci
82370b324cSopenharmony_ci#ifdef Z7_CPP_IS_SUPPORTED_default
83370b324cSopenharmony_ci  CCompressionMethodMode(const CCompressionMethodMode &) = default;
84370b324cSopenharmony_ci  CCompressionMethodMode& operator =(const CCompressionMethodMode &) = default;
85370b324cSopenharmony_ci#endif
86370b324cSopenharmony_ci  ~CCompressionMethodMode() { Password.Wipe_and_Empty(); }
87370b324cSopenharmony_ci};
88370b324cSopenharmony_ci
89370b324cSopenharmony_ci}}
90370b324cSopenharmony_ci
91370b324cSopenharmony_ci#endif
92