00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014
00021 #if !defined(ZIPARCHIVE_ZIPEXTRADATA_DOT_H)
00022 #define ZIPARCHIVE_ZIPEXTRADATA_DOT_H
00023
00024 #if _MSC_VER > 1000
00025 #pragma once
00026 #endif
00027
00028 #include "ZipExport.h"
00029 #include "ZipAutoBuffer.h"
00030 #include "ZipExtraField.h"
00031 #include "memory.h"
00032
00039 class ZIP_API CZipExtraData
00040 {
00041 friend class CZipExtraField;
00042 public:
00043
00047 CZipAutoBuffer m_data;
00048
00055 bool m_bHasSize;
00056
00057 CZipExtraData()
00058 {
00059 m_uHeaderID = 0;
00060 m_bHasSize = true;
00061 }
00062
00063 CZipExtraData(const CZipExtraData& extra)
00064 {
00065 *this = extra;
00066 }
00067
00074 CZipExtraData(WORD uHeaderID)
00075 {
00076 m_uHeaderID = uHeaderID;
00077 m_bHasSize = true;
00078 }
00079
00080 CZipExtraData& operator=(const CZipExtraData& extra)
00081 {
00082 m_uHeaderID = extra.m_uHeaderID;
00083 DWORD uSize = extra.m_data.GetSize();
00084 m_data.Allocate(uSize);
00085 m_bHasSize = extra.m_bHasSize;
00086 if (uSize > 0)
00087 memcpy(m_data, extra.m_data, uSize);
00088 return *this;
00089 }
00090 bool operator==(const CZipExtraData& extra)
00091 {
00092 return m_uHeaderID == extra.m_uHeaderID && m_data.GetSize() == extra.m_data.GetSize() && memcmp(m_data, extra.m_data, m_data.GetSize()) == 0;
00093 }
00094 bool operator != (const CZipExtraData& extra)
00095 {
00096 return !(*this == extra);
00097 }
00098 bool operator > (const CZipExtraData& extra)
00099 {
00100 return m_uHeaderID > extra.m_uHeaderID;
00101 }
00102 bool operator < (const CZipExtraData& extra)
00103 {
00104 return m_uHeaderID < extra.m_uHeaderID;
00105 }
00106 bool operator >= (const CZipExtraData& extra)
00107 {
00108 return m_uHeaderID > extra.m_uHeaderID || *this == extra;
00109 }
00110
00111 bool operator <= (const CZipExtraData& extra)
00112 {
00113 return m_uHeaderID < extra.m_uHeaderID || *this == extra;
00114 }
00115
00122 int GetTotalSize() const
00123 {
00124 return (m_bHasSize ? 4 : 2) + m_data.GetSize();
00125 }
00126
00133 WORD GetHeaderID() const
00134 {
00135 return m_uHeaderID;
00136 }
00137
00138 protected:
00139
00152 bool Read(char* buffer, WORD uSize);
00153
00163 WORD Write(char* buffer)const;
00164
00165 private:
00166 WORD m_uHeaderID;
00167 };
00168
00169 #endif // !defined(ZIPARCHIVE_ZIPEXTRADATA_DOT_H)