// 7zCompressionMode.h #ifndef __7Z_COMPRESSION_MODE_H #define __7Z_COMPRESSION_MODE_H #include "../../Common/MethodId.h" #include "../../Common/MethodProps.h" namespace NArchive { namespace N7z { struct CMethodFull: public CMethodProps { CMethodId Id; UInt32 NumStreams; int CodecIndex; UInt32 NumThreads; bool Set_NumThreads; CMethodFull(): CodecIndex(-1), NumThreads(1), Set_NumThreads(false) {} bool IsSimpleCoder() const { return NumStreams == 1; } }; struct CBond2 { UInt32 OutCoder; UInt32 OutStream; UInt32 InCoder; }; struct CCompressionMethodMode { /* if (Bonds.Empty()), then default bonds must be created if (Filter_was_Inserted) { Methods[0] is filter method Bonds don't contain bonds for filter (these bonds must be created) } */ CObjectVector Methods; CRecordVector Bonds; bool IsThereBond_to_Coder(unsigned coderIndex) const { FOR_VECTOR(i, Bonds) if (Bonds[i].InCoder == coderIndex) return true; return false; } bool DefaultMethod_was_Inserted; bool Filter_was_Inserted; #ifndef _7ZIP_ST UInt32 NumThreads; bool NumThreads_WasForced; bool MultiThreadMixer; #endif UInt64 MemoryUsageLimit; bool MemoryUsageLimit_WasSet; bool PasswordIsDefined; UString Password; // _Wipe bool IsEmpty() const { return (Methods.IsEmpty() && !PasswordIsDefined); } CCompressionMethodMode(): DefaultMethod_was_Inserted(false) , Filter_was_Inserted(false) #ifndef _7ZIP_ST , NumThreads(1) , NumThreads_WasForced(false) , MultiThreadMixer(true) #endif , MemoryUsageLimit((UInt64)1 << 30) , MemoryUsageLimit_WasSet(false) , PasswordIsDefined(false) {} ~CCompressionMethodMode() { Password.Wipe_and_Empty(); } }; }} #endif