7zitem.h

来自「由7-zip提供的压缩、解压缩程序」· C头文件 代码 · 共 182 行

H
182
字号
// 7zItem.h#ifndef __7Z_ITEM_H#define __7Z_ITEM_H#include "../../../Common/Buffer.h"#include "7zMethodID.h"#include "7zHeader.h"namespace NArchive {namespace N7z {struct CAltCoderInfo{  CMethodID MethodID;  CByteBuffer Properties;};typedef UInt32 CNum;const CNum kNumMax     = 0x7FFFFFFF;const CNum kNumNoIndex = 0xFFFFFFFF;struct CCoderInfo{  CNum NumInStreams;  CNum NumOutStreams;  CObjectVector<CAltCoderInfo> AltCoders;  bool IsSimpleCoder() const { return (NumInStreams == 1) && (NumOutStreams == 1); }};struct CBindPair{  CNum InIndex;  CNum OutIndex;};struct CFolder{  CObjectVector<CCoderInfo> Coders;  CRecordVector<CBindPair> BindPairs;  CRecordVector<CNum> PackStreams;  CRecordVector<UInt64> UnPackSizes;  UInt32 UnPackCRC;  bool UnPackCRCDefined;  CFolder(): UnPackCRCDefined(false) {}  UInt64 GetUnPackSize() const // test it  {     if (UnPackSizes.IsEmpty())      return 0;    for (int i = UnPackSizes.Size() - 1; i >= 0; i--)      if (FindBindPairForOutStream(i) < 0)        return UnPackSizes[i];    throw 1;  }  CNum GetNumOutStreams() const  {    CNum result = 0;    for (int i = 0; i < Coders.Size(); i++)      result += Coders[i].NumOutStreams;    return result;  }  int FindBindPairForInStream(CNum inStreamIndex) const  {    for(int i = 0; i < BindPairs.Size(); i++)      if (BindPairs[i].InIndex == inStreamIndex)        return i;    return -1;  }  int FindBindPairForOutStream(CNum outStreamIndex) const  {    for(int i = 0; i < BindPairs.Size(); i++)      if (BindPairs[i].OutIndex == outStreamIndex)        return i;    return -1;  }  int FindPackStreamArrayIndex(CNum inStreamIndex) const  {    for(int i = 0; i < PackStreams.Size(); i++)      if (PackStreams[i] == inStreamIndex)        return i;    return -1;  }};typedef FILETIME CArchiveFileTime;class CFileItem{public:  CArchiveFileTime CreationTime;  CArchiveFileTime LastWriteTime;  CArchiveFileTime LastAccessTime;  UInt64 UnPackSize;  UInt64 StartPos;  UInt32 Attributes;  UInt32 FileCRC;  UString Name;  bool HasStream; // Test it !!! it means that there is                   // stream in some folder. It can be empty stream  bool IsDirectory;  bool IsAnti;  bool IsFileCRCDefined;  bool AreAttributesDefined;  bool IsCreationTimeDefined;  bool IsLastWriteTimeDefined;  bool IsLastAccessTimeDefined;  bool IsStartPosDefined;  /*  const bool HasStream() const {       return !IsDirectory && !IsAnti && UnPackSize != 0; }  */  CFileItem():     HasStream(true),    IsDirectory(false),    IsAnti(false),    IsFileCRCDefined(false),    AreAttributesDefined(false),     IsCreationTimeDefined(false),     IsLastWriteTimeDefined(false),     IsLastAccessTimeDefined(false),    IsStartPosDefined(false)      {}  void SetAttributes(UInt32 attributes)   {     AreAttributesDefined = true;    Attributes = attributes;  }  void SetCreationTime(const CArchiveFileTime &creationTime)   {     IsCreationTimeDefined = true;    CreationTime = creationTime;  }  void SetLastWriteTime(const CArchiveFileTime &lastWriteTime)   {    IsLastWriteTimeDefined = true;    LastWriteTime = lastWriteTime;  }  void SetLastAccessTime(const CArchiveFileTime &lastAccessTime)   {     IsLastAccessTimeDefined = true;    LastAccessTime = lastAccessTime;  }};struct CArchiveDatabase{  CRecordVector<UInt64> PackSizes;  CRecordVector<bool> PackCRCsDefined;  CRecordVector<UInt32> PackCRCs;  CObjectVector<CFolder> Folders;  CRecordVector<CNum> NumUnPackStreamsVector;  CObjectVector<CFileItem> Files;  void Clear()  {    PackSizes.Clear();    PackCRCsDefined.Clear();    PackCRCs.Clear();    Folders.Clear();    NumUnPackStreamsVector.Clear();    Files.Clear();  }  bool IsEmpty() const  {    return (PackSizes.IsEmpty() &&       PackCRCsDefined.IsEmpty() &&       PackCRCs.IsEmpty() &&       Folders.IsEmpty() &&       NumUnPackStreamsVector.IsEmpty() &&       Files.IsEmpty());  }};}}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?