xref: /third_party/lzma/CPP/7zip/Archive/7z/7zUpdate.h (revision 370b324c)
1// 7zUpdate.h
2
3#ifndef ZIP7_INC_7Z_UPDATE_H
4#define ZIP7_INC_7Z_UPDATE_H
5
6#include "../IArchive.h"
7
8// #include "../../Common/UniqBlocks.h"
9
10#include "7zCompressionMode.h"
11#include "7zIn.h"
12
13namespace NArchive {
14namespace N7z {
15
16/*
17struct CTreeFolder
18{
19  UString Name;
20  int Parent;
21  CIntVector SubFolders;
22  int UpdateItemIndex;
23  int SortIndex;
24  int SortIndexEnd;
25
26  CTreeFolder(): UpdateItemIndex(-1) {}
27};
28*/
29
30struct CUpdateItem
31{
32  int IndexInArchive;
33  unsigned IndexInClient;
34
35  UInt64 CTime;
36  UInt64 ATime;
37  UInt64 MTime;
38
39  UInt64 Size;
40  UString Name;
41  /*
42  bool IsAltStream;
43  int ParentFolderIndex;
44  int TreeFolderIndex;
45  */
46
47  // that code is not used in 9.26
48  // int ParentSortIndex;
49  // int ParentSortIndexEnd;
50
51  UInt32 Attrib;
52
53  bool NewData;
54  bool NewProps;
55
56  bool IsAnti;
57  bool IsDir;
58
59  bool AttribDefined;
60  bool CTimeDefined;
61  bool ATimeDefined;
62  bool MTimeDefined;
63
64  // bool ATime_WasReadByAnalysis;
65
66  // int SecureIndex; // 0 means (no_security)
67
68  bool HasStream() const { return !IsDir && !IsAnti && Size != 0; }
69  // bool HasStream() const { return !IsDir && !IsAnti /* && Size != 0 */; } // for test purposes
70
71  CUpdateItem():
72      // ParentSortIndex(-1),
73      // IsAltStream(false),
74      IsAnti(false),
75      IsDir(false),
76      AttribDefined(false),
77      CTimeDefined(false),
78      ATimeDefined(false),
79      MTimeDefined(false)
80      // , ATime_WasReadByAnalysis(false)
81      // SecureIndex(0)
82      {}
83  void SetDirStatusFromAttrib() { IsDir = ((Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0); }
84
85  // unsigned GetExtensionPos() const;
86  // UString GetExtension() const;
87};
88
89struct CUpdateOptions
90{
91  const CCompressionMethodMode *Method;
92  const CCompressionMethodMode *HeaderMethod;
93  bool UseFilters; // use additional filters for some files
94  bool MaxFilter;  // use BCJ2 filter instead of BCJ
95  int AnalysisLevel;
96
97  UInt64 NumSolidFiles;
98  UInt64 NumSolidBytes;
99  bool SolidExtension;
100
101  bool UseTypeSorting;
102
103  bool RemoveSfxBlock;
104  bool MultiThreadMixer;
105
106  bool Need_CTime;
107  bool Need_ATime;
108  bool Need_MTime;
109  bool Need_Attrib;
110  // bool Need_Crc;
111
112  CHeaderOptions HeaderOptions;
113
114  CUpdateOptions():
115      Method(NULL),
116      HeaderMethod(NULL),
117      UseFilters(false),
118      MaxFilter(false),
119      AnalysisLevel(-1),
120      NumSolidFiles((UInt64)(Int64)(-1)),
121      NumSolidBytes((UInt64)(Int64)(-1)),
122      SolidExtension(false),
123      UseTypeSorting(true),
124      RemoveSfxBlock(false),
125      MultiThreadMixer(true),
126      Need_CTime(false),
127      Need_ATime(false),
128      Need_MTime(false),
129      Need_Attrib(false)
130      // , Need_Crc(true)
131    {}
132};
133
134HRESULT Update(
135    DECL_EXTERNAL_CODECS_LOC_VARS
136    IInStream *inStream,
137    const CDbEx *db,
138    CObjectVector<CUpdateItem> &updateItems,
139    // const CObjectVector<CTreeFolder> &treeFolders, // treeFolders[0] is root
140    // const CUniqBlocks &secureBlocks,
141    ISequentialOutStream *seqOutStream,
142    IArchiveUpdateCallback *updateCallback,
143    const CUpdateOptions &options);
144}}
145
146#endif
147