diff --git a/Data~/ModifiedUnityAssemblies/2019.4.40.meta b/Data~/ModifiedUnityAssemblies/2019.4.40.meta deleted file mode 100644 index e7f046c..0000000 --- a/Data~/ModifiedUnityAssemblies/2019.4.40.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1cd43f2247d29084fa2b393c30648e64 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Mac.dll.bytes b/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Mac.dll.bytes deleted file mode 100644 index 2cce7a7..0000000 Binary files a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Mac.dll.bytes and /dev/null differ diff --git a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Mac.dll.bytes.meta b/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Mac.dll.bytes.meta deleted file mode 100644 index 7f1660b..0000000 --- a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Mac.dll.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 22f11da50eb60c245b40028549937af6 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Win.dll.bytes b/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Win.dll.bytes deleted file mode 100644 index 17135a1..0000000 Binary files a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Win.dll.bytes and /dev/null differ diff --git a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Win.dll.bytes.meta b/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Win.dll.bytes.meta deleted file mode 100644 index 7906319..0000000 --- a/Data~/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP-Win.dll.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 94322e93a1f61b340bdc1d5042dab659 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip.meta b/Editor/3rds/7zip.meta deleted file mode 100644 index 48fedff..0000000 --- a/Editor/3rds/7zip.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 08f44f6e8bfbc2c45afae7bdd2d7f21f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Common.meta b/Editor/3rds/7zip/Common.meta deleted file mode 100644 index 0e4cc9e..0000000 --- a/Editor/3rds/7zip/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5cedddbfa873eb94496b496e2a3ce8aa -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Common/CRC.cs b/Editor/3rds/7zip/Common/CRC.cs deleted file mode 100644 index d03fcec..0000000 --- a/Editor/3rds/7zip/Common/CRC.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Common/CRC.cs - -namespace SevenZip -{ - public class CRC - { - public static readonly uint[] Table; - - static CRC() - { - Table = new uint[256]; - const uint kPoly = 0xEDB88320; - for (uint i = 0; i < 256; i++) - { - uint r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >> 1) ^ kPoly; - else - r >>= 1; - Table[i] = r; - } - } - - uint _value = 0xFFFFFFFF; - - public void Init() { _value = 0xFFFFFFFF; } - - public void UpdateByte(byte b) - { - _value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8); - } - - public void Update(byte[] data, uint offset, uint size) - { - for (uint i = 0; i < size; i++) - _value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8); - } - - public uint GetDigest() { return _value ^ 0xFFFFFFFF; } - - static uint CalculateDigest(byte[] data, uint offset, uint size) - { - CRC crc = new CRC(); - // crc.Init(); - crc.Update(data, offset, size); - return crc.GetDigest(); - } - - static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size) - { - return (CalculateDigest(data, offset, size) == digest); - } - } -} diff --git a/Editor/3rds/7zip/Common/CommandLineParser.cs b/Editor/3rds/7zip/Common/CommandLineParser.cs deleted file mode 100644 index 8eabf59..0000000 --- a/Editor/3rds/7zip/Common/CommandLineParser.cs +++ /dev/null @@ -1,274 +0,0 @@ -// CommandLineParser.cs - -using System; -using System.Collections; - -namespace SevenZip.CommandLineParser -{ - public enum SwitchType - { - Simple, - PostMinus, - LimitedPostString, - UnLimitedPostString, - PostChar - } - - public class SwitchForm - { - public string IDString; - public SwitchType Type; - public bool Multi; - public int MinLen; - public int MaxLen; - public string PostCharSet; - - public SwitchForm(string idString, SwitchType type, bool multi, - int minLen, int maxLen, string postCharSet) - { - IDString = idString; - Type = type; - Multi = multi; - MinLen = minLen; - MaxLen = maxLen; - PostCharSet = postCharSet; - } - public SwitchForm(string idString, SwitchType type, bool multi, int minLen): - this(idString, type, multi, minLen, 0, "") - { - } - public SwitchForm(string idString, SwitchType type, bool multi): - this(idString, type, multi, 0) - { - } - } - - public class SwitchResult - { - public bool ThereIs; - public bool WithMinus; - public ArrayList PostStrings = new ArrayList(); - public int PostCharIndex; - public SwitchResult() - { - ThereIs = false; - } - } - - public class Parser - { - public ArrayList NonSwitchStrings = new ArrayList(); - SwitchResult[] _switches; - - public Parser(int numSwitches) - { - _switches = new SwitchResult[numSwitches]; - for (int i = 0; i < numSwitches; i++) - _switches[i] = new SwitchResult(); - } - - bool ParseString(string srcString, SwitchForm[] switchForms) - { - int len = srcString.Length; - if (len == 0) - return false; - int pos = 0; - if (!IsItSwitchChar(srcString[pos])) - return false; - while (pos < len) - { - if (IsItSwitchChar(srcString[pos])) - pos++; - const int kNoLen = -1; - int matchedSwitchIndex = 0; - int maxLen = kNoLen; - for (int switchIndex = 0; switchIndex < _switches.Length; switchIndex++) - { - int switchLen = switchForms[switchIndex].IDString.Length; - if (switchLen <= maxLen || pos + switchLen > len) - continue; - if (String.Compare(switchForms[switchIndex].IDString, 0, - srcString, pos, switchLen, true) == 0) - { - matchedSwitchIndex = switchIndex; - maxLen = switchLen; - } - } - if (maxLen == kNoLen) - throw new Exception("maxLen == kNoLen"); - SwitchResult matchedSwitch = _switches[matchedSwitchIndex]; - SwitchForm switchForm = switchForms[matchedSwitchIndex]; - if ((!switchForm.Multi) && matchedSwitch.ThereIs) - throw new Exception("switch must be single"); - matchedSwitch.ThereIs = true; - pos += maxLen; - int tailSize = len - pos; - SwitchType type = switchForm.Type; - switch (type) - { - case SwitchType.PostMinus: - { - if (tailSize == 0) - matchedSwitch.WithMinus = false; - else - { - matchedSwitch.WithMinus = (srcString[pos] == kSwitchMinus); - if (matchedSwitch.WithMinus) - pos++; - } - break; - } - case SwitchType.PostChar: - { - if (tailSize < switchForm.MinLen) - throw new Exception("switch is not full"); - string charSet = switchForm.PostCharSet; - const int kEmptyCharValue = -1; - if (tailSize == 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - int index = charSet.IndexOf(srcString[pos]); - if (index < 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - matchedSwitch.PostCharIndex = index; - pos++; - } - } - break; - } - case SwitchType.LimitedPostString: - case SwitchType.UnLimitedPostString: - { - int minLen = switchForm.MinLen; - if (tailSize < minLen) - throw new Exception("switch is not full"); - if (type == SwitchType.UnLimitedPostString) - { - matchedSwitch.PostStrings.Add(srcString.Substring(pos)); - return true; - } - String stringSwitch = srcString.Substring(pos, minLen); - pos += minLen; - for (int i = minLen; i < switchForm.MaxLen && pos < len; i++, pos++) - { - char c = srcString[pos]; - if (IsItSwitchChar(c)) - break; - stringSwitch += c; - } - matchedSwitch.PostStrings.Add(stringSwitch); - break; - } - } - } - return true; - - } - - public void ParseStrings(SwitchForm[] switchForms, string[] commandStrings) - { - int numCommandStrings = commandStrings.Length; - bool stopSwitch = false; - for (int i = 0; i < numCommandStrings; i++) - { - string s = commandStrings[i]; - if (stopSwitch) - NonSwitchStrings.Add(s); - else - if (s == kStopSwitchParsing) - stopSwitch = true; - else - if (!ParseString(s, switchForms)) - NonSwitchStrings.Add(s); - } - } - - public SwitchResult this[int index] { get { return _switches[index]; } } - - public static int ParseCommand(CommandForm[] commandForms, string commandString, - out string postString) - { - for (int i = 0; i < commandForms.Length; i++) - { - string id = commandForms[i].IDString; - if (commandForms[i].PostStringMode) - { - if (commandString.IndexOf(id) == 0) - { - postString = commandString.Substring(id.Length); - return i; - } - } - else - if (commandString == id) - { - postString = ""; - return i; - } - } - postString = ""; - return -1; - } - - static bool ParseSubCharsCommand(int numForms, CommandSubCharsSet[] forms, - string commandString, ArrayList indices) - { - indices.Clear(); - int numUsedChars = 0; - for (int i = 0; i < numForms; i++) - { - CommandSubCharsSet charsSet = forms[i]; - int currentIndex = -1; - int len = charsSet.Chars.Length; - for (int j = 0; j < len; j++) - { - char c = charsSet.Chars[j]; - int newIndex = commandString.IndexOf(c); - if (newIndex >= 0) - { - if (currentIndex >= 0) - return false; - if (commandString.IndexOf(c, newIndex + 1) >= 0) - return false; - currentIndex = j; - numUsedChars++; - } - } - if (currentIndex == -1 && !charsSet.EmptyAllowed) - return false; - indices.Add(currentIndex); - } - return (numUsedChars == commandString.Length); - } - const char kSwitchID1 = '-'; - const char kSwitchID2 = '/'; - - const char kSwitchMinus = '-'; - const string kStopSwitchParsing = "--"; - - static bool IsItSwitchChar(char c) - { - return (c == kSwitchID1 || c == kSwitchID2); - } - } - - public class CommandForm - { - public string IDString = ""; - public bool PostStringMode = false; - public CommandForm(string idString, bool postStringMode) - { - IDString = idString; - PostStringMode = postStringMode; - } - } - - class CommandSubCharsSet - { - public string Chars = ""; - public bool EmptyAllowed = false; - } -} diff --git a/Editor/3rds/7zip/Common/CommandLineParser.cs.meta b/Editor/3rds/7zip/Common/CommandLineParser.cs.meta deleted file mode 100644 index a35c292..0000000 --- a/Editor/3rds/7zip/Common/CommandLineParser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dc0b3921c07ef224cb3656391f4317c3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Common/InBuffer.cs b/Editor/3rds/7zip/Common/InBuffer.cs deleted file mode 100644 index 7c51f0b..0000000 --- a/Editor/3rds/7zip/Common/InBuffer.cs +++ /dev/null @@ -1,72 +0,0 @@ -// InBuffer.cs - -namespace SevenZip.Buffer -{ - public class InBuffer - { - byte[] m_Buffer; - uint m_Pos; - uint m_Limit; - uint m_BufferSize; - System.IO.Stream m_Stream; - bool m_StreamWasExhausted; - ulong m_ProcessedSize; - - public InBuffer(uint bufferSize) - { - m_Buffer = new byte[bufferSize]; - m_BufferSize = bufferSize; - } - - public void Init(System.IO.Stream stream) - { - m_Stream = stream; - m_ProcessedSize = 0; - m_Limit = 0; - m_Pos = 0; - m_StreamWasExhausted = false; - } - - public bool ReadBlock() - { - if (m_StreamWasExhausted) - return false; - m_ProcessedSize += m_Pos; - int aNumProcessedBytes = m_Stream.Read(m_Buffer, 0, (int)m_BufferSize); - m_Pos = 0; - m_Limit = (uint)aNumProcessedBytes; - m_StreamWasExhausted = (aNumProcessedBytes == 0); - return (!m_StreamWasExhausted); - } - - - public void ReleaseStream() - { - // m_Stream.Close(); - m_Stream = null; - } - - public bool ReadByte(byte b) // check it - { - if (m_Pos >= m_Limit) - if (!ReadBlock()) - return false; - b = m_Buffer[m_Pos++]; - return true; - } - - public byte ReadByte() - { - // return (byte)m_Stream.ReadByte(); - if (m_Pos >= m_Limit) - if (!ReadBlock()) - return 0xFF; - return m_Buffer[m_Pos++]; - } - - public ulong GetProcessedSize() - { - return m_ProcessedSize + m_Pos; - } - } -} diff --git a/Editor/3rds/7zip/Common/InBuffer.cs.meta b/Editor/3rds/7zip/Common/InBuffer.cs.meta deleted file mode 100644 index 843e5cf..0000000 --- a/Editor/3rds/7zip/Common/InBuffer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6ea025f5b275726479ba55e956574898 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Common/OutBuffer.cs b/Editor/3rds/7zip/Common/OutBuffer.cs deleted file mode 100644 index 2da16e1..0000000 --- a/Editor/3rds/7zip/Common/OutBuffer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// OutBuffer.cs - -namespace SevenZip.Buffer -{ - public class OutBuffer - { - byte[] m_Buffer; - uint m_Pos; - uint m_BufferSize; - System.IO.Stream m_Stream; - ulong m_ProcessedSize; - - public OutBuffer(uint bufferSize) - { - m_Buffer = new byte[bufferSize]; - m_BufferSize = bufferSize; - } - - public void SetStream(System.IO.Stream stream) { m_Stream = stream; } - public void FlushStream() { m_Stream.Flush(); } - public void CloseStream() { m_Stream.Close(); } - public void ReleaseStream() { m_Stream = null; } - - public void Init() - { - m_ProcessedSize = 0; - m_Pos = 0; - } - - public void WriteByte(byte b) - { - m_Buffer[m_Pos++] = b; - if (m_Pos >= m_BufferSize) - FlushData(); - } - - public void FlushData() - { - if (m_Pos == 0) - return; - m_Stream.Write(m_Buffer, 0, (int)m_Pos); - m_Pos = 0; - } - - public ulong GetProcessedSize() { return m_ProcessedSize + m_Pos; } - } -} diff --git a/Editor/3rds/7zip/Common/OutBuffer.cs.meta b/Editor/3rds/7zip/Common/OutBuffer.cs.meta deleted file mode 100644 index 38af8c8..0000000 --- a/Editor/3rds/7zip/Common/OutBuffer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5d61847c152e7384ab15aea89a942f54 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress.meta b/Editor/3rds/7zip/Compress.meta deleted file mode 100644 index b67e6ba..0000000 --- a/Editor/3rds/7zip/Compress.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4b6765bf0d03fd243b47d74c9b73c38b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZ.meta b/Editor/3rds/7zip/Compress/LZ.meta deleted file mode 100644 index c303414..0000000 --- a/Editor/3rds/7zip/Compress/LZ.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a83572c42056f474db56e761a4f35e38 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZ/IMatchFinder.cs b/Editor/3rds/7zip/Compress/LZ/IMatchFinder.cs deleted file mode 100644 index 10ca2b3..0000000 --- a/Editor/3rds/7zip/Compress/LZ/IMatchFinder.cs +++ /dev/null @@ -1,24 +0,0 @@ -// IMatchFinder.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - interface IInWindowStream - { - void SetStream(System.IO.Stream inStream); - void Init(); - void ReleaseStream(); - Byte GetIndexByte(Int32 index); - UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit); - UInt32 GetNumAvailableBytes(); - } - - interface IMatchFinder : IInWindowStream - { - void Create(UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter); - UInt32 GetMatches(UInt32[] distances); - void Skip(UInt32 num); - } -} diff --git a/Editor/3rds/7zip/Compress/LZ/IMatchFinder.cs.meta b/Editor/3rds/7zip/Compress/LZ/IMatchFinder.cs.meta deleted file mode 100644 index 88c6d3d..0000000 --- a/Editor/3rds/7zip/Compress/LZ/IMatchFinder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bfd1ee430d8108042a2607d92d7f58ad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZ/LzBinTree.cs b/Editor/3rds/7zip/Compress/LZ/LzBinTree.cs deleted file mode 100644 index c1c006b..0000000 --- a/Editor/3rds/7zip/Compress/LZ/LzBinTree.cs +++ /dev/null @@ -1,367 +0,0 @@ -// LzBinTree.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - public class BinTree : InWindow, IMatchFinder - { - UInt32 _cyclicBufferPos; - UInt32 _cyclicBufferSize = 0; - UInt32 _matchMaxLen; - - UInt32[] _son; - UInt32[] _hash; - - UInt32 _cutValue = 0xFF; - UInt32 _hashMask; - UInt32 _hashSizeSum = 0; - - bool HASH_ARRAY = true; - - const UInt32 kHash2Size = 1 << 10; - const UInt32 kHash3Size = 1 << 16; - const UInt32 kBT2HashSize = 1 << 16; - const UInt32 kStartMaxLen = 1; - const UInt32 kHash3Offset = kHash2Size; - const UInt32 kEmptyHashValue = 0; - const UInt32 kMaxValForNormalize = ((UInt32)1 << 31) - 1; - - UInt32 kNumHashDirectBytes = 0; - UInt32 kMinMatchCheck = 4; - UInt32 kFixHashSize = kHash2Size + kHash3Size; - - public void SetType(int numHashBytes) - { - HASH_ARRAY = (numHashBytes > 2); - if (HASH_ARRAY) - { - kNumHashDirectBytes = 0; - kMinMatchCheck = 4; - kFixHashSize = kHash2Size + kHash3Size; - } - else - { - kNumHashDirectBytes = 2; - kMinMatchCheck = 2 + 1; - kFixHashSize = 0; - } - } - - public new void SetStream(System.IO.Stream stream) { base.SetStream(stream); } - public new void ReleaseStream() { base.ReleaseStream(); } - - public new void Init() - { - base.Init(); - for (UInt32 i = 0; i < _hashSizeSum; i++) - _hash[i] = kEmptyHashValue; - _cyclicBufferPos = 0; - ReduceOffsets(-1); - } - - public new void MovePos() - { - if (++_cyclicBufferPos >= _cyclicBufferSize) - _cyclicBufferPos = 0; - base.MovePos(); - if (_pos == kMaxValForNormalize) - Normalize(); - } - - public new Byte GetIndexByte(Int32 index) { return base.GetIndexByte(index); } - - public new UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) - { return base.GetMatchLen(index, distance, limit); } - - public new UInt32 GetNumAvailableBytes() { return base.GetNumAvailableBytes(); } - - public void Create(UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter) - { - if (historySize > kMaxValForNormalize - 256) - throw new Exception(); - _cutValue = 16 + (matchMaxLen >> 1); - - UInt32 windowReservSize = (historySize + keepAddBufferBefore + - matchMaxLen + keepAddBufferAfter) / 2 + 256; - - base.Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); - - _matchMaxLen = matchMaxLen; - - UInt32 cyclicBufferSize = historySize + 1; - if (_cyclicBufferSize != cyclicBufferSize) - _son = new UInt32[(_cyclicBufferSize = cyclicBufferSize) * 2]; - - UInt32 hs = kBT2HashSize; - - if (HASH_ARRAY) - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - _hashMask = hs; - hs++; - hs += kFixHashSize; - } - if (hs != _hashSizeSum) - _hash = new UInt32[_hashSizeSum = hs]; - } - - public UInt32 GetMatches(UInt32[] distances) - { - UInt32 lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - return 0; - } - } - - UInt32 offset = 0; - UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - UInt32 cur = _bufferOffset + _pos; - UInt32 maxLen = kStartMaxLen; // to avoid items for len < hashSize; - UInt32 hashValue, hash2Value = 0, hash3Value = 0; - - if (HASH_ARRAY) - { - UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1]; - hash2Value = temp & (kHash2Size - 1); - temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8); - hash3Value = temp & (kHash3Size - 1); - hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask; - } - else - hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8); - - UInt32 curMatch = _hash[kFixHashSize + hashValue]; - if (HASH_ARRAY) - { - UInt32 curMatch2 = _hash[hash2Value]; - UInt32 curMatch3 = _hash[kHash3Offset + hash3Value]; - _hash[hash2Value] = _pos; - _hash[kHash3Offset + hash3Value] = _pos; - if (curMatch2 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch2] == _bufferBase[cur]) - { - distances[offset++] = maxLen = 2; - distances[offset++] = _pos - curMatch2 - 1; - } - if (curMatch3 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch3] == _bufferBase[cur]) - { - if (curMatch3 == curMatch2) - offset -= 2; - distances[offset++] = maxLen = 3; - distances[offset++] = _pos - curMatch3 - 1; - curMatch2 = curMatch3; - } - if (offset != 0 && curMatch2 == curMatch) - { - offset -= 2; - maxLen = kStartMaxLen; - } - } - - _hash[kFixHashSize + hashValue] = _pos; - - UInt32 ptr0 = (_cyclicBufferPos << 1) + 1; - UInt32 ptr1 = (_cyclicBufferPos << 1); - - UInt32 len0, len1; - len0 = len1 = kNumHashDirectBytes; - - if (kNumHashDirectBytes != 0) - { - if (curMatch > matchMinPos) - { - if (_bufferBase[_bufferOffset + curMatch + kNumHashDirectBytes] != - _bufferBase[cur + kNumHashDirectBytes]) - { - distances[offset++] = maxLen = kNumHashDirectBytes; - distances[offset++] = _pos - curMatch - 1; - } - } - } - - UInt32 count = _cutValue; - - while(true) - { - if(curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - UInt32 delta = _pos - curMatch; - UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - UInt32 pby1 = _bufferOffset + curMatch; - UInt32 len = Math.Min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while(++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (maxLen < len) - { - distances[offset++] = maxLen = len; - distances[offset++] = delta - 1; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - } - if (_bufferBase[pby1 + len] < _bufferBase[cur + len]) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - return offset; - } - - public void Skip(UInt32 num) - { - do - { - UInt32 lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - continue; - } - } - - UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - UInt32 cur = _bufferOffset + _pos; - - UInt32 hashValue; - - if (HASH_ARRAY) - { - UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1]; - UInt32 hash2Value = temp & (kHash2Size - 1); - _hash[hash2Value] = _pos; - temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8); - UInt32 hash3Value = temp & (kHash3Size - 1); - _hash[kHash3Offset + hash3Value] = _pos; - hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask; - } - else - hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8); - - UInt32 curMatch = _hash[kFixHashSize + hashValue]; - _hash[kFixHashSize + hashValue] = _pos; - - UInt32 ptr0 = (_cyclicBufferPos << 1) + 1; - UInt32 ptr1 = (_cyclicBufferPos << 1); - - UInt32 len0, len1; - len0 = len1 = kNumHashDirectBytes; - - UInt32 count = _cutValue; - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - - UInt32 delta = _pos - curMatch; - UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - UInt32 pby1 = _bufferOffset + curMatch; - UInt32 len = Math.Min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while (++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - if (_bufferBase[pby1 + len] < _bufferBase[cur + len]) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - } - while (--num != 0); - } - - void NormalizeLinks(UInt32[] items, UInt32 numItems, UInt32 subValue) - { - for (UInt32 i = 0; i < numItems; i++) - { - UInt32 value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } - } - - void Normalize() - { - UInt32 subValue = _pos - _cyclicBufferSize; - NormalizeLinks(_son, _cyclicBufferSize * 2, subValue); - NormalizeLinks(_hash, _hashSizeSum, subValue); - ReduceOffsets((Int32)subValue); - } - - public void SetCutValue(UInt32 cutValue) { _cutValue = cutValue; } - } -} diff --git a/Editor/3rds/7zip/Compress/LZ/LzBinTree.cs.meta b/Editor/3rds/7zip/Compress/LZ/LzBinTree.cs.meta deleted file mode 100644 index 49637e8..0000000 --- a/Editor/3rds/7zip/Compress/LZ/LzBinTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3ba8015d2d5df3a459615ffc06635e6d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZ/LzInWindow.cs b/Editor/3rds/7zip/Compress/LZ/LzInWindow.cs deleted file mode 100644 index 52d23ce..0000000 --- a/Editor/3rds/7zip/Compress/LZ/LzInWindow.cs +++ /dev/null @@ -1,132 +0,0 @@ -// LzInWindow.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - public class InWindow - { - public Byte[] _bufferBase = null; // pointer to buffer with data - System.IO.Stream _stream; - UInt32 _posLimit; // offset (from _buffer) of first byte when new block reading must be done - bool _streamEndWasReached; // if (true) then _streamPos shows real end of stream - - UInt32 _pointerToLastSafePosition; - - public UInt32 _bufferOffset; - - public UInt32 _blockSize; // Size of Allocated memory block - public UInt32 _pos; // offset (from _buffer) of curent byte - UInt32 _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos - UInt32 _keepSizeAfter; // how many BYTEs must be kept buffer after _pos - public UInt32 _streamPos; // offset (from _buffer) of first not read byte from Stream - - public void MoveBlock() - { - UInt32 offset = (UInt32)(_bufferOffset) + _pos - _keepSizeBefore; - // we need one additional byte, since MovePos moves on 1 byte. - if (offset > 0) - offset--; - - UInt32 numBytes = (UInt32)(_bufferOffset) + _streamPos - offset; - - // check negative offset ???? - for (UInt32 i = 0; i < numBytes; i++) - _bufferBase[i] = _bufferBase[offset + i]; - _bufferOffset -= offset; - } - - public virtual void ReadBlock() - { - if (_streamEndWasReached) - return; - while (true) - { - int size = (int)((0 - _bufferOffset) + _blockSize - _streamPos); - if (size == 0) - return; - int numReadBytes = _stream.Read(_bufferBase, (int)(_bufferOffset + _streamPos), size); - if (numReadBytes == 0) - { - _posLimit = _streamPos; - UInt32 pointerToPostion = _bufferOffset + _posLimit; - if (pointerToPostion > _pointerToLastSafePosition) - _posLimit = (UInt32)(_pointerToLastSafePosition - _bufferOffset); - - _streamEndWasReached = true; - return; - } - _streamPos += (UInt32)numReadBytes; - if (_streamPos >= _pos + _keepSizeAfter) - _posLimit = _streamPos - _keepSizeAfter; - } - } - - void Free() { _bufferBase = null; } - - public void Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv) - { - _keepSizeBefore = keepSizeBefore; - _keepSizeAfter = keepSizeAfter; - UInt32 blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv; - if (_bufferBase == null || _blockSize != blockSize) - { - Free(); - _blockSize = blockSize; - _bufferBase = new Byte[_blockSize]; - } - _pointerToLastSafePosition = _blockSize - keepSizeAfter; - } - - public void SetStream(System.IO.Stream stream) { _stream = stream; } - public void ReleaseStream() { _stream = null; } - - public void Init() - { - _bufferOffset = 0; - _pos = 0; - _streamPos = 0; - _streamEndWasReached = false; - ReadBlock(); - } - - public void MovePos() - { - _pos++; - if (_pos > _posLimit) - { - UInt32 pointerToPostion = _bufferOffset + _pos; - if (pointerToPostion > _pointerToLastSafePosition) - MoveBlock(); - ReadBlock(); - } - } - - public Byte GetIndexByte(Int32 index) { return _bufferBase[_bufferOffset + _pos + index]; } - - // index + limit have not to exceed _keepSizeAfter; - public UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) - { - if (_streamEndWasReached) - if ((_pos + index) + limit > _streamPos) - limit = _streamPos - (UInt32)(_pos + index); - distance++; - // Byte *pby = _buffer + (size_t)_pos + index; - UInt32 pby = _bufferOffset + _pos + (UInt32)index; - - UInt32 i; - for (i = 0; i < limit && _bufferBase[pby + i] == _bufferBase[pby + i - distance]; i++); - return i; - } - - public UInt32 GetNumAvailableBytes() { return _streamPos - _pos; } - - public void ReduceOffsets(Int32 subValue) - { - _bufferOffset += (UInt32)subValue; - _posLimit -= (UInt32)subValue; - _pos -= (UInt32)subValue; - _streamPos -= (UInt32)subValue; - } - } -} diff --git a/Editor/3rds/7zip/Compress/LZ/LzInWindow.cs.meta b/Editor/3rds/7zip/Compress/LZ/LzInWindow.cs.meta deleted file mode 100644 index f1e45d6..0000000 --- a/Editor/3rds/7zip/Compress/LZ/LzInWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 333112c3785a6ec4cbbfec8515081cac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZ/LzOutWindow.cs b/Editor/3rds/7zip/Compress/LZ/LzOutWindow.cs deleted file mode 100644 index c998584..0000000 --- a/Editor/3rds/7zip/Compress/LZ/LzOutWindow.cs +++ /dev/null @@ -1,110 +0,0 @@ -// LzOutWindow.cs - -namespace SevenZip.Compression.LZ -{ - public class OutWindow - { - byte[] _buffer = null; - uint _pos; - uint _windowSize = 0; - uint _streamPos; - System.IO.Stream _stream; - - public uint TrainSize = 0; - - public void Create(uint windowSize) - { - if (_windowSize != windowSize) - { - // System.GC.Collect(); - _buffer = new byte[windowSize]; - } - _windowSize = windowSize; - _pos = 0; - _streamPos = 0; - } - - public void Init(System.IO.Stream stream, bool solid) - { - ReleaseStream(); - _stream = stream; - if (!solid) - { - _streamPos = 0; - _pos = 0; - TrainSize = 0; - } - } - - public bool Train(System.IO.Stream stream) - { - long len = stream.Length; - uint size = (len < _windowSize) ? (uint)len : _windowSize; - TrainSize = size; - stream.Position = len - size; - _streamPos = _pos = 0; - while (size > 0) - { - uint curSize = _windowSize - _pos; - if (size < curSize) - curSize = size; - int numReadBytes = stream.Read(_buffer, (int)_pos, (int)curSize); - if (numReadBytes == 0) - return false; - size -= (uint)numReadBytes; - _pos += (uint)numReadBytes; - _streamPos += (uint)numReadBytes; - if (_pos == _windowSize) - _streamPos = _pos = 0; - } - return true; - } - - public void ReleaseStream() - { - Flush(); - _stream = null; - } - - public void Flush() - { - uint size = _pos - _streamPos; - if (size == 0) - return; - _stream.Write(_buffer, (int)_streamPos, (int)size); - if (_pos >= _windowSize) - _pos = 0; - _streamPos = _pos; - } - - public void CopyBlock(uint distance, uint len) - { - uint pos = _pos - distance - 1; - if (pos >= _windowSize) - pos += _windowSize; - for (; len > 0; len--) - { - if (pos >= _windowSize) - pos = 0; - _buffer[_pos++] = _buffer[pos++]; - if (_pos >= _windowSize) - Flush(); - } - } - - public void PutByte(byte b) - { - _buffer[_pos++] = b; - if (_pos >= _windowSize) - Flush(); - } - - public byte GetByte(uint distance) - { - uint pos = _pos - distance - 1; - if (pos >= _windowSize) - pos += _windowSize; - return _buffer[pos]; - } - } -} diff --git a/Editor/3rds/7zip/Compress/LZ/LzOutWindow.cs.meta b/Editor/3rds/7zip/Compress/LZ/LzOutWindow.cs.meta deleted file mode 100644 index 7b3f534..0000000 --- a/Editor/3rds/7zip/Compress/LZ/LzOutWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bb296a6e14ab7c44cb6388693d581a62 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZMA.meta b/Editor/3rds/7zip/Compress/LZMA.meta deleted file mode 100644 index 5c45968..0000000 --- a/Editor/3rds/7zip/Compress/LZMA.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5fcd2f5c8b724164a8a01cee73896d1a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZMA/LzmaBase.cs b/Editor/3rds/7zip/Compress/LZMA/LzmaBase.cs deleted file mode 100644 index c7bca86..0000000 --- a/Editor/3rds/7zip/Compress/LZMA/LzmaBase.cs +++ /dev/null @@ -1,76 +0,0 @@ -// LzmaBase.cs - -namespace SevenZip.Compression.LZMA -{ - internal abstract class Base - { - public const uint kNumRepDistances = 4; - public const uint kNumStates = 12; - - // static byte []kLiteralNextStates = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; - // static byte []kMatchNextStates = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; - // static byte []kRepNextStates = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; - // static byte []kShortRepNextStates = {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; - - public struct State - { - public uint Index; - public void Init() { Index = 0; } - public void UpdateChar() - { - if (Index < 4) Index = 0; - else if (Index < 10) Index -= 3; - else Index -= 6; - } - public void UpdateMatch() { Index = (uint)(Index < 7 ? 7 : 10); } - public void UpdateRep() { Index = (uint)(Index < 7 ? 8 : 11); } - public void UpdateShortRep() { Index = (uint)(Index < 7 ? 9 : 11); } - public bool IsCharState() { return Index < 7; } - } - - public const int kNumPosSlotBits = 6; - public const int kDicLogSizeMin = 0; - // public const int kDicLogSizeMax = 30; - // public const uint kDistTableSizeMax = kDicLogSizeMax * 2; - - public const int kNumLenToPosStatesBits = 2; // it's for speed optimization - public const uint kNumLenToPosStates = 1 << kNumLenToPosStatesBits; - - public const uint kMatchMinLen = 2; - - public static uint GetLenToPosState(uint len) - { - len -= kMatchMinLen; - if (len < kNumLenToPosStates) - return len; - return (uint)(kNumLenToPosStates - 1); - } - - public const int kNumAlignBits = 4; - public const uint kAlignTableSize = 1 << kNumAlignBits; - public const uint kAlignMask = (kAlignTableSize - 1); - - public const uint kStartPosModelIndex = 4; - public const uint kEndPosModelIndex = 14; - public const uint kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; - - public const uint kNumFullDistances = 1 << ((int)kEndPosModelIndex / 2); - - public const uint kNumLitPosStatesBitsEncodingMax = 4; - public const uint kNumLitContextBitsMax = 8; - - public const int kNumPosStatesBitsMax = 4; - public const uint kNumPosStatesMax = (1 << kNumPosStatesBitsMax); - public const int kNumPosStatesBitsEncodingMax = 4; - public const uint kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); - - public const int kNumLowLenBits = 3; - public const int kNumMidLenBits = 3; - public const int kNumHighLenBits = 8; - public const uint kNumLowLenSymbols = 1 << kNumLowLenBits; - public const uint kNumMidLenSymbols = 1 << kNumMidLenBits; - public const uint kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + - (1 << kNumHighLenBits); - public const uint kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; - } -} diff --git a/Editor/3rds/7zip/Compress/LZMA/LzmaBase.cs.meta b/Editor/3rds/7zip/Compress/LZMA/LzmaBase.cs.meta deleted file mode 100644 index 10b16ed..0000000 --- a/Editor/3rds/7zip/Compress/LZMA/LzmaBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 62f365191077342479f8227edadf57e3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZMA/LzmaDecoder.cs b/Editor/3rds/7zip/Compress/LZMA/LzmaDecoder.cs deleted file mode 100644 index a9be39f..0000000 --- a/Editor/3rds/7zip/Compress/LZMA/LzmaDecoder.cs +++ /dev/null @@ -1,398 +0,0 @@ -// LzmaDecoder.cs - -using System; - -namespace SevenZip.Compression.LZMA -{ - using RangeCoder; - - public class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Stream - { - class LenDecoder - { - BitDecoder m_Choice = new BitDecoder(); - BitDecoder m_Choice2 = new BitDecoder(); - BitTreeDecoder[] m_LowCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder[] m_MidCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder m_HighCoder = new BitTreeDecoder(Base.kNumHighLenBits); - uint m_NumPosStates = 0; - - public void Create(uint numPosStates) - { - for (uint posState = m_NumPosStates; posState < numPosStates; posState++) - { - m_LowCoder[posState] = new BitTreeDecoder(Base.kNumLowLenBits); - m_MidCoder[posState] = new BitTreeDecoder(Base.kNumMidLenBits); - } - m_NumPosStates = numPosStates; - } - - public void Init() - { - m_Choice.Init(); - for (uint posState = 0; posState < m_NumPosStates; posState++) - { - m_LowCoder[posState].Init(); - m_MidCoder[posState].Init(); - } - m_Choice2.Init(); - m_HighCoder.Init(); - } - - public uint Decode(RangeCoder.Decoder rangeDecoder, uint posState) - { - if (m_Choice.Decode(rangeDecoder) == 0) - return m_LowCoder[posState].Decode(rangeDecoder); - else - { - uint symbol = Base.kNumLowLenSymbols; - if (m_Choice2.Decode(rangeDecoder) == 0) - symbol += m_MidCoder[posState].Decode(rangeDecoder); - else - { - symbol += Base.kNumMidLenSymbols; - symbol += m_HighCoder.Decode(rangeDecoder); - } - return symbol; - } - } - } - - class LiteralDecoder - { - struct Decoder2 - { - BitDecoder[] m_Decoders; - public void Create() { m_Decoders = new BitDecoder[0x300]; } - public void Init() { for (int i = 0; i < 0x300; i++) m_Decoders[i].Init(); } - - public byte DecodeNormal(RangeCoder.Decoder rangeDecoder) - { - uint symbol = 1; - do - symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder); - while (symbol < 0x100); - return (byte)symbol; - } - - public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, byte matchByte) - { - uint symbol = 1; - do - { - uint matchBit = (uint)(matchByte >> 7) & 1; - matchByte <<= 1; - uint bit = m_Decoders[((1 + matchBit) << 8) + symbol].Decode(rangeDecoder); - symbol = (symbol << 1) | bit; - if (matchBit != bit) - { - while (symbol < 0x100) - symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder); - break; - } - } - while (symbol < 0x100); - return (byte)symbol; - } - } - - Decoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - uint m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && - m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = ((uint)1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Decoder2[numStates]; - for (uint i = 0; i < numStates; i++) - m_Coders[i].Create(); - } - - public void Init() - { - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - for (uint i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - uint GetState(uint pos, byte prevByte) - { return ((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits)); } - - public byte DecodeNormal(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte) - { return m_Coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); } - - public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte, byte matchByte) - { return m_Coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); } - }; - - LZ.OutWindow m_OutWindow = new LZ.OutWindow(); - RangeCoder.Decoder m_RangeDecoder = new RangeCoder.Decoder(); - - BitDecoder[] m_IsMatchDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - BitDecoder[] m_IsRepDecoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG0Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG1Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG2Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRep0LongDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - BitTreeDecoder[] m_PosSlotDecoder = new BitTreeDecoder[Base.kNumLenToPosStates]; - BitDecoder[] m_PosDecoders = new BitDecoder[Base.kNumFullDistances - Base.kEndPosModelIndex]; - - BitTreeDecoder m_PosAlignDecoder = new BitTreeDecoder(Base.kNumAlignBits); - - LenDecoder m_LenDecoder = new LenDecoder(); - LenDecoder m_RepLenDecoder = new LenDecoder(); - - LiteralDecoder m_LiteralDecoder = new LiteralDecoder(); - - uint m_DictionarySize; - uint m_DictionarySizeCheck; - - uint m_PosStateMask; - - public Decoder() - { - m_DictionarySize = 0xFFFFFFFF; - for (int i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i] = new BitTreeDecoder(Base.kNumPosSlotBits); - } - - void SetDictionarySize(uint dictionarySize) - { - if (m_DictionarySize != dictionarySize) - { - m_DictionarySize = dictionarySize; - m_DictionarySizeCheck = Math.Max(m_DictionarySize, 1); - uint blockSize = Math.Max(m_DictionarySizeCheck, (1 << 12)); - m_OutWindow.Create(blockSize); - } - } - - void SetLiteralProperties(int lp, int lc) - { - if (lp > 8) - throw new InvalidParamException(); - if (lc > 8) - throw new InvalidParamException(); - m_LiteralDecoder.Create(lp, lc); - } - - void SetPosBitsProperties(int pb) - { - if (pb > Base.kNumPosStatesBitsMax) - throw new InvalidParamException(); - uint numPosStates = (uint)1 << pb; - m_LenDecoder.Create(numPosStates); - m_RepLenDecoder.Create(numPosStates); - m_PosStateMask = numPosStates - 1; - } - - bool _solid = false; - void Init(System.IO.Stream inStream, System.IO.Stream outStream) - { - m_RangeDecoder.Init(inStream); - m_OutWindow.Init(outStream, _solid); - - uint i; - for (i = 0; i < Base.kNumStates; i++) - { - for (uint j = 0; j <= m_PosStateMask; j++) - { - uint index = (i << Base.kNumPosStatesBitsMax) + j; - m_IsMatchDecoders[index].Init(); - m_IsRep0LongDecoders[index].Init(); - } - m_IsRepDecoders[i].Init(); - m_IsRepG0Decoders[i].Init(); - m_IsRepG1Decoders[i].Init(); - m_IsRepG2Decoders[i].Init(); - } - - m_LiteralDecoder.Init(); - for (i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i].Init(); - // m_PosSpecDecoder.Init(); - for (i = 0; i < Base.kNumFullDistances - Base.kEndPosModelIndex; i++) - m_PosDecoders[i].Init(); - - m_LenDecoder.Init(); - m_RepLenDecoder.Init(); - m_PosAlignDecoder.Init(); - } - - public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) - { - Init(inStream, outStream); - - Base.State state = new Base.State(); - state.Init(); - uint rep0 = 0, rep1 = 0, rep2 = 0, rep3 = 0; - - UInt64 nowPos64 = 0; - UInt64 outSize64 = (UInt64)outSize; - if (nowPos64 < outSize64) - { - if (m_IsMatchDecoders[state.Index << Base.kNumPosStatesBitsMax].Decode(m_RangeDecoder) != 0) - throw new DataErrorException(); - state.UpdateChar(); - byte b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, 0, 0); - m_OutWindow.PutByte(b); - nowPos64++; - } - while (nowPos64 < outSize64) - { - // UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64); - // while(nowPos64 < next) - { - uint posState = (uint)nowPos64 & m_PosStateMask; - if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - byte b; - byte prevByte = m_OutWindow.GetByte(0); - if (!state.IsCharState()) - b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder, - (uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0)); - else - b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte); - m_OutWindow.PutByte(b); - state.UpdateChar(); - nowPos64++; - } - else - { - uint len; - if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1) - { - if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - state.UpdateShortRep(); - m_OutWindow.PutByte(m_OutWindow.GetByte(rep0)); - nowPos64++; - continue; - } - } - else - { - UInt32 distance; - if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - distance = rep1; - } - else - { - if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; - state.UpdateRep(); - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); - state.UpdateMatch(); - uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); - if (posSlot >= Base.kStartPosModelIndex) - { - int numDirectBits = (int)((posSlot >> 1) - 1); - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - if (posSlot < Base.kEndPosModelIndex) - rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, - rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); - else - { - rep0 += (m_RangeDecoder.DecodeDirectBits( - numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); - rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); - } - } - else - rep0 = posSlot; - } - if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck) - { - if (rep0 == 0xFFFFFFFF) - break; - throw new DataErrorException(); - } - m_OutWindow.CopyBlock(rep0, len); - nowPos64 += len; - } - } - } - m_OutWindow.Flush(); - m_OutWindow.ReleaseStream(); - m_RangeDecoder.ReleaseStream(); - } - - public void SetDecoderProperties(byte[] properties) - { - if (properties.Length < 5) - throw new InvalidParamException(); - int lc = properties[0] % 9; - int remainder = properties[0] / 9; - int lp = remainder % 5; - int pb = remainder / 5; - if (pb > Base.kNumPosStatesBitsMax) - throw new InvalidParamException(); - UInt32 dictionarySize = 0; - for (int i = 0; i < 4; i++) - dictionarySize += ((UInt32)(properties[1 + i])) << (i * 8); - SetDictionarySize(dictionarySize); - SetLiteralProperties(lp, lc); - SetPosBitsProperties(pb); - } - - public bool Train(System.IO.Stream stream) - { - _solid = true; - return m_OutWindow.Train(stream); - } - - /* - public override bool CanRead { get { return true; }} - public override bool CanWrite { get { return true; }} - public override bool CanSeek { get { return true; }} - public override long Length { get { return 0; }} - public override long Position - { - get { return 0; } - set { } - } - public override void Flush() { } - public override int Read(byte[] buffer, int offset, int count) - { - return 0; - } - public override void Write(byte[] buffer, int offset, int count) - { - } - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - return 0; - } - public override void SetLength(long value) {} - */ - } -} diff --git a/Editor/3rds/7zip/Compress/LZMA/LzmaDecoder.cs.meta b/Editor/3rds/7zip/Compress/LZMA/LzmaDecoder.cs.meta deleted file mode 100644 index 2725167..0000000 --- a/Editor/3rds/7zip/Compress/LZMA/LzmaDecoder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c60a9ce2c6df6774498e337ad69a356b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/LZMA/LzmaEncoder.cs b/Editor/3rds/7zip/Compress/LZMA/LzmaEncoder.cs deleted file mode 100644 index 0237c51..0000000 --- a/Editor/3rds/7zip/Compress/LZMA/LzmaEncoder.cs +++ /dev/null @@ -1,1480 +0,0 @@ -// LzmaEncoder.cs - -using System; - -namespace SevenZip.Compression.LZMA -{ - using RangeCoder; - - public class Encoder : ICoder, ISetCoderProperties, IWriteCoderProperties - { - enum EMatchFinderType - { - BT2, - BT4, - }; - - const UInt32 kIfinityPrice = 0xFFFFFFF; - - static Byte[] g_FastPos = new Byte[1 << 11]; - - static Encoder() - { - const Byte kFastSlots = 22; - int c = 2; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - for (Byte slotFast = 2; slotFast < kFastSlots; slotFast++) - { - UInt32 k = ((UInt32)1 << ((slotFast >> 1) - 1)); - for (UInt32 j = 0; j < k; j++, c++) - g_FastPos[c] = slotFast; - } - } - - static UInt32 GetPosSlot(UInt32 pos) - { - if (pos < (1 << 11)) - return g_FastPos[pos]; - if (pos < (1 << 21)) - return (UInt32)(g_FastPos[pos >> 10] + 20); - return (UInt32)(g_FastPos[pos >> 20] + 40); - } - - static UInt32 GetPosSlot2(UInt32 pos) - { - if (pos < (1 << 17)) - return (UInt32)(g_FastPos[pos >> 6] + 12); - if (pos < (1 << 27)) - return (UInt32)(g_FastPos[pos >> 16] + 32); - return (UInt32)(g_FastPos[pos >> 26] + 52); - } - - Base.State _state = new Base.State(); - Byte _previousByte; - UInt32[] _repDistances = new UInt32[Base.kNumRepDistances]; - - void BaseInit() - { - _state.Init(); - _previousByte = 0; - for (UInt32 i = 0; i < Base.kNumRepDistances; i++) - _repDistances[i] = 0; - } - - const int kDefaultDictionaryLogSize = 22; - const UInt32 kNumFastBytesDefault = 0x20; - - class LiteralEncoder - { - public struct Encoder2 - { - BitEncoder[] m_Encoders; - - public void Create() { m_Encoders = new BitEncoder[0x300]; } - - public void Init() { for (int i = 0; i < 0x300; i++) m_Encoders[i].Init(); } - - public void Encode(RangeCoder.Encoder rangeEncoder, byte symbol) - { - uint context = 1; - for (int i = 7; i >= 0; i--) - { - uint bit = (uint)((symbol >> i) & 1); - m_Encoders[context].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - } - - public void EncodeMatched(RangeCoder.Encoder rangeEncoder, byte matchByte, byte symbol) - { - uint context = 1; - bool same = true; - for (int i = 7; i >= 0; i--) - { - uint bit = (uint)((symbol >> i) & 1); - uint state = context; - if (same) - { - uint matchBit = (uint)((matchByte >> i) & 1); - state += ((1 + matchBit) << 8); - same = (matchBit == bit); - } - m_Encoders[state].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - } - - public uint GetPrice(bool matchMode, byte matchByte, byte symbol) - { - uint price = 0; - uint context = 1; - int i = 7; - if (matchMode) - { - for (; i >= 0; i--) - { - uint matchBit = (uint)(matchByte >> i) & 1; - uint bit = (uint)(symbol >> i) & 1; - price += m_Encoders[((1 + matchBit) << 8) + context].GetPrice(bit); - context = (context << 1) | bit; - if (matchBit != bit) - { - i--; - break; - } - } - } - for (; i >= 0; i--) - { - uint bit = (uint)(symbol >> i) & 1; - price += m_Encoders[context].GetPrice(bit); - context = (context << 1) | bit; - } - return price; - } - } - - Encoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - uint m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = ((uint)1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Encoder2[numStates]; - for (uint i = 0; i < numStates; i++) - m_Coders[i].Create(); - } - - public void Init() - { - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - for (uint i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - public Encoder2 GetSubCoder(UInt32 pos, Byte prevByte) - { return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits))]; } - } - - class LenEncoder - { - RangeCoder.BitEncoder _choice = new RangeCoder.BitEncoder(); - RangeCoder.BitEncoder _choice2 = new RangeCoder.BitEncoder(); - RangeCoder.BitTreeEncoder[] _lowCoder = new RangeCoder.BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - RangeCoder.BitTreeEncoder[] _midCoder = new RangeCoder.BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - RangeCoder.BitTreeEncoder _highCoder = new RangeCoder.BitTreeEncoder(Base.kNumHighLenBits); - - public LenEncoder() - { - for (UInt32 posState = 0; posState < Base.kNumPosStatesEncodingMax; posState++) - { - _lowCoder[posState] = new RangeCoder.BitTreeEncoder(Base.kNumLowLenBits); - _midCoder[posState] = new RangeCoder.BitTreeEncoder(Base.kNumMidLenBits); - } - } - - public void Init(UInt32 numPosStates) - { - _choice.Init(); - _choice2.Init(); - for (UInt32 posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); - } - - public void Encode(RangeCoder.Encoder rangeEncoder, UInt32 symbol, UInt32 posState) - { - if (symbol < Base.kNumLowLenSymbols) - { - _choice.Encode(rangeEncoder, 0); - _lowCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - symbol -= Base.kNumLowLenSymbols; - _choice.Encode(rangeEncoder, 1); - if (symbol < Base.kNumMidLenSymbols) - { - _choice2.Encode(rangeEncoder, 0); - _midCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - _choice2.Encode(rangeEncoder, 1); - _highCoder.Encode(rangeEncoder, symbol - Base.kNumMidLenSymbols); - } - } - } - - public void SetPrices(UInt32 posState, UInt32 numSymbols, UInt32[] prices, UInt32 st) - { - UInt32 a0 = _choice.GetPrice0(); - UInt32 a1 = _choice.GetPrice1(); - UInt32 b0 = a1 + _choice2.GetPrice0(); - UInt32 b1 = a1 + _choice2.GetPrice1(); - UInt32 i = 0; - for (i = 0; i < Base.kNumLowLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = a0 + _lowCoder[posState].GetPrice(i); - } - for (; i < Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = b0 + _midCoder[posState].GetPrice(i - Base.kNumLowLenSymbols); - } - for (; i < numSymbols; i++) - prices[st + i] = b1 + _highCoder.GetPrice(i - Base.kNumLowLenSymbols - Base.kNumMidLenSymbols); - } - }; - - const UInt32 kNumLenSpecSymbols = Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; - - class LenPriceTableEncoder : LenEncoder - { - UInt32[] _prices = new UInt32[Base.kNumLenSymbols << Base.kNumPosStatesBitsEncodingMax]; - UInt32 _tableSize; - UInt32[] _counters = new UInt32[Base.kNumPosStatesEncodingMax]; - - public void SetTableSize(UInt32 tableSize) { _tableSize = tableSize; } - - public UInt32 GetPrice(UInt32 symbol, UInt32 posState) - { - return _prices[posState * Base.kNumLenSymbols + symbol]; - } - - void UpdateTable(UInt32 posState) - { - SetPrices(posState, _tableSize, _prices, posState * Base.kNumLenSymbols); - _counters[posState] = _tableSize; - } - - public void UpdateTables(UInt32 numPosStates) - { - for (UInt32 posState = 0; posState < numPosStates; posState++) - UpdateTable(posState); - } - - public new void Encode(RangeCoder.Encoder rangeEncoder, UInt32 symbol, UInt32 posState) - { - base.Encode(rangeEncoder, symbol, posState); - if (--_counters[posState] == 0) - UpdateTable(posState); - } - } - - const UInt32 kNumOpts = 1 << 12; - class Optimal - { - public Base.State State; - - public bool Prev1IsChar; - public bool Prev2; - - public UInt32 PosPrev2; - public UInt32 BackPrev2; - - public UInt32 Price; - public UInt32 PosPrev; - public UInt32 BackPrev; - - public UInt32 Backs0; - public UInt32 Backs1; - public UInt32 Backs2; - public UInt32 Backs3; - - public void MakeAsChar() { BackPrev = 0xFFFFFFFF; Prev1IsChar = false; } - public void MakeAsShortRep() { BackPrev = 0; ; Prev1IsChar = false; } - public bool IsShortRep() { return (BackPrev == 0); } - }; - Optimal[] _optimum = new Optimal[kNumOpts]; - LZ.IMatchFinder _matchFinder = null; - RangeCoder.Encoder _rangeEncoder = new RangeCoder.Encoder(); - - RangeCoder.BitEncoder[] _isMatch = new RangeCoder.BitEncoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - RangeCoder.BitEncoder[] _isRep = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG0 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG1 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG2 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRep0Long = new RangeCoder.BitEncoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - RangeCoder.BitTreeEncoder[] _posSlotEncoder = new RangeCoder.BitTreeEncoder[Base.kNumLenToPosStates]; - - RangeCoder.BitEncoder[] _posEncoders = new RangeCoder.BitEncoder[Base.kNumFullDistances - Base.kEndPosModelIndex]; - RangeCoder.BitTreeEncoder _posAlignEncoder = new RangeCoder.BitTreeEncoder(Base.kNumAlignBits); - - LenPriceTableEncoder _lenEncoder = new LenPriceTableEncoder(); - LenPriceTableEncoder _repMatchLenEncoder = new LenPriceTableEncoder(); - - LiteralEncoder _literalEncoder = new LiteralEncoder(); - - UInt32[] _matchDistances = new UInt32[Base.kMatchMaxLen * 2 + 2]; - - UInt32 _numFastBytes = kNumFastBytesDefault; - UInt32 _longestMatchLength; - UInt32 _numDistancePairs; - - UInt32 _additionalOffset; - - UInt32 _optimumEndIndex; - UInt32 _optimumCurrentIndex; - - bool _longestMatchWasFound; - - UInt32[] _posSlotPrices = new UInt32[1 << (Base.kNumPosSlotBits + Base.kNumLenToPosStatesBits)]; - UInt32[] _distancesPrices = new UInt32[Base.kNumFullDistances << Base.kNumLenToPosStatesBits]; - UInt32[] _alignPrices = new UInt32[Base.kAlignTableSize]; - UInt32 _alignPriceCount; - - UInt32 _distTableSize = (kDefaultDictionaryLogSize * 2); - - int _posStateBits = 2; - UInt32 _posStateMask = (4 - 1); - int _numLiteralPosStateBits = 0; - int _numLiteralContextBits = 3; - - UInt32 _dictionarySize = (1 << kDefaultDictionaryLogSize); - UInt32 _dictionarySizePrev = 0xFFFFFFFF; - UInt32 _numFastBytesPrev = 0xFFFFFFFF; - - Int64 nowPos64; - bool _finished; - System.IO.Stream _inStream; - - EMatchFinderType _matchFinderType = EMatchFinderType.BT4; - bool _writeEndMark = false; - - bool _needReleaseMFStream; - - void Create() - { - if (_matchFinder == null) - { - LZ.BinTree bt = new LZ.BinTree(); - int numHashBytes = 4; - if (_matchFinderType == EMatchFinderType.BT2) - numHashBytes = 2; - bt.SetType(numHashBytes); - _matchFinder = bt; - } - _literalEncoder.Create(_numLiteralPosStateBits, _numLiteralContextBits); - - if (_dictionarySize == _dictionarySizePrev && _numFastBytesPrev == _numFastBytes) - return; - _matchFinder.Create(_dictionarySize, kNumOpts, _numFastBytes, Base.kMatchMaxLen + 1); - _dictionarySizePrev = _dictionarySize; - _numFastBytesPrev = _numFastBytes; - } - - public Encoder() - { - for (int i = 0; i < kNumOpts; i++) - _optimum[i] = new Optimal(); - for (int i = 0; i < Base.kNumLenToPosStates; i++) - _posSlotEncoder[i] = new RangeCoder.BitTreeEncoder(Base.kNumPosSlotBits); - } - - void SetWriteEndMarkerMode(bool writeEndMarker) - { - _writeEndMark = writeEndMarker; - } - - void Init() - { - BaseInit(); - _rangeEncoder.Init(); - - uint i; - for (i = 0; i < Base.kNumStates; i++) - { - for (uint j = 0; j <= _posStateMask; j++) - { - uint complexState = (i << Base.kNumPosStatesBitsMax) + j; - _isMatch[complexState].Init(); - _isRep0Long[complexState].Init(); - } - _isRep[i].Init(); - _isRepG0[i].Init(); - _isRepG1[i].Init(); - _isRepG2[i].Init(); - } - _literalEncoder.Init(); - for (i = 0; i < Base.kNumLenToPosStates; i++) - _posSlotEncoder[i].Init(); - for (i = 0; i < Base.kNumFullDistances - Base.kEndPosModelIndex; i++) - _posEncoders[i].Init(); - - _lenEncoder.Init((UInt32)1 << _posStateBits); - _repMatchLenEncoder.Init((UInt32)1 << _posStateBits); - - _posAlignEncoder.Init(); - - _longestMatchWasFound = false; - _optimumEndIndex = 0; - _optimumCurrentIndex = 0; - _additionalOffset = 0; - } - - void ReadMatchDistances(out UInt32 lenRes, out UInt32 numDistancePairs) - { - lenRes = 0; - numDistancePairs = _matchFinder.GetMatches(_matchDistances); - if (numDistancePairs > 0) - { - lenRes = _matchDistances[numDistancePairs - 2]; - if (lenRes == _numFastBytes) - lenRes += _matchFinder.GetMatchLen((int)lenRes - 1, _matchDistances[numDistancePairs - 1], - Base.kMatchMaxLen - lenRes); - } - _additionalOffset++; - } - - - void MovePos(UInt32 num) - { - if (num > 0) - { - _matchFinder.Skip(num); - _additionalOffset += num; - } - } - - UInt32 GetRepLen1Price(Base.State state, UInt32 posState) - { - return _isRepG0[state.Index].GetPrice0() + - _isRep0Long[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0(); - } - - UInt32 GetPureRepPrice(UInt32 repIndex, Base.State state, UInt32 posState) - { - UInt32 price; - if (repIndex == 0) - { - price = _isRepG0[state.Index].GetPrice0(); - price += _isRep0Long[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - } - else - { - price = _isRepG0[state.Index].GetPrice1(); - if (repIndex == 1) - price += _isRepG1[state.Index].GetPrice0(); - else - { - price += _isRepG1[state.Index].GetPrice1(); - price += _isRepG2[state.Index].GetPrice(repIndex - 2); - } - } - return price; - } - - UInt32 GetRepPrice(UInt32 repIndex, UInt32 len, Base.State state, UInt32 posState) - { - UInt32 price = _repMatchLenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - return price + GetPureRepPrice(repIndex, state, posState); - } - - UInt32 GetPosLenPrice(UInt32 pos, UInt32 len, UInt32 posState) - { - UInt32 price; - UInt32 lenToPosState = Base.GetLenToPosState(len); - if (pos < Base.kNumFullDistances) - price = _distancesPrices[(lenToPosState * Base.kNumFullDistances) + pos]; - else - price = _posSlotPrices[(lenToPosState << Base.kNumPosSlotBits) + GetPosSlot2(pos)] + - _alignPrices[pos & Base.kAlignMask]; - return price + _lenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - } - - UInt32 Backward(out UInt32 backRes, UInt32 cur) - { - _optimumEndIndex = cur; - UInt32 posMem = _optimum[cur].PosPrev; - UInt32 backMem = _optimum[cur].BackPrev; - do - { - if (_optimum[cur].Prev1IsChar) - { - _optimum[posMem].MakeAsChar(); - _optimum[posMem].PosPrev = posMem - 1; - if (_optimum[cur].Prev2) - { - _optimum[posMem - 1].Prev1IsChar = false; - _optimum[posMem - 1].PosPrev = _optimum[cur].PosPrev2; - _optimum[posMem - 1].BackPrev = _optimum[cur].BackPrev2; - } - } - UInt32 posPrev = posMem; - UInt32 backCur = backMem; - - backMem = _optimum[posPrev].BackPrev; - posMem = _optimum[posPrev].PosPrev; - - _optimum[posPrev].BackPrev = backCur; - _optimum[posPrev].PosPrev = cur; - cur = posPrev; - } - while (cur > 0); - backRes = _optimum[0].BackPrev; - _optimumCurrentIndex = _optimum[0].PosPrev; - return _optimumCurrentIndex; - } - - UInt32[] reps = new UInt32[Base.kNumRepDistances]; - UInt32[] repLens = new UInt32[Base.kNumRepDistances]; - - - UInt32 GetOptimum(UInt32 position, out UInt32 backRes) - { - if (_optimumEndIndex != _optimumCurrentIndex) - { - UInt32 lenRes = _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; - backRes = _optimum[_optimumCurrentIndex].BackPrev; - _optimumCurrentIndex = _optimum[_optimumCurrentIndex].PosPrev; - return lenRes; - } - _optimumCurrentIndex = _optimumEndIndex = 0; - - UInt32 lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - ReadMatchDistances(out lenMain, out numDistancePairs); - } - else - { - lenMain = _longestMatchLength; - numDistancePairs = _numDistancePairs; - _longestMatchWasFound = false; - } - - UInt32 numAvailableBytes = _matchFinder.GetNumAvailableBytes() + 1; - if (numAvailableBytes < 2) - { - backRes = 0xFFFFFFFF; - return 1; - } - if (numAvailableBytes > Base.kMatchMaxLen) - numAvailableBytes = Base.kMatchMaxLen; - - UInt32 repMaxIndex = 0; - UInt32 i; - for (i = 0; i < Base.kNumRepDistances; i++) - { - reps[i] = _repDistances[i]; - repLens[i] = _matchFinder.GetMatchLen(0 - 1, reps[i], Base.kMatchMaxLen); - if (repLens[i] > repLens[repMaxIndex]) - repMaxIndex = i; - } - if (repLens[repMaxIndex] >= _numFastBytes) - { - backRes = repMaxIndex; - UInt32 lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - - if (lenMain >= _numFastBytes) - { - backRes = _matchDistances[numDistancePairs - 1] + Base.kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - - Byte currentByte = _matchFinder.GetIndexByte(0 - 1); - Byte matchByte = _matchFinder.GetIndexByte((Int32)(0 - _repDistances[0] - 1 - 1)); - - if (lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) - { - backRes = (UInt32)0xFFFFFFFF; - return 1; - } - - _optimum[0].State = _state; - - UInt32 posState = (position & _posStateMask); - - _optimum[1].Price = _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(!_state.IsCharState(), matchByte, currentByte); - _optimum[1].MakeAsChar(); - - UInt32 matchPrice = _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - UInt32 repMatchPrice = matchPrice + _isRep[_state.Index].GetPrice1(); - - if (matchByte == currentByte) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(_state, posState); - if (shortRepPrice < _optimum[1].Price) - { - _optimum[1].Price = shortRepPrice; - _optimum[1].MakeAsShortRep(); - } - } - - UInt32 lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); - - if(lenEnd < 2) - { - backRes = _optimum[1].BackPrev; - return 1; - } - - _optimum[1].PosPrev = 0; - - _optimum[0].Backs0 = reps[0]; - _optimum[0].Backs1 = reps[1]; - _optimum[0].Backs2 = reps[2]; - _optimum[0].Backs3 = reps[3]; - - UInt32 len = lenEnd; - do - _optimum[len--].Price = kIfinityPrice; - while (len >= 2); - - for (i = 0; i < Base.kNumRepDistances; i++) - { - UInt32 repLen = repLens[i]; - if (repLen < 2) - continue; - UInt32 price = repMatchPrice + GetPureRepPrice(i, _state, posState); - do - { - UInt32 curAndLenPrice = price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); - Optimal optimum = _optimum[repLen]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = i; - optimum.Prev1IsChar = false; - } - } - while (--repLen >= 2); - } - - UInt32 normalMatchPrice = matchPrice + _isRep[_state.Index].GetPrice0(); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= lenMain) - { - UInt32 offs = 0; - while (len > _matchDistances[offs]) - offs += 2; - for (; ; len++) - { - UInt32 distance = _matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(distance, len, posState); - Optimal optimum = _optimum[len]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = distance + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - if (len == _matchDistances[offs]) - { - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - - UInt32 cur = 0; - - while (true) - { - cur++; - if (cur == lenEnd) - return Backward(out backRes, cur); - UInt32 newLen; - ReadMatchDistances(out newLen, out numDistancePairs); - if (newLen >= _numFastBytes) - { - _numDistancePairs = numDistancePairs; - _longestMatchLength = newLen; - _longestMatchWasFound = true; - return Backward(out backRes, cur); - } - position++; - UInt32 posPrev = _optimum[cur].PosPrev; - Base.State state; - if (_optimum[cur].Prev1IsChar) - { - posPrev--; - if (_optimum[cur].Prev2) - { - state = _optimum[_optimum[cur].PosPrev2].State; - if (_optimum[cur].BackPrev2 < Base.kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - else - state = _optimum[posPrev].State; - state.UpdateChar(); - } - else - state = _optimum[posPrev].State; - if (posPrev == cur - 1) - { - if (_optimum[cur].IsShortRep()) - state.UpdateShortRep(); - else - state.UpdateChar(); - } - else - { - UInt32 pos; - if (_optimum[cur].Prev1IsChar && _optimum[cur].Prev2) - { - posPrev = _optimum[cur].PosPrev2; - pos = _optimum[cur].BackPrev2; - state.UpdateRep(); - } - else - { - pos = _optimum[cur].BackPrev; - if (pos < Base.kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - Optimal opt = _optimum[posPrev]; - if (pos < Base.kNumRepDistances) - { - if (pos == 0) - { - reps[0] = opt.Backs0; - reps[1] = opt.Backs1; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 1) - { - reps[0] = opt.Backs1; - reps[1] = opt.Backs0; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 2) - { - reps[0] = opt.Backs2; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs3; - } - else - { - reps[0] = opt.Backs3; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - else - { - reps[0] = (pos - Base.kNumRepDistances); - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - _optimum[cur].State = state; - _optimum[cur].Backs0 = reps[0]; - _optimum[cur].Backs1 = reps[1]; - _optimum[cur].Backs2 = reps[2]; - _optimum[cur].Backs3 = reps[3]; - UInt32 curPrice = _optimum[cur].Price; - - currentByte = _matchFinder.GetIndexByte(0 - 1); - matchByte = _matchFinder.GetIndexByte((Int32)(0 - reps[0] - 1 - 1)); - - posState = (position & _posStateMask); - - UInt32 curAnd1Price = curPrice + - _isMatch[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). - GetPrice(!state.IsCharState(), matchByte, currentByte); - - Optimal nextOptimum = _optimum[cur + 1]; - - bool nextIsChar = false; - if (curAnd1Price < nextOptimum.Price) - { - nextOptimum.Price = curAnd1Price; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsChar(); - nextIsChar = true; - } - - matchPrice = curPrice + _isMatch[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - repMatchPrice = matchPrice + _isRep[state.Index].GetPrice1(); - - if (matchByte == currentByte && - !(nextOptimum.PosPrev < cur && nextOptimum.BackPrev == 0)) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(state, posState); - if (shortRepPrice <= nextOptimum.Price) - { - nextOptimum.Price = shortRepPrice; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsShortRep(); - nextIsChar = true; - } - } - - UInt32 numAvailableBytesFull = _matchFinder.GetNumAvailableBytes() + 1; - numAvailableBytesFull = Math.Min(kNumOpts - 1 - cur, numAvailableBytesFull); - numAvailableBytes = numAvailableBytesFull; - - if (numAvailableBytes < 2) - continue; - if (numAvailableBytes > _numFastBytes) - numAvailableBytes = _numFastBytes; - if (!nextIsChar && matchByte != currentByte) - { - // try Literal + rep0 - UInt32 t = Math.Min(numAvailableBytesFull - 1, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen(0, reps[0], t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateChar(); - UInt32 posStateNext = (position + 1) & _posStateMask; - UInt32 nextRepMatchPrice = curAnd1Price + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1() + - _isRep[state2.Index].GetPrice1(); - { - UInt32 offset = cur + 1 + lenTest2; - while (lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = false; - } - } - } - } - - UInt32 startLen = 2; // speed optimization - - for (UInt32 repIndex = 0; repIndex < Base.kNumRepDistances; repIndex++) - { - UInt32 lenTest = _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); - if (lenTest < 2) - continue; - UInt32 lenTestTemp = lenTest; - do - { - while (lenEnd < cur + lenTest) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = repIndex; - optimum.Prev1IsChar = false; - } - } - while(--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - // if (_maxMode) - if (lenTest < numAvailableBytesFull) - { - UInt32 t = Math.Min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen((Int32)lenTest, reps[repIndex], t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateRep(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = - repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte((Int32)lenTest - 1 - 1)).GetPrice(true, - _matchFinder.GetIndexByte((Int32)((Int32)lenTest - 1 - (Int32)(reps[repIndex] + 1))), - _matchFinder.GetIndexByte((Int32)lenTest - 1)); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextMatchPrice = curAndLenCharPrice + _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1(); - UInt32 nextRepMatchPrice = nextMatchPrice + _isRep[state2.Index].GetPrice1(); - - // for(; lenTest2 >= 2; lenTest2--) - { - UInt32 offset = lenTest + 1 + lenTest2; - while(lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = repIndex; - } - } - } - } - } - - if (newLen > numAvailableBytes) - { - newLen = numAvailableBytes; - for (numDistancePairs = 0; newLen > _matchDistances[numDistancePairs]; numDistancePairs += 2) ; - _matchDistances[numDistancePairs] = newLen; - numDistancePairs += 2; - } - if (newLen >= startLen) - { - normalMatchPrice = matchPrice + _isRep[state.Index].GetPrice0(); - while (lenEnd < cur + newLen) - _optimum[++lenEnd].Price = kIfinityPrice; - - UInt32 offs = 0; - while (startLen > _matchDistances[offs]) - offs += 2; - - for (UInt32 lenTest = startLen; ; lenTest++) - { - UInt32 curBack = _matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = curBack + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - - if (lenTest == _matchDistances[offs]) - { - if (lenTest < numAvailableBytesFull) - { - UInt32 t = Math.Min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen((Int32)lenTest, curBack, t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateMatch(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = curAndLenPrice + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte((Int32)lenTest - 1 - 1)). - GetPrice(true, - _matchFinder.GetIndexByte((Int32)lenTest - (Int32)(curBack + 1) - 1), - _matchFinder.GetIndexByte((Int32)lenTest - 1)); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextMatchPrice = curAndLenCharPrice + _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1(); - UInt32 nextRepMatchPrice = nextMatchPrice + _isRep[state2.Index].GetPrice1(); - - UInt32 offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = curBack + Base.kNumRepDistances; - } - } - } - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - } - } - - bool ChangePair(UInt32 smallDist, UInt32 bigDist) - { - const int kDif = 7; - return (smallDist < ((UInt32)(1) << (32 - kDif)) && bigDist >= (smallDist << kDif)); - } - - void WriteEndMarker(UInt32 posState) - { - if (!_writeEndMark) - return; - - _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].Encode(_rangeEncoder, 1); - _isRep[_state.Index].Encode(_rangeEncoder, 0); - _state.UpdateMatch(); - UInt32 len = Base.kMatchMinLen; - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - UInt32 posSlot = (1 << Base.kNumPosSlotBits) - 1; - UInt32 lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - int footerBits = 30; - UInt32 posReduced = (((UInt32)1) << footerBits) - 1; - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - } - - void Flush(UInt32 nowPos) - { - ReleaseMFStream(); - WriteEndMarker(nowPos & _posStateMask); - _rangeEncoder.FlushData(); - _rangeEncoder.FlushStream(); - } - - public void CodeOneBlock(out Int64 inSize, out Int64 outSize, out bool finished) - { - inSize = 0; - outSize = 0; - finished = true; - - if (_inStream != null) - { - _matchFinder.SetStream(_inStream); - _matchFinder.Init(); - _needReleaseMFStream = true; - _inStream = null; - if (_trainSize > 0) - _matchFinder.Skip(_trainSize); - } - - if (_finished) - return; - _finished = true; - - - Int64 progressPosValuePrev = nowPos64; - if (nowPos64 == 0) - { - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - UInt32 len, numDistancePairs; // it's not used - ReadMatchDistances(out len, out numDistancePairs); - UInt32 posState = (UInt32)(nowPos64) & _posStateMask; - _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].Encode(_rangeEncoder, 0); - _state.UpdateChar(); - Byte curByte = _matchFinder.GetIndexByte((Int32)(0 - _additionalOffset)); - _literalEncoder.GetSubCoder((UInt32)(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _additionalOffset--; - nowPos64++; - } - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - while (true) - { - UInt32 pos; - UInt32 len = GetOptimum((UInt32)nowPos64, out pos); - - UInt32 posState = ((UInt32)nowPos64) & _posStateMask; - UInt32 complexState = (_state.Index << Base.kNumPosStatesBitsMax) + posState; - if (len == 1 && pos == 0xFFFFFFFF) - { - _isMatch[complexState].Encode(_rangeEncoder, 0); - Byte curByte = _matchFinder.GetIndexByte((Int32)(0 - _additionalOffset)); - LiteralEncoder.Encoder2 subCoder = _literalEncoder.GetSubCoder((UInt32)nowPos64, _previousByte); - if (!_state.IsCharState()) - { - Byte matchByte = _matchFinder.GetIndexByte((Int32)(0 - _repDistances[0] - 1 - _additionalOffset)); - subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); - } - else - subCoder.Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _state.UpdateChar(); - } - else - { - _isMatch[complexState].Encode(_rangeEncoder, 1); - if (pos < Base.kNumRepDistances) - { - _isRep[_state.Index].Encode(_rangeEncoder, 1); - if (pos == 0) - { - _isRepG0[_state.Index].Encode(_rangeEncoder, 0); - if (len == 1) - _isRep0Long[complexState].Encode(_rangeEncoder, 0); - else - _isRep0Long[complexState].Encode(_rangeEncoder, 1); - } - else - { - _isRepG0[_state.Index].Encode(_rangeEncoder, 1); - if (pos == 1) - _isRepG1[_state.Index].Encode(_rangeEncoder, 0); - else - { - _isRepG1[_state.Index].Encode(_rangeEncoder, 1); - _isRepG2[_state.Index].Encode(_rangeEncoder, pos - 2); - } - } - if (len == 1) - _state.UpdateShortRep(); - else - { - _repMatchLenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - _state.UpdateRep(); - } - UInt32 distance = _repDistances[pos]; - if (pos != 0) - { - for (UInt32 i = pos; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - } - } - else - { - _isRep[_state.Index].Encode(_rangeEncoder, 0); - _state.UpdateMatch(); - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - pos -= Base.kNumRepDistances; - UInt32 posSlot = GetPosSlot(pos); - UInt32 lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - - if (posSlot >= Base.kStartPosModelIndex) - { - int footerBits = (int)((posSlot >> 1) - 1); - UInt32 baseVal = ((2 | (posSlot & 1)) << footerBits); - UInt32 posReduced = pos - baseVal; - - if (posSlot < Base.kEndPosModelIndex) - RangeCoder.BitTreeEncoder.ReverseEncode(_posEncoders, - baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced); - else - { - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - _alignPriceCount++; - } - } - UInt32 distance = pos; - for (UInt32 i = Base.kNumRepDistances - 1; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - _matchPriceCount++; - } - _previousByte = _matchFinder.GetIndexByte((Int32)(len - 1 - _additionalOffset)); - } - _additionalOffset -= len; - nowPos64 += len; - if (_additionalOffset == 0) - { - // if (!_fastMode) - if (_matchPriceCount >= (1 << 7)) - FillDistancesPrices(); - if (_alignPriceCount >= Base.kAlignTableSize) - FillAlignPrices(); - inSize = nowPos64; - outSize = _rangeEncoder.GetProcessedSizeAdd(); - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - - if (nowPos64 - progressPosValuePrev >= (1 << 12)) - { - _finished = false; - finished = false; - return; - } - } - } - } - - void ReleaseMFStream() - { - if (_matchFinder != null && _needReleaseMFStream) - { - _matchFinder.ReleaseStream(); - _needReleaseMFStream = false; - } - } - - void SetOutStream(System.IO.Stream outStream) { _rangeEncoder.SetStream(outStream); } - void ReleaseOutStream() { _rangeEncoder.ReleaseStream(); } - - void ReleaseStreams() - { - ReleaseMFStream(); - ReleaseOutStream(); - } - - void SetStreams(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize) - { - _inStream = inStream; - _finished = false; - Create(); - SetOutStream(outStream); - Init(); - - // if (!_fastMode) - { - FillDistancesPrices(); - FillAlignPrices(); - } - - _lenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _lenEncoder.UpdateTables((UInt32)1 << _posStateBits); - _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _repMatchLenEncoder.UpdateTables((UInt32)1 << _posStateBits); - - nowPos64 = 0; - } - - - public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) - { - _needReleaseMFStream = false; - try - { - SetStreams(inStream, outStream, inSize, outSize); - while (true) - { - Int64 processedInSize; - Int64 processedOutSize; - bool finished; - CodeOneBlock(out processedInSize, out processedOutSize, out finished); - if (finished) - return; - if (progress != null) - { - progress.SetProgress(processedInSize, processedOutSize); - } - } - } - finally - { - ReleaseStreams(); - } - } - - const int kPropSize = 5; - Byte[] properties = new Byte[kPropSize]; - - public void WriteCoderProperties(System.IO.Stream outStream) - { - properties[0] = (Byte)((_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits); - for (int i = 0; i < 4; i++) - properties[1 + i] = (Byte)((_dictionarySize >> (8 * i)) & 0xFF); - outStream.Write(properties, 0, kPropSize); - } - - UInt32[] tempPrices = new UInt32[Base.kNumFullDistances]; - UInt32 _matchPriceCount; - - void FillDistancesPrices() - { - for (UInt32 i = Base.kStartPosModelIndex; i < Base.kNumFullDistances; i++) - { - UInt32 posSlot = GetPosSlot(i); - int footerBits = (int)((posSlot >> 1) - 1); - UInt32 baseVal = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = BitTreeEncoder.ReverseGetPrice(_posEncoders, - baseVal - posSlot - 1, footerBits, i - baseVal); - } - - for (UInt32 lenToPosState = 0; lenToPosState < Base.kNumLenToPosStates; lenToPosState++) - { - UInt32 posSlot; - RangeCoder.BitTreeEncoder encoder = _posSlotEncoder[lenToPosState]; - - UInt32 st = (lenToPosState << Base.kNumPosSlotBits); - for (posSlot = 0; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] = encoder.GetPrice(posSlot); - for (posSlot = Base.kEndPosModelIndex; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] += ((((posSlot >> 1) - 1) - Base.kNumAlignBits) << RangeCoder.BitEncoder.kNumBitPriceShiftBits); - - UInt32 st2 = lenToPosState * Base.kNumFullDistances; - UInt32 i; - for (i = 0; i < Base.kStartPosModelIndex; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + i]; - for (; i < Base.kNumFullDistances; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; - } - _matchPriceCount = 0; - } - - void FillAlignPrices() - { - for (UInt32 i = 0; i < Base.kAlignTableSize; i++) - _alignPrices[i] = _posAlignEncoder.ReverseGetPrice(i); - _alignPriceCount = 0; - } - - - static string[] kMatchFinderIDs = - { - "BT2", - "BT4", - }; - - static int FindMatchFinder(string s) - { - for (int m = 0; m < kMatchFinderIDs.Length; m++) - if (s == kMatchFinderIDs[m]) - return m; - return -1; - } - - public void SetCoderProperties(CoderPropID[] propIDs, object[] properties) - { - for (UInt32 i = 0; i < properties.Length; i++) - { - object prop = properties[i]; - switch (propIDs[i]) - { - case CoderPropID.NumFastBytes: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 numFastBytes = (Int32)prop; - if (numFastBytes < 5 || numFastBytes > Base.kMatchMaxLen) - throw new InvalidParamException(); - _numFastBytes = (UInt32)numFastBytes; - break; - } - case CoderPropID.Algorithm: - { - /* - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 maximize = (Int32)prop; - _fastMode = (maximize == 0); - _maxMode = (maximize >= 2); - */ - break; - } - case CoderPropID.MatchFinder: - { - if (!(prop is String)) - throw new InvalidParamException(); - EMatchFinderType matchFinderIndexPrev = _matchFinderType; - int m = FindMatchFinder(((string)prop).ToUpper()); - if (m < 0) - throw new InvalidParamException(); - _matchFinderType = (EMatchFinderType)m; - if (_matchFinder != null && matchFinderIndexPrev != _matchFinderType) - { - _dictionarySizePrev = 0xFFFFFFFF; - _matchFinder = null; - } - break; - } - case CoderPropID.DictionarySize: - { - const int kDicLogSizeMaxCompress = 30; - if (!(prop is Int32)) - throw new InvalidParamException(); ; - Int32 dictionarySize = (Int32)prop; - if (dictionarySize < (UInt32)(1 << Base.kDicLogSizeMin) || - dictionarySize > (UInt32)(1 << kDicLogSizeMaxCompress)) - throw new InvalidParamException(); - _dictionarySize = (UInt32)dictionarySize; - int dicLogSize; - for (dicLogSize = 0; dicLogSize < (UInt32)kDicLogSizeMaxCompress; dicLogSize++) - if (dictionarySize <= ((UInt32)(1) << dicLogSize)) - break; - _distTableSize = (UInt32)dicLogSize * 2; - break; - } - case CoderPropID.PosStateBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumPosStatesBitsEncodingMax) - throw new InvalidParamException(); - _posStateBits = (int)v; - _posStateMask = (((UInt32)1) << (int)_posStateBits) - 1; - break; - } - case CoderPropID.LitPosBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumLitPosStatesBitsEncodingMax) - throw new InvalidParamException(); - _numLiteralPosStateBits = (int)v; - break; - } - case CoderPropID.LitContextBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumLitContextBitsMax) - throw new InvalidParamException(); ; - _numLiteralContextBits = (int)v; - break; - } - case CoderPropID.EndMarker: - { - if (!(prop is Boolean)) - throw new InvalidParamException(); - SetWriteEndMarkerMode((Boolean)prop); - break; - } - default: - throw new InvalidParamException(); - } - } - } - - uint _trainSize = 0; - public void SetTrainSize(uint trainSize) - { - _trainSize = trainSize; - } - - } -} diff --git a/Editor/3rds/7zip/Compress/LZMA/LzmaEncoder.cs.meta b/Editor/3rds/7zip/Compress/LZMA/LzmaEncoder.cs.meta deleted file mode 100644 index fedcb56..0000000 --- a/Editor/3rds/7zip/Compress/LZMA/LzmaEncoder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 37dcefc9d952dc34f9fba085a160a968 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/RangeCoder.meta b/Editor/3rds/7zip/Compress/RangeCoder.meta deleted file mode 100644 index cf24bb3..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 73c80167cede90a4a8fc4938bab053c8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoder.cs b/Editor/3rds/7zip/Compress/RangeCoder/RangeCoder.cs deleted file mode 100644 index 949c6bb..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoder.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - class Encoder - { - public const uint kTopValue = (1 << 24); - - System.IO.Stream Stream; - - public UInt64 Low; - public uint Range; - uint _cacheSize; - byte _cache; - - long StartPosition; - - public void SetStream(System.IO.Stream stream) - { - Stream = stream; - } - - public void ReleaseStream() - { - Stream = null; - } - - public void Init() - { - StartPosition = Stream.Position; - - Low = 0; - Range = 0xFFFFFFFF; - _cacheSize = 1; - _cache = 0; - } - - public void FlushData() - { - for (int i = 0; i < 5; i++) - ShiftLow(); - } - - public void FlushStream() - { - Stream.Flush(); - } - - public void CloseStream() - { - Stream.Close(); - } - - public void Encode(uint start, uint size, uint total) - { - Low += start * (Range /= total); - Range *= size; - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - public void ShiftLow() - { - if ((uint)Low < (uint)0xFF000000 || (uint)(Low >> 32) == 1) - { - byte temp = _cache; - do - { - Stream.WriteByte((byte)(temp + (Low >> 32))); - temp = 0xFF; - } - while (--_cacheSize != 0); - _cache = (byte)(((uint)Low) >> 24); - } - _cacheSize++; - Low = ((uint)Low) << 8; - } - - public void EncodeDirectBits(uint v, int numTotalBits) - { - for (int i = numTotalBits - 1; i >= 0; i--) - { - Range >>= 1; - if (((v >> i) & 1) == 1) - Low += Range; - if (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - } - - public void EncodeBit(uint size0, int numTotalBits, uint symbol) - { - uint newBound = (Range >> numTotalBits) * size0; - if (symbol == 0) - Range = newBound; - else - { - Low += newBound; - Range -= newBound; - } - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - public long GetProcessedSizeAdd() - { - return _cacheSize + - Stream.Position - StartPosition + 4; - // (long)Stream.GetProcessedSize(); - } - } - - class Decoder - { - public const uint kTopValue = (1 << 24); - public uint Range; - public uint Code; - // public Buffer.InBuffer Stream = new Buffer.InBuffer(1 << 16); - public System.IO.Stream Stream; - - public void Init(System.IO.Stream stream) - { - // Stream.Init(stream); - Stream = stream; - - Code = 0; - Range = 0xFFFFFFFF; - for (int i = 0; i < 5; i++) - Code = (Code << 8) | (byte)Stream.ReadByte(); - } - - public void ReleaseStream() - { - // Stream.ReleaseStream(); - Stream = null; - } - - public void CloseStream() - { - Stream.Close(); - } - - public void Normalize() - { - while (Range < kTopValue) - { - Code = (Code << 8) | (byte)Stream.ReadByte(); - Range <<= 8; - } - } - - public void Normalize2() - { - if (Range < kTopValue) - { - Code = (Code << 8) | (byte)Stream.ReadByte(); - Range <<= 8; - } - } - - public uint GetThreshold(uint total) - { - return Code / (Range /= total); - } - - public void Decode(uint start, uint size, uint total) - { - Code -= start * Range; - Range *= size; - Normalize(); - } - - public uint DecodeDirectBits(int numTotalBits) - { - uint range = Range; - uint code = Code; - uint result = 0; - for (int i = numTotalBits; i > 0; i--) - { - range >>= 1; - /* - result <<= 1; - if (code >= range) - { - code -= range; - result |= 1; - } - */ - uint t = (code - range) >> 31; - code -= range & (t - 1); - result = (result << 1) | (1 - t); - - if (range < kTopValue) - { - code = (code << 8) | (byte)Stream.ReadByte(); - range <<= 8; - } - } - Range = range; - Code = code; - return result; - } - - public uint DecodeBit(uint size0, int numTotalBits) - { - uint newBound = (Range >> numTotalBits) * size0; - uint symbol; - if (Code < newBound) - { - symbol = 0; - Range = newBound; - } - else - { - symbol = 1; - Code -= newBound; - Range -= newBound; - } - Normalize(); - return symbol; - } - - // ulong GetProcessedSize() {return Stream.GetProcessedSize(); } - } -} diff --git a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoder.cs.meta b/Editor/3rds/7zip/Compress/RangeCoder/RangeCoder.cs.meta deleted file mode 100644 index fdbc75b..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a855cbfe314340a43b3d71672dcbb058 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBit.cs b/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBit.cs deleted file mode 100644 index 4f0346d..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBit.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - struct BitEncoder - { - public const int kNumBitModelTotalBits = 11; - public const uint kBitModelTotal = (1 << kNumBitModelTotalBits); - const int kNumMoveBits = 5; - const int kNumMoveReducingBits = 2; - public const int kNumBitPriceShiftBits = 6; - - uint Prob; - - public void Init() { Prob = kBitModelTotal >> 1; } - - public void UpdateModel(uint symbol) - { - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - else - Prob -= (Prob) >> kNumMoveBits; - } - - public void Encode(Encoder encoder, uint symbol) - { - // encoder.EncodeBit(Prob, kNumBitModelTotalBits, symbol); - // UpdateModel(symbol); - uint newBound = (encoder.Range >> kNumBitModelTotalBits) * Prob; - if (symbol == 0) - { - encoder.Range = newBound; - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - } - else - { - encoder.Low += newBound; - encoder.Range -= newBound; - Prob -= (Prob) >> kNumMoveBits; - } - if (encoder.Range < Encoder.kTopValue) - { - encoder.Range <<= 8; - encoder.ShiftLow(); - } - } - - private static UInt32[] ProbPrices = new UInt32[kBitModelTotal >> kNumMoveReducingBits]; - - static BitEncoder() - { - const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits); - for (int i = kNumBits - 1; i >= 0; i--) - { - UInt32 start = (UInt32)1 << (kNumBits - i - 1); - UInt32 end = (UInt32)1 << (kNumBits - i); - for (UInt32 j = start; j < end; j++) - ProbPrices[j] = ((UInt32)i << kNumBitPriceShiftBits) + - (((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1)); - } - } - - public uint GetPrice(uint symbol) - { - return ProbPrices[(((Prob - symbol) ^ ((-(int)symbol))) & (kBitModelTotal - 1)) >> kNumMoveReducingBits]; - } - public uint GetPrice0() { return ProbPrices[Prob >> kNumMoveReducingBits]; } - public uint GetPrice1() { return ProbPrices[(kBitModelTotal - Prob) >> kNumMoveReducingBits]; } - } - - struct BitDecoder - { - public const int kNumBitModelTotalBits = 11; - public const uint kBitModelTotal = (1 << kNumBitModelTotalBits); - const int kNumMoveBits = 5; - - uint Prob; - - public void UpdateModel(int numMoveBits, uint symbol) - { - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> numMoveBits; - else - Prob -= (Prob) >> numMoveBits; - } - - public void Init() { Prob = kBitModelTotal >> 1; } - - public uint Decode(RangeCoder.Decoder rangeDecoder) - { - uint newBound = (uint)(rangeDecoder.Range >> kNumBitModelTotalBits) * (uint)Prob; - if (rangeDecoder.Code < newBound) - { - rangeDecoder.Range = newBound; - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - if (rangeDecoder.Range < Decoder.kTopValue) - { - rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte(); - rangeDecoder.Range <<= 8; - } - return 0; - } - else - { - rangeDecoder.Range -= newBound; - rangeDecoder.Code -= newBound; - Prob -= (Prob) >> kNumMoveBits; - if (rangeDecoder.Range < Decoder.kTopValue) - { - rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte(); - rangeDecoder.Range <<= 8; - } - return 1; - } - } - } -} diff --git a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBit.cs.meta b/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBit.cs.meta deleted file mode 100644 index 2a0f148..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBit.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f3fd3305ff6e02448a7b0470cfe65b77 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBitTree.cs b/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBitTree.cs deleted file mode 100644 index 4b4506f..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - struct BitTreeEncoder - { - BitEncoder[] Models; - int NumBitLevels; - - public BitTreeEncoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new BitEncoder[1 << numBitLevels]; - } - - public void Init() - { - for (uint i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - - public void Encode(Encoder rangeEncoder, UInt32 symbol) - { - UInt32 m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; ) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - Models[m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - } - } - - public void ReverseEncode(Encoder rangeEncoder, UInt32 symbol) - { - UInt32 m = 1; - for (UInt32 i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - - public UInt32 GetPrice(UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; ) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - price += Models[m].GetPrice(bit); - m = (m << 1) + bit; - } - return price; - } - - public UInt32 ReverseGetPrice(UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int i = NumBitLevels; i > 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[m].GetPrice(bit); - m = (m << 1) | bit; - } - return price; - } - - public static UInt32 ReverseGetPrice(BitEncoder[] Models, UInt32 startIndex, - int NumBitLevels, UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int i = NumBitLevels; i > 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[startIndex + m].GetPrice(bit); - m = (m << 1) | bit; - } - return price; - } - - public static void ReverseEncode(BitEncoder[] Models, UInt32 startIndex, - Encoder rangeEncoder, int NumBitLevels, UInt32 symbol) - { - UInt32 m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[startIndex + m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - } - - struct BitTreeDecoder - { - BitDecoder[] Models; - int NumBitLevels; - - public BitTreeDecoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new BitDecoder[1 << numBitLevels]; - } - - public void Init() - { - for (uint i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - - public uint Decode(RangeCoder.Decoder rangeDecoder) - { - uint m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; bitIndex--) - m = (m << 1) + Models[m].Decode(rangeDecoder); - return m - ((uint)1 << NumBitLevels); - } - - public uint ReverseDecode(RangeCoder.Decoder rangeDecoder) - { - uint m = 1; - uint symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - uint bit = Models[m].Decode(rangeDecoder); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - - public static uint ReverseDecode(BitDecoder[] Models, UInt32 startIndex, - RangeCoder.Decoder rangeDecoder, int NumBitLevels) - { - uint m = 1; - uint symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - uint bit = Models[startIndex + m].Decode(rangeDecoder); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - } -} diff --git a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBitTree.cs.meta b/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBitTree.cs.meta deleted file mode 100644 index df4ba12..0000000 --- a/Editor/3rds/7zip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ef79f786b772db344a4792a5cba382ff -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/7zip/ICoder.cs b/Editor/3rds/7zip/ICoder.cs deleted file mode 100644 index c8b95c8..0000000 --- a/Editor/3rds/7zip/ICoder.cs +++ /dev/null @@ -1,157 +0,0 @@ -// ICoder.h - -using System; - -namespace SevenZip -{ - /// - /// The exception that is thrown when an error in input stream occurs during decoding. - /// - class DataErrorException : ApplicationException - { - public DataErrorException(): base("Data Error") { } - } - - /// - /// The exception that is thrown when the value of an argument is outside the allowable range. - /// - class InvalidParamException : ApplicationException - { - public InvalidParamException(): base("Invalid Parameter") { } - } - - public interface ICodeProgress - { - /// - /// Callback progress. - /// - /// - /// input size. -1 if unknown. - /// - /// - /// output size. -1 if unknown. - /// - void SetProgress(Int64 inSize, Int64 outSize); - }; - - public interface ICoder - { - /// - /// Codes streams. - /// - /// - /// input Stream. - /// - /// - /// output Stream. - /// - /// - /// input Size. -1 if unknown. - /// - /// - /// output Size. -1 if unknown. - /// - /// - /// callback progress reference. - /// - /// - /// if input stream is not valid - /// - void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress); - }; - - /* - public interface ICoder2 - { - void Code(ISequentialInStream []inStreams, - const UInt64 []inSizes, - ISequentialOutStream []outStreams, - UInt64 []outSizes, - ICodeProgress progress); - }; - */ - - /// - /// Provides the fields that represent properties idenitifiers for compressing. - /// - public enum CoderPropID - { - /// - /// Specifies default property. - /// - DefaultProp = 0, - /// - /// Specifies size of dictionary. - /// - DictionarySize, - /// - /// Specifies size of memory for PPM*. - /// - UsedMemorySize, - /// - /// Specifies order for PPM methods. - /// - Order, - /// - /// Specifies Block Size. - /// - BlockSize, - /// - /// Specifies number of postion state bits for LZMA (0 <= x <= 4). - /// - PosStateBits, - /// - /// Specifies number of literal context bits for LZMA (0 <= x <= 8). - /// - LitContextBits, - /// - /// Specifies number of literal position bits for LZMA (0 <= x <= 4). - /// - LitPosBits, - /// - /// Specifies number of fast bytes for LZ*. - /// - NumFastBytes, - /// - /// Specifies match finder. LZMA: "BT2", "BT4" or "BT4B". - /// - MatchFinder, - /// - /// Specifies the number of match finder cyckes. - /// - MatchFinderCycles, - /// - /// Specifies number of passes. - /// - NumPasses, - /// - /// Specifies number of algorithm. - /// - Algorithm, - /// - /// Specifies the number of threads. - /// - NumThreads, - /// - /// Specifies mode with end marker. - /// - EndMarker - }; - - - public interface ISetCoderProperties - { - void SetCoderProperties(CoderPropID[] propIDs, object[] properties); - }; - - public interface IWriteCoderProperties - { - void WriteCoderProperties(System.IO.Stream outStream); - } - - public interface ISetDecoderProperties - { - void SetDecoderProperties(byte[] properties); - } -} diff --git a/Editor/3rds/7zip/ICoder.cs.meta b/Editor/3rds/7zip/ICoder.cs.meta deleted file mode 100644 index f4ca52a..0000000 --- a/Editor/3rds/7zip/ICoder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9f4fba00efa28594ea18888f574d028a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/ArchiveFlags.cs b/Editor/3rds/UnityFS/ArchiveFlags.cs deleted file mode 100644 index 6f46f5d..0000000 --- a/Editor/3rds/UnityFS/ArchiveFlags.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace UnityFS -{ - [Flags] - public enum ArchiveFlags - { - CompressionTypeMask = 0x3f, - BlocksAndDirectoryInfoCombined = 0x40, - BlocksInfoAtTheEnd = 0x80, - OldWebPluginCompatibility = 0x100, - BlockInfoNeedPaddingAtStart = 0x200 - } -} diff --git a/Editor/3rds/UnityFS/ArchiveFlags.cs.meta b/Editor/3rds/UnityFS/ArchiveFlags.cs.meta deleted file mode 100644 index 95b0a25..0000000 --- a/Editor/3rds/UnityFS/ArchiveFlags.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 099de05eebdffaf4baeed3290dc98aaf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/BinaryReaderExtensions.cs b/Editor/3rds/UnityFS/BinaryReaderExtensions.cs deleted file mode 100644 index 848d820..0000000 --- a/Editor/3rds/UnityFS/BinaryReaderExtensions.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace UnityFS -{ - public static class BinaryReaderExtensions - { - - public static void AlignStream(this BinaryReader reader, int alignment) - { - var pos = reader.BaseStream.Position; - var mod = pos % alignment; - if (mod != 0) - { - reader.BaseStream.Position += alignment - mod; - } - } - - public static string ReadAlignedString(this BinaryReader reader) - { - var length = reader.ReadInt32(); - if (length > 0 && length <= reader.BaseStream.Length - reader.BaseStream.Position) - { - var stringData = reader.ReadBytes(length); - var result = Encoding.UTF8.GetString(stringData); - reader.AlignStream(4); - return result; - } - return ""; - } - - public static string ReadStringToNull(this BinaryReader reader, int maxLength = 32767) - { - var bytes = new List(); - int count = 0; - while (reader.BaseStream.Position != reader.BaseStream.Length && count < maxLength) - { - var b = reader.ReadByte(); - if (b == 0) - { - break; - } - bytes.Add(b); - count++; - } - return Encoding.UTF8.GetString(bytes.ToArray()); - } - } -} diff --git a/Editor/3rds/UnityFS/BinaryReaderExtensions.cs.meta b/Editor/3rds/UnityFS/BinaryReaderExtensions.cs.meta deleted file mode 100644 index 224d27e..0000000 --- a/Editor/3rds/UnityFS/BinaryReaderExtensions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a84e427dd05adde44b4345b3fd49007a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/BinaryWriterExtensions.cs b/Editor/3rds/UnityFS/BinaryWriterExtensions.cs deleted file mode 100644 index 8015515..0000000 --- a/Editor/3rds/UnityFS/BinaryWriterExtensions.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.IO; -using System.Text; - -namespace UnityFS -{ - public static class BinaryWriterExtensions - { - public static void AlignStream(this BinaryWriter writer, int alignment) - { - var pos = writer.BaseStream.Position; - var mod = pos % alignment; - if (mod != 0) - { - writer.Write(new byte[alignment - mod]); - } - } - - public static void WriteAlignedString(this BinaryWriter writer, string str) - { - var bytes = Encoding.UTF8.GetBytes(str); - writer.Write(bytes.Length); - writer.Write(bytes); - writer.AlignStream(4); - } - - public static void WriteNullEndString(this BinaryWriter writer, string str) - { - writer.Write(Encoding.UTF8.GetBytes(str)); - writer.Write((byte)0); - } - } -} diff --git a/Editor/3rds/UnityFS/BinaryWriterExtensions.cs.meta b/Editor/3rds/UnityFS/BinaryWriterExtensions.cs.meta deleted file mode 100644 index 053416c..0000000 --- a/Editor/3rds/UnityFS/BinaryWriterExtensions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 02eda21769c083346a5bd9b7dca49427 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/BundleFileInfo.cs b/Editor/3rds/UnityFS/BundleFileInfo.cs deleted file mode 100644 index d2a9eab..0000000 --- a/Editor/3rds/UnityFS/BundleFileInfo.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace UnityFS -{ - public class BundleSubFile - { - public string file; - public byte[] data; - } - - public class BundleFileInfo - { - public string signature; - public uint version; - public string unityVersion; - public string unityRevision; - public ArchiveFlags flags; - public List files; - } -} diff --git a/Editor/3rds/UnityFS/BundleFileInfo.cs.meta b/Editor/3rds/UnityFS/BundleFileInfo.cs.meta deleted file mode 100644 index b33b9b2..0000000 --- a/Editor/3rds/UnityFS/BundleFileInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1a72550a949e322419b9c5d6e4fe495d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/BundleFileReader.cs b/Editor/3rds/UnityFS/BundleFileReader.cs deleted file mode 100644 index 1804cf4..0000000 --- a/Editor/3rds/UnityFS/BundleFileReader.cs +++ /dev/null @@ -1,212 +0,0 @@ -using LZ4; -using System; -using System.IO; -using System.Linq; -using UnityEngine; - -namespace UnityFS -{ - - public class BundleFileReader - { - - private Header m_Header; - private StorageBlock[] m_BlocksInfo; - private Node[] m_DirectoryInfo; - - private StreamFile[] fileList; - - public BundleFileReader() - { - - } - - public void Load(EndianBinaryReader reader) - { - Debug.Log($"reader. pos:{reader.Position} length:{reader.BaseStream.Length}"); - m_Header = new Header(); - m_Header.signature = reader.ReadStringToNull(); - m_Header.version = reader.ReadUInt32(); - m_Header.unityVersion = reader.ReadStringToNull(); - m_Header.unityRevision = reader.ReadStringToNull(); - System.Diagnostics.Debug.Assert(m_Header.signature == "UnityFS"); - - - m_Header.size = reader.ReadInt64(); - Debug.Log($"header size:{m_Header.size}"); - m_Header.compressedBlocksInfoSize = reader.ReadUInt32(); - m_Header.uncompressedBlocksInfoSize = reader.ReadUInt32(); - m_Header.flags = (ArchiveFlags)reader.ReadUInt32(); - if (m_Header.signature != "UnityFS") - { - reader.ReadByte(); - } - - ReadMetadata(reader); - using (var blocksStream = CreateBlocksStream()) - { - ReadBlocks(reader, blocksStream); - ReadFiles(blocksStream); - } - } - - public BundleFileInfo CreateBundleFileInfo() - { - return new BundleFileInfo - { - signature = m_Header.signature, - version = m_Header.version, - unityVersion = m_Header.unityVersion, - unityRevision = m_Header.unityRevision, - files = fileList.Select(f => new BundleSubFile { file = f.path, data = f.stream.ReadAllBytes() }).ToList(), - }; - } - - private byte[] ReadBlocksInfoAndDirectoryMetadataUnCompressedBytes(EndianBinaryReader reader) - { - byte[] metadataUncompressBytes; - if (m_Header.version >= 7) - { - reader.AlignStream(16); - } - if ((m_Header.flags & ArchiveFlags.BlocksInfoAtTheEnd) != 0) - { - var position = reader.Position; - reader.Position = reader.BaseStream.Length - m_Header.compressedBlocksInfoSize; - metadataUncompressBytes = reader.ReadBytes((int)m_Header.compressedBlocksInfoSize); - reader.Position = position; - } - else //0x40 BlocksAndDirectoryInfoCombined - { - metadataUncompressBytes = reader.ReadBytes((int)m_Header.compressedBlocksInfoSize); - } - return metadataUncompressBytes; - } - - private byte[] DecompressBytes(CompressionType compressionType, byte[] compressedBytes, uint uncompressedSize) - { - switch (compressionType) - { - case CompressionType.None: - { - return compressedBytes; - } - case CompressionType.Lzma: - { - var uncompressedStream = new MemoryStream((int)(uncompressedSize)); - using (var compressedStream = new MemoryStream(compressedBytes)) - { - ComparessHelper.Decompress7Zip(compressedStream, uncompressedStream, m_Header.compressedBlocksInfoSize, m_Header.uncompressedBlocksInfoSize); - } - return uncompressedStream.ReadAllBytes(); - } - case CompressionType.Lz4: - case CompressionType.Lz4HC: - { - var uncompressedBytes = new byte[uncompressedSize]; - var numWrite = LZ4Codec.Decode(compressedBytes, 0, compressedBytes.Length, uncompressedBytes, 0, uncompressedBytes.Length, true); - if (numWrite != uncompressedSize) - { - throw new IOException($"Lz4 decompression error, write {numWrite} bytes but expected {uncompressedSize} bytes"); - } - return uncompressedBytes; - } - default: - throw new IOException($"Unsupported compression type {compressionType}"); - } - } - - private void ReadMetadata(EndianBinaryReader reader) - { - byte[] compressMetadataBytes = ReadBlocksInfoAndDirectoryMetadataUnCompressedBytes(reader); - MemoryStream metadataStream = new MemoryStream(DecompressBytes((CompressionType)(m_Header.flags & ArchiveFlags.CompressionTypeMask), compressMetadataBytes, m_Header.uncompressedBlocksInfoSize)); - using (var blocksInfoReader = new EndianBinaryReader(metadataStream)) - { - var uncompressedDataHash = blocksInfoReader.ReadBytes(16); - var blocksInfoCount = blocksInfoReader.ReadInt32(); - m_BlocksInfo = new StorageBlock[blocksInfoCount]; - for (int i = 0; i < blocksInfoCount; i++) - { - m_BlocksInfo[i] = new StorageBlock - { - uncompressedSize = blocksInfoReader.ReadUInt32(), - compressedSize = blocksInfoReader.ReadUInt32(), - flags = (StorageBlockFlags)blocksInfoReader.ReadUInt16() - }; - } - - var nodesCount = blocksInfoReader.ReadInt32(); - m_DirectoryInfo = new Node[nodesCount]; - for (int i = 0; i < nodesCount; i++) - { - m_DirectoryInfo[i] = new Node - { - offset = blocksInfoReader.ReadInt64(), - size = blocksInfoReader.ReadInt64(), - flags = blocksInfoReader.ReadUInt32(), - path = blocksInfoReader.ReadStringToNull(), - }; - } - } - if (m_Header.flags.HasFlag(ArchiveFlags.BlockInfoNeedPaddingAtStart)) - { - reader.AlignStream(16); - } - } - - - private Stream CreateBlocksStream() - { - Stream blocksStream; - var uncompressedSizeSum = m_BlocksInfo.Sum(x => x.uncompressedSize); - if (uncompressedSizeSum >= int.MaxValue) - { - throw new Exception($"too fig file"); - } - else - { - blocksStream = new MemoryStream((int)uncompressedSizeSum); - } - return blocksStream; - } - - public void ReadFiles(Stream blocksStream) - { - fileList = new StreamFile[m_DirectoryInfo.Length]; - for (int i = 0; i < m_DirectoryInfo.Length; i++) - { - var node = m_DirectoryInfo[i]; - var file = new StreamFile(); - fileList[i] = file; - file.path = node.path; - file.fileName = Path.GetFileName(node.path); - if (node.size >= int.MaxValue) - { - throw new Exception($"exceed max file size"); - /*var memoryMappedFile = MemoryMappedFile.CreateNew(null, entryinfo_size); - file.stream = memoryMappedFile.CreateViewStream();*/ - //var extractPath = path + "_unpacked" + Path.DirectorySeparatorChar; - //Directory.CreateDirectory(extractPath); - //file.stream = new FileStream(extractPath + file.fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); - } - file.stream = new MemoryStream((int)node.size); - blocksStream.Position = node.offset; - blocksStream.CopyTo(file.stream, node.size); - file.stream.Position = 0; - } - } - - private void ReadBlocks(EndianBinaryReader reader, Stream blocksStream) - { - foreach (var blockInfo in m_BlocksInfo) - { - var compressedSize = (int)blockInfo.compressedSize; - byte[] compressedBlockBytes = reader.ReadBytes(compressedSize); - var compressionType = (CompressionType)(blockInfo.flags & StorageBlockFlags.CompressionTypeMask); - byte[] uncompressedBlockBytes = DecompressBytes(compressionType, compressedBlockBytes, blockInfo.uncompressedSize); - blocksStream.Write(uncompressedBlockBytes, 0, uncompressedBlockBytes.Length); - } - blocksStream.Position = 0; - } - } -} diff --git a/Editor/3rds/UnityFS/BundleFileReader.cs.meta b/Editor/3rds/UnityFS/BundleFileReader.cs.meta deleted file mode 100644 index 8b3cfae..0000000 --- a/Editor/3rds/UnityFS/BundleFileReader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f9b938458cc610e4d8a910c4499693cf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/BundleFileWriter.cs b/Editor/3rds/UnityFS/BundleFileWriter.cs deleted file mode 100644 index 7e039cb..0000000 --- a/Editor/3rds/UnityFS/BundleFileWriter.cs +++ /dev/null @@ -1,112 +0,0 @@ -using LZ4; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; - -namespace UnityFS -{ - public class BundleFileWriter - { - private readonly BundleFileInfo _bundle; - - private readonly List _files = new List(); - private readonly List _blocks = new List(); - - private readonly EndianBinaryWriter _blockDirectoryMetadataStream = new EndianBinaryWriter(new MemoryStream()); - private byte[] _blockBytes; - - public BundleFileWriter(BundleFileInfo bundle) - { - _bundle = bundle; - } - - public void Write(EndianBinaryWriter output) - { - InitBlockAndDirectories(); - - output.WriteNullEndString(_bundle.signature); - output.Write(_bundle.version); - output.WriteNullEndString(_bundle.unityVersion); - output.WriteNullEndString(_bundle.unityRevision); - - BuildBlockDirectoryMetadata(); - - - long sizePos = output.Position; - output.Write(0L); - output.Write((uint)_blockDirectoryMetadataStream.Length); - output.Write((uint)_blockDirectoryMetadataStream.Length); - ArchiveFlags flags = ArchiveFlags.BlocksAndDirectoryInfoCombined | (uint)CompressionType.None; - output.Write((uint)flags); - - if (_bundle.version >= 7) - { - output.AlignStream(16); - } - byte[] metadataBytes = _blockDirectoryMetadataStream.BaseStream.ReadAllBytes(); - output.Write(metadataBytes, 0, metadataBytes.Length); - - byte[] dataBytes = _blockBytes; - output.Write(dataBytes, 0, dataBytes.Length); - - output.Position = sizePos; - output.Write(output.Length); - } - - private void InitBlockAndDirectories() - { - var dataStream = new MemoryStream(); - foreach(var file in _bundle.files) - { - byte[] data = file.data; - _files.Add(new Node { path = file.file, flags = 0, offset = dataStream.Length, size = data.LongLength }); - dataStream.Write(data, 0, data.Length); - } - byte[] dataBytes = dataStream.ToArray(); - - var compressedBlockStream = new MemoryStream(dataBytes.Length / 2); - int blockByteSize = 128 * 1024; - long dataSize = dataBytes.Length; - byte[] tempCompressBlock = new byte[blockByteSize * 2]; - for(long i = 0, blockNum = (dataSize + blockByteSize - 1) / blockByteSize; i < blockNum; i++) - { - long curBlockSize = Math.Min(dataSize, blockByteSize); - dataSize -= curBlockSize; - - int compressedSize = LZ4Codec.Encode(dataBytes, (int)(i * blockByteSize), (int)curBlockSize, tempCompressBlock, 0, tempCompressBlock.Length); - compressedBlockStream.Write(tempCompressBlock, 0, compressedSize); - _blocks.Add(new StorageBlock { flags = (StorageBlockFlags)(int)CompressionType.Lz4, compressedSize = (uint)compressedSize, uncompressedSize = (uint)curBlockSize }); - //Debug.Log($"== block[{i}] uncompressedSize:{curBlockSize} compressedSize:{compressedSize} totalblocksize:{compressedBlockStream.Length}"); - } - _blockBytes = compressedBlockStream.ToArray(); - } - - private void BuildBlockDirectoryMetadata() - { - var hash = new byte[16]; - _blockDirectoryMetadataStream.Write(hash, 0, 16); - - _blockDirectoryMetadataStream.Write((uint)_blocks.Count); - foreach(var b in _blocks) - { - _blockDirectoryMetadataStream.Write(b.uncompressedSize); - _blockDirectoryMetadataStream.Write(b.compressedSize); - _blockDirectoryMetadataStream.Write((ushort)b.flags); - } - - _blockDirectoryMetadataStream.Write((uint)_files.Count); - foreach(var f in _files) - { - _blockDirectoryMetadataStream.Write(f.offset); - _blockDirectoryMetadataStream.Write(f.size); - _blockDirectoryMetadataStream.Write(f.flags); - _blockDirectoryMetadataStream.WriteNullEndString(f.path); - } - //Debug.Log($"block and directory metadata size:{_blockDirectoryMetadataStream.Length}"); - } - } -} diff --git a/Editor/3rds/UnityFS/BundleFileWriter.cs.meta b/Editor/3rds/UnityFS/BundleFileWriter.cs.meta deleted file mode 100644 index 98d7466..0000000 --- a/Editor/3rds/UnityFS/BundleFileWriter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d6705163b267de54a868f5e84f6c7024 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/CompressionType.cs b/Editor/3rds/UnityFS/CompressionType.cs deleted file mode 100644 index 032103b..0000000 --- a/Editor/3rds/UnityFS/CompressionType.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace UnityFS -{ - public enum CompressionType - { - None, - Lzma, - Lz4, - Lz4HC, - Lzham - } -} diff --git a/Editor/3rds/UnityFS/CompressionType.cs.meta b/Editor/3rds/UnityFS/CompressionType.cs.meta deleted file mode 100644 index ce8a30f..0000000 --- a/Editor/3rds/UnityFS/CompressionType.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ddcd6644c83d2a94f9668d6e913bd80e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/EndianBinaryReader.cs b/Editor/3rds/UnityFS/EndianBinaryReader.cs deleted file mode 100644 index d6716a8..0000000 --- a/Editor/3rds/UnityFS/EndianBinaryReader.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using System.IO; - -namespace UnityFS -{ - public class EndianBinaryReader : BinaryReader - { - private readonly byte[] buffer; - - public EndianType Endian; - - public EndianBinaryReader(Stream stream, EndianType endian = EndianType.BigEndian) : base(stream) - { - Endian = endian; - buffer = new byte[8]; - } - - public long Position - { - get => BaseStream.Position; - set => BaseStream.Position = value; - } - - private unsafe void ReadBufferBigEndian(byte* dst, byte[] src, int size) - { - System.Diagnostics.Debug.Assert(BitConverter.IsLittleEndian); - for (int i = 0; i < size; i++) - { - dst[i] = src[size - i - 1]; - } - } - - public override short ReadInt16() - { - return (short)ReadUInt16(); - } - - public unsafe override ushort ReadUInt16() - { - if (Endian == EndianType.BigEndian) - { - Read(buffer, 0, 2); - ushort x = 0; - ReadBufferBigEndian((byte*)&x, buffer, 2); - return x; - } - return base.ReadUInt16(); - } - - public override int ReadInt32() - { - return (int)ReadUInt32(); - } - - public unsafe override uint ReadUInt32() - { - if (Endian == EndianType.BigEndian) - { - Read(buffer, 0, 4); - uint x = 0; - ReadBufferBigEndian((byte*)&x, buffer, 4); - return x; - } - return base.ReadUInt32(); - } - - public override long ReadInt64() - { - return (long)ReadUInt64(); - } - - public unsafe override ulong ReadUInt64() - { - if (Endian == EndianType.BigEndian) - { - Read(buffer, 0, 8); - - ulong x = 0; - ReadBufferBigEndian((byte*)&x, buffer, 8); - return x; - } - return base.ReadUInt64(); - } - - public override float ReadSingle() - { - if (Endian == EndianType.BigEndian) - { - Read(buffer, 0, 4); - Array.Reverse(buffer, 0, 4); - return BitConverter.ToSingle(buffer, 0); - } - return base.ReadSingle(); - } - - public override double ReadDouble() - { - if (Endian == EndianType.BigEndian) - { - Read(buffer, 0, 8); - Array.Reverse(buffer); - return BitConverter.ToDouble(buffer, 0); - } - return base.ReadDouble(); - } - } -} diff --git a/Editor/3rds/UnityFS/EndianBinaryReader.cs.meta b/Editor/3rds/UnityFS/EndianBinaryReader.cs.meta deleted file mode 100644 index 53183c0..0000000 --- a/Editor/3rds/UnityFS/EndianBinaryReader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9b02c037f0fa1014da65773804248d8d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/EndianBinaryWriter.cs b/Editor/3rds/UnityFS/EndianBinaryWriter.cs deleted file mode 100644 index 03938a9..0000000 --- a/Editor/3rds/UnityFS/EndianBinaryWriter.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using System.IO; - -namespace UnityFS -{ - public class EndianBinaryWriter : BinaryWriter - { - private readonly byte[] buffer; - - public EndianType Endian; - - public EndianBinaryWriter(Stream stream, EndianType endian = EndianType.BigEndian) : base(stream) - { - Endian = endian; - buffer = new byte[8]; - } - - public long Position - { - get => BaseStream.Position; - set => BaseStream.Position = value; - } - - public long Length => BaseStream.Length; - - public override void Write(short x) - { - Write((ushort)x); - } - - private unsafe void WriteBufferBigEndian(byte[] dst, byte* src, int size) - { - System.Diagnostics.Debug.Assert(BitConverter.IsLittleEndian); - for(int i = 0; i < size; i++) - { - dst[i] = src[size - i - 1]; - } - } - - public unsafe override void Write(ushort x) - { - if (Endian == EndianType.BigEndian) - { - WriteBufferBigEndian(buffer, (byte*)&x, 2); - Write(buffer, 0, 2); - return; - } - base.Write(x); - } - - public override void Write(int x) - { - Write((uint)x); - } - - public unsafe override void Write(uint x) - { - if (Endian == EndianType.BigEndian) - { - WriteBufferBigEndian(buffer, (byte*)&x, 4); - Write(buffer, 0, 4); - return; - } - base.Write(x); - } - - public override void Write(long x) - { - Write((ulong)x); - } - - public unsafe override void Write(ulong x) - { - if (Endian == EndianType.BigEndian) - { - WriteBufferBigEndian(buffer, (byte*)&x, 8); - Write(buffer, 0, 8); - return; - } - base.Write(x); - } - - public override void Write(float x) - { - if (Endian == EndianType.BigEndian) - { - var buf = BitConverter.GetBytes(x); - Array.Reverse(buf, 0, 4); - Write(buf, 0, 4); - return; - } - base.Write(x); - } - - public override void Write(double x) - { - if (Endian == EndianType.BigEndian) - { - var buf = BitConverter.GetBytes(x); - Array.Reverse(buf, 0, 8); - Write(buf, 0, 8); - return; - } - base.Write(x); - } - } -} diff --git a/Editor/3rds/UnityFS/EndianBinaryWriter.cs.meta b/Editor/3rds/UnityFS/EndianBinaryWriter.cs.meta deleted file mode 100644 index cff8503..0000000 --- a/Editor/3rds/UnityFS/EndianBinaryWriter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4107364c7434b2042ad647b28e322513 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/EndianType.cs b/Editor/3rds/UnityFS/EndianType.cs deleted file mode 100644 index 53e740f..0000000 --- a/Editor/3rds/UnityFS/EndianType.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace UnityFS -{ - public enum EndianType - { - LittleEndian, - BigEndian - } -} diff --git a/Editor/3rds/UnityFS/EndianType.cs.meta b/Editor/3rds/UnityFS/EndianType.cs.meta deleted file mode 100644 index c878edc..0000000 --- a/Editor/3rds/UnityFS/EndianType.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2f6cbab4506c18248b410a164be891d2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/GlobalgamedatasPatcher.cs b/Editor/3rds/UnityFS/GlobalgamedatasPatcher.cs deleted file mode 100644 index 193b1f2..0000000 --- a/Editor/3rds/UnityFS/GlobalgamedatasPatcher.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; -using UnityFS; - -namespace HybridCLR.Editor.UnityBinFileReader -{ - public class Dataunity3dPatcher - { - - public void ApplyPatch(string dataunity3dFile, List hotUpdateAssemblies) - { - var reader = new BundleFileReader(); - using (var fs = new EndianBinaryReader(new MemoryStream(File.ReadAllBytes(dataunity3dFile)))) - { - reader.Load(fs); - } - - var info = reader.CreateBundleFileInfo(); - //Debug.Log($"name:{info.signature} version:{info.version} files:{info.files.Count}"); - //foreach (var file in info.files) - //{ - // Debug.Log($"file:{file.file} size:{file.data.Length}"); - //} - - var globalgamemanagersFile = info.files.Find(f => f.file == "globalgamemanagers"); - //Debug.LogFormat("gobalgamemanagers origin size:{0}", globalgamemanagersFile.data.Length); - - var ggdBinFile = new UnityBinFile(); - ggdBinFile.LoadFromStream(new MemoryStream(globalgamemanagersFile.data)); - ggdBinFile.AddScriptingAssemblies(hotUpdateAssemblies); - byte[] patchedGlobalgamedatasBytes = ggdBinFile.CreatePatchedBytes(); - //Debug.LogFormat("gobalgamemanagers post patche size:{0}", patchedGlobalgamedatasBytes.Length); - globalgamemanagersFile.data = patchedGlobalgamedatasBytes; - - var writer = new BundleFileWriter(info); - var output = new MemoryStream(); - writer.Write(new EndianBinaryWriter(output)); - Debug.Log($"patch file:{dataunity3dFile} size:{output.Length}"); - - //string bakFile = dataunity3dFile + ".bak"; - //if (!File.Exists(bakFile)) - //{ - // File.Copy(dataunity3dFile, bakFile); - //} - File.WriteAllBytes(dataunity3dFile, output.ToArray()); - } - } -} diff --git a/Editor/3rds/UnityFS/GlobalgamedatasPatcher.cs.meta b/Editor/3rds/UnityFS/GlobalgamedatasPatcher.cs.meta deleted file mode 100644 index b33d83c..0000000 --- a/Editor/3rds/UnityFS/GlobalgamedatasPatcher.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 653a22d285c79f44a8113c5571b2d26b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/Header.cs b/Editor/3rds/UnityFS/Header.cs deleted file mode 100644 index 2715cce..0000000 --- a/Editor/3rds/UnityFS/Header.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace UnityFS -{ - public class Header - { - public string signature; - public uint version; - public string unityVersion; - public string unityRevision; - public long size; - public uint compressedBlocksInfoSize; - public uint uncompressedBlocksInfoSize; - public ArchiveFlags flags; - } -} diff --git a/Editor/3rds/UnityFS/Header.cs.meta b/Editor/3rds/UnityFS/Header.cs.meta deleted file mode 100644 index e5a516a..0000000 --- a/Editor/3rds/UnityFS/Header.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f121e0520fa65c240884d43fd00b3c2a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/Node.cs b/Editor/3rds/UnityFS/Node.cs deleted file mode 100644 index d9cfd97..0000000 --- a/Editor/3rds/UnityFS/Node.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace UnityFS -{ - public class Node - { - public long offset; - public long size; - public uint flags; - public string path; - } -} diff --git a/Editor/3rds/UnityFS/Node.cs.meta b/Editor/3rds/UnityFS/Node.cs.meta deleted file mode 100644 index 0736374..0000000 --- a/Editor/3rds/UnityFS/Node.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e3eea8a6a32b6ac4ba609b39715e25e2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/SevenZipHelper.cs b/Editor/3rds/UnityFS/SevenZipHelper.cs deleted file mode 100644 index 2d17669..0000000 --- a/Editor/3rds/UnityFS/SevenZipHelper.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.IO; -using SevenZip.Compression.LZMA; - - -namespace UnityFS -{ - public static class ComparessHelper - { - public static MemoryStream Decompress7Zip(MemoryStream inStream) - { - var decoder = new Decoder(); - - inStream.Seek(0, SeekOrigin.Begin); - var newOutStream = new MemoryStream(); - - var properties = new byte[5]; - if (inStream.Read(properties, 0, 5) != 5) - throw new Exception("input .lzma is too short"); - long outSize = 0; - for (var i = 0; i < 8; i++) - { - var v = inStream.ReadByte(); - if (v < 0) - throw new Exception("Can't Read 1"); - outSize |= ((long)(byte)v) << (8 * i); - } - decoder.SetDecoderProperties(properties); - - var compressedSize = inStream.Length - inStream.Position; - decoder.Code(inStream, newOutStream, compressedSize, outSize, null); - - newOutStream.Position = 0; - return newOutStream; - } - - public static void Decompress7Zip(Stream compressedStream, Stream decompressedStream, long compressedSize, long decompressedSize) - { - var basePosition = compressedStream.Position; - var decoder = new Decoder(); - var properties = new byte[5]; - if (compressedStream.Read(properties, 0, 5) != 5) - throw new Exception("input .lzma is too short"); - decoder.SetDecoderProperties(properties); - decoder.Code(compressedStream, decompressedStream, compressedSize - 5, decompressedSize, null); - compressedStream.Position = basePosition + compressedSize; - } - } -} diff --git a/Editor/3rds/UnityFS/SevenZipHelper.cs.meta b/Editor/3rds/UnityFS/SevenZipHelper.cs.meta deleted file mode 100644 index 77f375b..0000000 --- a/Editor/3rds/UnityFS/SevenZipHelper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6606a654e10b3ba48b76b566b903b353 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/StorageBlock.cs b/Editor/3rds/UnityFS/StorageBlock.cs deleted file mode 100644 index 148c4d1..0000000 --- a/Editor/3rds/UnityFS/StorageBlock.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace UnityFS -{ - public class StorageBlock - { - public uint compressedSize; - public uint uncompressedSize; - public StorageBlockFlags flags; - } -} diff --git a/Editor/3rds/UnityFS/StorageBlock.cs.meta b/Editor/3rds/UnityFS/StorageBlock.cs.meta deleted file mode 100644 index e1e8ad9..0000000 --- a/Editor/3rds/UnityFS/StorageBlock.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 40dc58bec5631f14c9c17c8a486496d4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/StorageBlockFlags.cs b/Editor/3rds/UnityFS/StorageBlockFlags.cs deleted file mode 100644 index 619fcac..0000000 --- a/Editor/3rds/UnityFS/StorageBlockFlags.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace UnityFS -{ - [Flags] - public enum StorageBlockFlags - { - CompressionTypeMask = 0x3f, - Streamed = 0x40 - } -} diff --git a/Editor/3rds/UnityFS/StorageBlockFlags.cs.meta b/Editor/3rds/UnityFS/StorageBlockFlags.cs.meta deleted file mode 100644 index d3f199d..0000000 --- a/Editor/3rds/UnityFS/StorageBlockFlags.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 79b9ed6799d3caf459cf2dfae5765a23 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/StreamExtensions.cs b/Editor/3rds/UnityFS/StreamExtensions.cs deleted file mode 100644 index ecffd07..0000000 --- a/Editor/3rds/UnityFS/StreamExtensions.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.IO; - -namespace UnityFS -{ - public static class StreamExtensions - { - private const int BufferSize = 81920; - - public static void CopyTo(this Stream source, Stream destination, long size) - { - var buffer = new byte[BufferSize]; - for (var left = size; left > 0; left -= BufferSize) - { - int toRead = BufferSize < left ? BufferSize : (int)left; - int read = source.Read(buffer, 0, toRead); - destination.Write(buffer, 0, read); - if (read != toRead) - { - return; - } - } - } - - public static byte[] ReadAllBytes(this Stream source) - { - source.Position = 0; - var bytes = new byte[source.Length]; - source.Read(bytes, 0, bytes.Length); - return bytes; - } - } -} diff --git a/Editor/3rds/UnityFS/StreamExtensions.cs.meta b/Editor/3rds/UnityFS/StreamExtensions.cs.meta deleted file mode 100644 index a06440e..0000000 --- a/Editor/3rds/UnityFS/StreamExtensions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2262fbf5672028a48b0c63821d7ff0c0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/StreamFile.cs b/Editor/3rds/UnityFS/StreamFile.cs deleted file mode 100644 index 0fffc06..0000000 --- a/Editor/3rds/UnityFS/StreamFile.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.IO; - -namespace UnityFS -{ - public class StreamFile - { - public string path; - public string fileName; - public Stream stream; - } -} diff --git a/Editor/3rds/UnityFS/StreamFile.cs.meta b/Editor/3rds/UnityFS/StreamFile.cs.meta deleted file mode 100644 index 7c14e8d..0000000 --- a/Editor/3rds/UnityFS/StreamFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fad7df04825c947489aad0d5d0c191a7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/UnityBinFile.cs b/Editor/3rds/UnityFS/UnityBinFile.cs deleted file mode 100644 index ad4ad5f..0000000 --- a/Editor/3rds/UnityFS/UnityBinFile.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using System.Text; -using System.Reflection; -using System; -using System.Linq; - -namespace UnityFS -{ - /// - /// Unity 生成的二进制文件(本代码不支持5.x之前的版本) - /// - public unsafe class UnityBinFile - { - /* - * MonoManager: idx: 6; - * type: metaData.types[objects[6].typeID] - */ - public const int kMonoManagerIdx = 6; - - public FileHeader header; - public MetaData metaData; - public ScriptsData scriptsData; - - private Stream _originStream; - - public void LoadFromStream(Stream source) - { - _originStream = source; - using (var br = new BinaryReader(source, Encoding.UTF8, true)) - { - header.LoadFromStream(br); - // 按理说 metaData 应该新开一个buffer来避免加载时的对齐逻辑问题,但由于 sizeof(Header) = 20,已经对齐到4了,所以可以连续读 - metaData.LoadFromStream(br, header.dataOffset); - scriptsData = metaData.GetScriptData(br); - } - } - - public void Load(string path) - { - LoadFromStream(new MemoryStream(File.ReadAllBytes(path))); - } - - public void AddScriptingAssemblies(List assemblies) - { - foreach (string name in assemblies) - { - if (!scriptsData.dllNames.Contains(name)) - { - scriptsData.dllNames.Add(name); - scriptsData.dllTypes.Add(16); // user dll type - Debug.Log($"[PatchScriptAssembliesJson] add dll:{name} to globalgamemanagers"); - } - } - } - - public byte[] CreatePatchedBytes() - { - var fsR = _originStream; - fsR.Position = 0; - var brR = new BinaryReader(fsR, Encoding.UTF8, true); - - var ms = new MemoryStream((int)(header.fileSize * 1.5f)); - var bw = new BinaryWriter(ms, Encoding.UTF8, true); - - /* - * 开始写入data - * dll名称列表存储于 data 区段,修改其数据并不会影响 MetaData 大小,因此 dataOffset 不会改变 - */ - ms.Position = header.dataOffset; - - Dictionary newObjInfos = new Dictionary(); - foreach (var kv in metaData.objects) - { - long objID = kv.Key; - ObjectInfo objInfo = kv.Value; - - byte[] buff = new byte[objInfo.size]; - fsR.Position = objInfo.realPos; - brR.Read(buff, 0, buff.Length); - - - {// unity 的数据偏移貌似会对齐到 8 - int newPos = (((int)ms.Position + 7) >> 3) << 3; - int gapSize = newPos - (int)ms.Position; - - for (int i = 0; i < gapSize; i++) - bw.Write((byte)0); - - objInfo.dataPos = (uint)ms.Position - header.dataOffset; // 重定位数据偏移 - } - - if (objID != kMonoManagerIdx) - bw.Write(buff, 0, buff.Length); - else - objInfo.size = (uint)scriptsData.SaveToStream(bw); - - newObjInfos.Add(objID, objInfo); - } - - metaData.objects = newObjInfos; - header.fileSize = (uint)ms.Position; - - ms.Position = 0; - header.SaveToStream(bw); - metaData.SaveToStream(bw); - - brR.Close(); - - // 写入新文件 - ms.Position = 0; - return ms.ToArray(); - } - - public void Save(string newPath) - { - byte[] patchedBytes = CreatePatchedBytes(); - File.WriteAllBytes(newPath, patchedBytes); - } - } - -} diff --git a/Editor/3rds/UnityFS/UnityBinFile.cs.meta b/Editor/3rds/UnityFS/UnityBinFile.cs.meta deleted file mode 100644 index 457dbb7..0000000 --- a/Editor/3rds/UnityFS/UnityBinFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7f9902041e9a1ff4c9f2d65d6384530d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/UnityBinFileDefines.cs b/Editor/3rds/UnityFS/UnityBinFileDefines.cs deleted file mode 100644 index 637dc4e..0000000 --- a/Editor/3rds/UnityFS/UnityBinFileDefines.cs +++ /dev/null @@ -1,397 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using static UnityFS.UnityBinUtils; - -namespace UnityFS -{ - public struct FileHeader - { - public const int kSize = 20; - - public uint dataSize => fileSize - metadataSize; - - public uint metadataSize; - public uint fileSize; - public uint version; - public uint dataOffset; - public byte endianess; - - public void LoadFromStream(BinaryReader br) - { - long startPos = br.BaseStream.Position; - metadataSize = br.ReadUInt32(); - fileSize = br.ReadUInt32(); - version = br.ReadUInt32(); - dataOffset = br.ReadUInt32(); - endianess = br.ReadByte(); - br.BaseStream.Position = startPos + kSize; - - SwapEndianess(); - } - - public long SaveToStream(BinaryWriter bw) - { - SwapEndianess(); - - long startPos = bw.BaseStream.Position; - bw.Write(metadataSize); - bw.Write(fileSize); - bw.Write(version); - bw.Write(dataOffset); - bw.Write(endianess); - bw.BaseStream.Position = startPos + kSize; - return kSize; - } - - void SwapEndianess() - { - SwapUInt(ref metadataSize); - SwapUInt(ref fileSize); - SwapUInt(ref version); - SwapUInt(ref dataOffset); - } - } - - public struct MetaData - { - public long dataStartPos; - - public string version; - public uint platform; - public bool enableTypeTree; - public int typeCount; - public ObjectType[] types; - public int objectCount; - public Dictionary objects; - public int scriptTypeCount; - public ScriptType[] scriptTypes; - public int externalsCount; - public ExternalInfo[] externals; - -#if UNITY_2019_2_OR_NEWER - public int refTypeCount; - public ObjectType[] refTypes; -#endif - public string dummyStr; - - public void LoadFromStream(BinaryReader br, uint dataOffset) - { - long startPos = br.BaseStream.Position; - dataStartPos = startPos; - - version = br.ReadRawString(); - platform = br.ReadUInt32(); - enableTypeTree = br.ReadBoolean(); - typeCount = br.ReadInt32(); - types = new ObjectType[typeCount]; - - for (int i = 0; i < typeCount; i++) - { - types[i].LoadFromStream(br); - } - - objectCount = br.ReadInt32(); - objects = new Dictionary(); - for(int i = 0; i < objectCount; i++) - { - long id = br.AlignedReadInt64(); - ObjectInfo objInfo = new ObjectInfo(); - objInfo.LoadFromStream(br); - objInfo.realPos = objInfo.dataPos + dataOffset; - - objects.Add(id, objInfo); - } - - scriptTypeCount = br.ReadInt32(); - scriptTypes = new ScriptType[scriptTypeCount]; - for(int i = 0; i < scriptTypeCount; i++) - { - scriptTypes[i].LoadFromStream(br); - } - - externalsCount = br.ReadInt32(); - externals = new ExternalInfo[externalsCount]; - for(int i = 0; i < externalsCount; i++) - { - externals[i].LoadFromStream(br); - } - -#if UNITY_2019_2_OR_NEWER - refTypeCount = br.ReadInt32(); - refTypes = new ObjectType[refTypeCount]; - for(int i = 0; i < refTypeCount; i++) - { - refTypes[i].LoadFromStream(br); - } -#endif - dummyStr = br.ReadRawString(); - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.WriteRawString(version); - bw.Write(platform); - bw.Write(enableTypeTree); - - bw.Write(typeCount); - foreach(var type in types) - type.SaveToStream(bw); - - bw.Write(objectCount); - foreach (var kv in objects) - { - bw.AlignedWriteInt64(kv.Key); - kv.Value.SaveToStream(bw); - } - - bw.Write(scriptTypeCount); - foreach(var st in scriptTypes) - st.SaveToStream(bw); - - bw.Write(externalsCount); - foreach(var external in externals) - external.SaveToStream(bw); - -#if UNITY_2019_2_OR_NEWER - bw.Write(refTypeCount); - foreach(var refT in refTypes) - refT.SaveToStream(bw); -#endif - - bw.WriteRawString(dummyStr); - - return bw.BaseStream.Position - startPos; - } - - public ScriptsData GetScriptData(BinaryReader br) - { - ObjectInfo objInfo = objects[UnityBinFile.kMonoManagerIdx]; - br.BaseStream.Seek(objInfo.realPos, SeekOrigin.Begin); - - ScriptsData data = new ScriptsData(); - data.LoadFromStream(br); - return data; - } - } - - public struct ObjectType - { - public int typeID; - public bool isStriped; - public short scriptTypeIndex; - - public bool needReadScriptHash; // dont save - - public Hash scriptSigHash; - public Hash typeHash; - - public void LoadFromStream(BinaryReader br) - { - typeID = br.ReadInt32(); - isStriped = br.ReadBoolean(); - scriptTypeIndex = br.ReadInt16(); - - needReadScriptHash = typeID == -1 || typeID == 0x72; - if(needReadScriptHash) - scriptSigHash.LoadFromStream(br); - - typeHash.LoadFromStream(br); - - // GlobalManagers does not has TypeTrees - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.Write(typeID); - bw.Write(isStriped); - bw.Write(scriptTypeIndex); - - if(needReadScriptHash) - scriptSigHash.SaveToStream(bw); - - typeHash.SaveToStream(bw); - return bw.BaseStream.Position - startPos; - } - - public int Size() - { - int ret = 0; - ret += sizeof(int); - ret += sizeof(bool); - ret += sizeof(short); - - if (needReadScriptHash) - ret += Hash.kSize; - - ret += Hash.kSize; - return ret; - } - } - - public struct ObjectInfo - { - public const int kSize = 12; - - public uint dataPos; - public uint size; - public uint typeID; - - public uint realPos; // dataPos + Header.dataOffset; // dont save - - public void LoadFromStream(BinaryReader br) - { - dataPos = br.ReadUInt32(); - size = br.ReadUInt32(); - typeID = br.ReadUInt32(); - } - - public long SaveToStream(BinaryWriter bw) - { - bw.Write(dataPos); - bw.Write(size); - bw.Write(typeID); - return kSize; - } - } - - public struct ScriptType - { - public int localFileIndex; - public long localIdentifierOfBin; - - public void LoadFromStream(BinaryReader br) - { - localFileIndex = br.ReadInt32(); - localIdentifierOfBin = br.AlignedReadInt64(); - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.Write(localFileIndex); - bw.AlignedWriteInt64(localIdentifierOfBin); - return bw.BaseStream.Position - startPos; - } - } - - public struct ExternalInfo - { - public string dummy; - public Hash guid; - public int type; - public string name; - - public void LoadFromStream(BinaryReader br) - { - dummy = br.ReadRawString(); - guid.LoadFromStream(br); - type = br.ReadInt32(); - name = br.ReadRawString(); - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.WriteRawString(dummy); - guid.SaveToStream(bw); - bw.Write(type); - bw.WriteRawString(name); - return bw.BaseStream.Position - startPos; - } - } - - public struct ScriptsData - { - public ScriptID[] scriptIDs; - public List dllNames; - public List dllTypes; // 16 is user type - - public void LoadFromStream(BinaryReader br) - { - { - int count = br.ReadInt32(); - scriptIDs = new ScriptID[count]; - for(int i = 0; i < count; i++) - scriptIDs[i].LoadFromStream(br); - } - { - int count = br.ReadInt32(); - dllNames = new List(count); - for (var i = 0; i < count; i++) - dllNames.Add(br.ReadSizeString()); - } - { - int count = br.ReadInt32(); - dllTypes = new List(count); - for(var i = 0; i < count; i++) - dllTypes.Add(br.ReadInt32()); - } - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.Write(scriptIDs.Length); - for(int i = 0; i < scriptIDs.Length; i++) - scriptIDs[i].SaveToStream(bw); - - bw.Write(dllNames.Count); - for(int i = 0, imax = dllNames.Count; i < imax; i++) - bw.WriteSizeString(dllNames[i]); - - bw.Write(dllTypes.Count); - for(int i = 0, imax = dllTypes.Count; i < imax; i++) - bw.Write(dllTypes[i]); - - return bw.BaseStream.Position - startPos; - } - } - - public struct ScriptID - { - public int fileID; - public long pathID; // localIdentifier - - public void LoadFromStream(BinaryReader br) - { - fileID = br.ReadInt32(); - pathID = br.ReadInt64(); - } - - public long SaveToStream(BinaryWriter bw) - { - bw.Write(fileID); - bw.Write(pathID); - return 4 + 8; - } - } - - public struct Hash - { - public const int kSize = 16; - - public int[] data; - - public void LoadFromStream(BinaryReader br) - { - data = new int[4]; - for(int i = 0; i < data.Length; i++) - { - data[i] = br.ReadInt32(); - } - } - - public long SaveToStream(BinaryWriter bw) - { - for(int i = 0; i < data.Length; i++) - { - bw.Write(data[i]); - } - return kSize; - } - } -} diff --git a/Editor/3rds/UnityFS/UnityBinFileDefines.cs.meta b/Editor/3rds/UnityFS/UnityBinFileDefines.cs.meta deleted file mode 100644 index 89a829a..0000000 --- a/Editor/3rds/UnityFS/UnityBinFileDefines.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 10655ce82e730324db6ae297f77df04b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityFS/UnityBinUtils.cs b/Editor/3rds/UnityFS/UnityBinUtils.cs deleted file mode 100644 index edeefb3..0000000 --- a/Editor/3rds/UnityFS/UnityBinUtils.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using System.Text; - -namespace UnityFS -{ - public static class UnityBinUtils - { - public static void SwapUInt(ref uint val) - { - val = (val >> 24) | ((val >> 8) & 0x0000ff00) | ((val << 8) & 0x00ff0000) | (val << 24); - } - - public static string ReadRawString(this BinaryReader br) - { - long startPos = br.BaseStream.Position; - while (true) - { - byte val = br.ReadByte(); - if(val == 0) - break; - } - int size = (int)(br.BaseStream.Position - startPos); - br.BaseStream.Position = startPos; - - byte[] buffer = br.ReadBytes(size); - string ret = Encoding.UTF8.GetString(buffer, 0, size - 1); - - return ret; - } - - public static void WriteRawString(this BinaryWriter bw, string str) - { - byte[] buffer = Encoding.UTF8.GetBytes(str); - bw.Write(buffer, 0, buffer.Length); - bw.Write((byte)0); - } - - public static string ReadSizeString(this BinaryReader br) - { - int size = br.ReadInt32(); - byte[] buff = br.ReadBytes(size); - br.BaseStream.AlignOffset4(); - - string ret = Encoding.UTF8.GetString(buff); - return ret; - } - - public static void WriteSizeString(this BinaryWriter bw, string str) - { - byte[] buff = Encoding.UTF8.GetBytes(str); - bw.Write(buff.Length); - bw.Write(buff, 0, buff.Length); - bw.BaseStream.AlignOffset4(); - } - - public static void AlignOffset4(this Stream stream) - { - int offset = (((int)stream.Position + 3) >> 2) << 2; - stream.Position = offset; - } - - public static long AlignedReadInt64(this BinaryReader br) - { - br.BaseStream.AlignOffset4(); - return br.ReadInt64(); - } - - public static void AlignedWriteInt64(this BinaryWriter bw, long val) - { - bw.BaseStream.AlignOffset4(); - bw.Write(val); - } - } -} - diff --git a/Editor/3rds/UnityFS/UnityBinUtils.cs.meta b/Editor/3rds/UnityFS/UnityBinUtils.cs.meta deleted file mode 100644 index 4be54e7..0000000 --- a/Editor/3rds/UnityFS/UnityBinUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 12a24c30a3914be418be10cfebfa9649 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/3rds/UnityHook/HybridCLRHooks/CopyStrippedAOTAssembliesHook.cs b/Editor/3rds/UnityHook/HybridCLRHooks/CopyStrippedAOTAssembliesHook.cs index d78848f..f7cd051 100644 --- a/Editor/3rds/UnityHook/HybridCLRHooks/CopyStrippedAOTAssembliesHook.cs +++ b/Editor/3rds/UnityHook/HybridCLRHooks/CopyStrippedAOTAssembliesHook.cs @@ -12,7 +12,7 @@ using System.IO; namespace HybridCLR.MonoHook { -#if UNITY_2021_1_OR_NEWER && UNITY_IOS +#if UNITY_2021 && UNITY_IOS [InitializeOnLoad] public class CopyStrippedAOTAssembliesHook { diff --git a/Editor/3rds/UnityHook/HybridCLRHooks/GetIl2CppFolderHook.cs b/Editor/3rds/UnityHook/HybridCLRHooks/GetIl2CppFolderHook.cs new file mode 100644 index 0000000..c3ce1f5 --- /dev/null +++ b/Editor/3rds/UnityHook/HybridCLRHooks/GetIl2CppFolderHook.cs @@ -0,0 +1,56 @@ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using UnityEditor; +using System.Runtime.CompilerServices; +using MonoHook; +using HybridCLR.Editor.BuildProcessors; +using System.IO; + +namespace HybridCLR.MonoHook +{ +#if UNITY_2022 + [InitializeOnLoad] + public class GetIl2CppFolderHook + { + private static MethodHook _hook; + + static GetIl2CppFolderHook() + { + if (_hook == null) + { + Type type = typeof(UnityEditor.EditorApplication).Assembly.GetType("UnityEditorInternal.IL2CPPUtils"); + MethodInfo miTarget = type.GetMethod("GetIl2CppFolder", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public, null, + new Type[] { typeof(bool).MakeByRefType() }, null); + + MethodInfo miReplacement = new StripAssembliesDel(OverrideMethod).Method; + MethodInfo miProxy = new StripAssembliesDel(PlaceHolderMethod).Method; + + _hook = new MethodHook(miTarget, miReplacement, miProxy); + _hook.Install(); + } + } + + private delegate string StripAssembliesDel(out bool isDevelopmentLocation); + + private static string OverrideMethod(out bool isDevelopmentLocation) + { + //Debug.Log("[GetIl2CppFolderHook] OverrideMethod"); + string result = PlaceHolderMethod(out isDevelopmentLocation); + isDevelopmentLocation = false; + return result; + } + + [MethodImpl(MethodImplOptions.NoOptimization)] + private static string PlaceHolderMethod(out bool isDevelopmentLocation) + { + Debug.LogError("[GetIl2CppFolderHook] PlaceHolderMethod"); + isDevelopmentLocation = false; + return null; + } + } +#endif +} diff --git a/Editor/3rds/7zip/Common/CRC.cs.meta b/Editor/3rds/UnityHook/HybridCLRHooks/GetIl2CppFolderHook.cs.meta similarity index 83% rename from Editor/3rds/7zip/Common/CRC.cs.meta rename to Editor/3rds/UnityHook/HybridCLRHooks/GetIl2CppFolderHook.cs.meta index e366fdf..bcde7d8 100644 --- a/Editor/3rds/7zip/Common/CRC.cs.meta +++ b/Editor/3rds/UnityHook/HybridCLRHooks/GetIl2CppFolderHook.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d0bb58ecc915d9d47b8567adaa2d0ca6 +guid: 96c2bc28db69e1644892219abef3d4b5 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Editor/BuildProcessors/CopyStrippedAOTAssemblies.cs b/Editor/BuildProcessors/CopyStrippedAOTAssemblies.cs index 3cbd5da..c98a338 100644 --- a/Editor/BuildProcessors/CopyStrippedAOTAssemblies.cs +++ b/Editor/BuildProcessors/CopyStrippedAOTAssemblies.cs @@ -30,7 +30,7 @@ namespace HybridCLR.Editor.BuildProcessors #elif UNITY_ANDROID return $"{projectDir}/Library/Bee/artifacts/Android/ManagedStripped"; #elif UNITY_IOS - return $"{projectDir}/Temp/StagingArea/Data/Managed/tempStrip"; + return $"{projectDir}/Library/Bee/artifacts/iOS/ManagedStripped"; #elif UNITY_WEBGL return $"{projectDir}/Library/Bee/artifacts/WebGL/ManagedStripped"; #elif UNITY_EDITOR_OSX @@ -78,7 +78,7 @@ namespace HybridCLR.Editor.BuildProcessors public void OnPostprocessBuild(BuildReport report) { -#if UNITY_2021_1_OR_NEWER && !UNITY_IOS +#if (UNITY_2021 && !UNITY_IOS) || UNITY_2022_1_OR_NEWER BuildTarget target = EditorUserBuildSettings.activeBuildTarget; CopyStripDlls(GetStripAssembliesDir2021(target), target); #endif diff --git a/Editor/BuildProcessors/PatchScriptingAssemblyList.cs b/Editor/BuildProcessors/PatchScriptingAssemblyList.cs index 8a8c958..d30d80d 100644 --- a/Editor/BuildProcessors/PatchScriptingAssemblyList.cs +++ b/Editor/BuildProcessors/PatchScriptingAssemblyList.cs @@ -1,5 +1,4 @@ -using HybridCLR.Editor.UnityBinFileReader; -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -12,7 +11,6 @@ using UnityEditor.Build.Reporting; using UnityEditor.Il2Cpp; using UnityEditor.UnityLinker; using UnityEngine; -using UnityFS; namespace HybridCLR.Editor.BuildProcessors { @@ -65,11 +63,7 @@ namespace HybridCLR.Editor.BuildProcessors path = Path.GetDirectoryName(path); Debug.Log($"[PatchScriptingAssemblyList] get path parent:{path}"); } -#if UNITY_2020_1_OR_NEWER AddHotFixAssembliesToScriptingAssembliesJson(path); -#else - AddHotFixAssembliesToBinFile(path); -#endif } private void AddHotFixAssembliesToScriptingAssembliesJson(string path) @@ -97,57 +91,6 @@ namespace HybridCLR.Editor.BuildProcessors } } - private void AddHotFixAssembliesToBinFile(string path) - { - if (AddHotFixAssembliesToGlobalgamemanagers(path)) - { - return; - } - if (AddHotFixAssembliesTodataunity3d(path)) - { - return; - } - Debug.LogError($"[PatchScriptingAssemblyList] can not find file '{SettingsUtil.GlobalgamemanagersBinFile}' or '{SettingsUtil.Dataunity3dBinFile}' in '{path}'"); - } - - private bool AddHotFixAssembliesToGlobalgamemanagers(string path) - { - string[] binFiles = Directory.GetFiles(path, SettingsUtil.GlobalgamemanagersBinFile, SearchOption.AllDirectories); - - if (binFiles.Length == 0) - { - return false; - } - - foreach (string binPath in binFiles) - { - var binFile = new UnityBinFile(); - binFile.Load(binPath); - binFile.AddScriptingAssemblies(SettingsUtil.HotUpdateAssemblyFilesIncludePreserved); - binFile.Save(binPath); - Debug.Log($"[PatchScriptingAssemblyList] patch {binPath}"); - } - return true; - } - - private bool AddHotFixAssembliesTodataunity3d(string path) - { - string[] binFiles = Directory.GetFiles(path, SettingsUtil.Dataunity3dBinFile, SearchOption.AllDirectories); - - if (binFiles.Length == 0) - { - return false; - } - - foreach (string binPath in binFiles) - { - var patcher = new Dataunity3dPatcher(); - patcher.ApplyPatch(binPath, SettingsUtil.HotUpdateAssemblyFilesIncludePreserved); - Debug.Log($"[PatchScriptingAssemblyList] patch {binPath}"); - } - return true; - } - #if UNITY_WEBGL public void OnBeforeConvertRun(BuildReport report, Il2CppBuildPipelineData data) { diff --git a/Editor/3rds/UnityFS/ScriptingAssembliesJsonPatcher.cs b/Editor/BuildProcessors/ScriptingAssembliesJsonPatcher.cs similarity index 96% rename from Editor/3rds/UnityFS/ScriptingAssembliesJsonPatcher.cs rename to Editor/BuildProcessors/ScriptingAssembliesJsonPatcher.cs index 71b9ab3..a124e34 100644 --- a/Editor/3rds/UnityFS/ScriptingAssembliesJsonPatcher.cs +++ b/Editor/BuildProcessors/ScriptingAssembliesJsonPatcher.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using UnityEngine; -namespace UnityFS +namespace HybridCLR.Editor.BuildProcessors { public class ScriptingAssembliesJsonPatcher { diff --git a/Editor/3rds/UnityFS/ScriptingAssembliesJsonPatcher.cs.meta b/Editor/BuildProcessors/ScriptingAssembliesJsonPatcher.cs.meta similarity index 100% rename from Editor/3rds/UnityFS/ScriptingAssembliesJsonPatcher.cs.meta rename to Editor/BuildProcessors/ScriptingAssembliesJsonPatcher.cs.meta diff --git a/Editor/Commands/InstallerCommand.cs b/Editor/Commands/InstallerCommand.cs deleted file mode 100644 index cd3a771..0000000 --- a/Editor/Commands/InstallerCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using HybridCLR.Editor.Installer; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEditor; -using UnityEngine; - -namespace HybridCLR.Editor.Commands -{ - public static class InstallerCommand - { - - [MenuItem("HybridCLR/Installer...", false, 0)] - private static void Open() - { - InstallerWindow window = EditorWindow.GetWindow("HybridCLR Installer", true); - window.minSize = new Vector2(800f, 500f); - } - } -} diff --git a/Editor/Commands/InstallerCommand.cs.meta b/Editor/Commands/InstallerCommand.cs.meta deleted file mode 100644 index ed9ef57..0000000 --- a/Editor/Commands/InstallerCommand.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b91d62dfcf14d1241b7654d79d5b98a0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/Installer/InstallerController.cs b/Editor/Installer/InstallerController.cs index a1fb8ee..308da8d 100644 --- a/Editor/Installer/InstallerController.cs +++ b/Editor/Installer/InstallerController.cs @@ -1,27 +1,14 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; -using System.Threading.Tasks; using UnityEditor; using UnityEngine; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Diagnostics; - using Debug = UnityEngine.Debug; using System.Text.RegularExpressions; namespace HybridCLR.Editor.Installer { - public enum InstallErrorCode - { - Ok, - } - - - public class InstallerController { @@ -87,9 +74,8 @@ namespace HybridCLR.Editor.Installer private static readonly Regex s_unityVersionPat = new Regex(@"(\d+)\.(\d+)\.(\d+)"); - public const int min2019_4_CompatibleMinorVersion = 40; - public const int min2020_3_CompatibleMinorVersion = 21; public const int min2021_3_CompatibleMinorVersion = 0; + public const int min2022_3_CompatibleMinorVersion = 0; private UnityVersion ParseUnityVersion(string versionStr) { @@ -116,9 +102,8 @@ namespace HybridCLR.Editor.Installer { switch(majorVersion) { - case 2019: return $"2019.4.{min2019_4_CompatibleMinorVersion}"; - case 2020: return $"2020.3.{min2020_3_CompatibleMinorVersion}"; case 2021: return $"2021.3.{min2021_3_CompatibleMinorVersion}"; + case 2022: return $"2022.2.{min2022_3_CompatibleMinorVersion}"; default: throw new Exception($"not support version:{majorVersion}"); } } @@ -128,30 +113,22 @@ namespace HybridCLR.Editor.Installer UnityVersion version = _curVersion; switch (version.major) { - case 2019: - { - if (version.major != 2019 || version.minor1 != 4) - { - return false; - } - return version.minor2 >= min2019_4_CompatibleMinorVersion; - } - case 2020: - { - if (version.major != 2020 || version.minor1 != 3) - { - return false; - } - return version.minor2 >= min2020_3_CompatibleMinorVersion; - } case 2021: { - if (version.major != 2021 || version.minor1 != 3) + if (version.minor1 != 3) { return false; } return version.minor2 >= min2021_3_CompatibleMinorVersion; } + case 2022: + { + if (version.minor1 != 2) + { + return false; + } + return version.minor2 >= min2022_3_CompatibleMinorVersion; + } default: throw new Exception($"not support il2cpp_plus branch:{version.major}"); } } @@ -271,21 +248,6 @@ namespace HybridCLR.Editor.Installer // clean Il2cppBuildCache BashUtil.RemoveDir($"{SettingsUtil.ProjectDir}/Library/Il2cppBuildCache", true); - if (version.major == 2019) - { - string curVersionStr = version.ToString(); - string srcIl2CppDll = GetUnityIl2CppDllModifiedPath(curVersionStr); - if (File.Exists(srcIl2CppDll)) - { - string dstIl2CppDll = GetUnityIl2CppDllInstallLocation(); - File.Copy(srcIl2CppDll, dstIl2CppDll, true); - Debug.Log($"copy {srcIl2CppDll} => {dstIl2CppDll}"); - } - else - { - Debug.LogError($"未找到当前版本:{curVersionStr} 对应的改造过的 Unity.IL2CPP.dll,打包出的程序将会崩溃"); - } - } if (HasInstalledHybridCLR()) { Debug.Log("安装成功"); diff --git a/Editor/Settings/MenuProvider.cs b/Editor/Settings/MenuProvider.cs index ee8a2c4..f30ab64 100644 --- a/Editor/Settings/MenuProvider.cs +++ b/Editor/Settings/MenuProvider.cs @@ -1,21 +1,36 @@ +using HybridCLR.Editor.Installer; using UnityEditor; using UnityEngine; public static class MenuProvider { - [MenuItem("HybridCLR/Settings", priority = 200)] + + [MenuItem("HybridCLR/About HybridCLR", priority = 0)] + public static void OpenAbout() => Application.OpenURL("https://hybridclr.doc.code-philosophy.com/#/README"); + + [MenuItem("HybridCLR/Installer...", priority = 60)] + private static void Open() + { + InstallerWindow window = EditorWindow.GetWindow("HybridCLR Installer", true); + window.minSize = new Vector2(800f, 500f); + } + + [MenuItem("HybridCLR/Settings...", priority = 61)] public static void OpenSettings() => SettingsService.OpenProjectSettings("Project/HybridCLR Settings"); - [MenuItem("HybridCLR/Documents/", menuItem = "HybridCLR/Documents/Quick Start")] - public static void OpenQuickStart() => Application.OpenURL("https://focus-creative-games.github.io/hybridclr/start_up/"); - [MenuItem("HybridCLR/Documents/", menuItem = "HybridCLR/Documents/Benchmark")] - public static void OpenBenchmark() => Application.OpenURL("https://focus-creative-games.github.io/hybridclr/benchmark/"); - [MenuItem("HybridCLR/Documents/", menuItem = "HybridCLR/Documents/FAQ")] - public static void OpenFAQ() => Application.OpenURL("https://focus-creative-games.github.io/hybridclr/faq/"); - [MenuItem("HybridCLR/Documents/", menuItem = "HybridCLR/Documents/Common Errors")] - public static void OpenCommonErrors() => Application.OpenURL("https://focus-creative-games.github.io/hybridclr/common_errors/"); - [MenuItem("HybridCLR/Documents/", menuItem = "HybridCLR/Documents/Bug Report")] - public static void OpenBugReport() => Application.OpenURL("https://focus-creative-games.github.io/hybridclr/bug_reporter/"); - [MenuItem("HybridCLR/Documents/", menuItem = "HybridCLR/Documents/About HybridCLR")] - public static void OpenAbout() => Application.OpenURL("https://focus-creative-games.github.io/hybridclr/about/"); + + [MenuItem("HybridCLR/Documents/Quick Start")] + public static void OpenQuickStart() => Application.OpenURL("https://hybridclr.doc.code-philosophy.com/#/beginner/quickstart"); + + [MenuItem("HybridCLR/Documents/Benchmark")] + public static void OpenBenchmark() => Application.OpenURL("https://hybridclr.doc.code-philosophy.com/#/basic/performance"); + + [MenuItem("HybridCLR/Documents/FAQ")] + public static void OpenFAQ() => Application.OpenURL("https://hybridclr.doc.code-philosophy.com/#/help/faq"); + + [MenuItem("HybridCLR/Documents/Common Errors")] + public static void OpenCommonErrors() => Application.OpenURL("https://hybridclr.doc.code-philosophy.com/#/help/commonerrors"); + + [MenuItem("HybridCLR/Documents/Bug Report")] + public static void OpenBugReport() => Application.OpenURL("https://hybridclr.doc.code-philosophy.com/#/help/issue"); } diff --git a/RELEASELOG.md b/RELEASELOG.md index b72d242..f738794 100644 --- a/RELEASELOG.md +++ b/RELEASELOG.md @@ -1,5 +1,16 @@ # 发布日志 +## 3.0.0 + + +### 改动 + +- 包名更改为com.code-philosophy.hybridclr +- 移除对2019及2020版本支持 +- 移除UnityFS插件 +- 移除Zip插件 +- HybridCLR菜单位置调整 + ## 2.4.2 ### 改动 @@ -44,4 +55,3 @@ - 修复2019版本MonoBleedingEdge的子目录中包含了过长路径的文件导致Installer复制文件出错的问题 - diff --git a/package.json b/package.json index 45b75be..751332c 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,18 @@ { - "name": "com.focus-creative-games.hybridclr_unity", - "version": "2.4.2", + "name": "com.code-philosophy.hybridclr", + "version": "3.0.0", "displayName": "HybridCLR", "description": "HybridCLR is a fully featured, zero-cost, high-performance, low-memory solution for Unity's all-platform native c# hotupdate.", "category": "Runtime", - "documentationUrl": "https://focus-creative-games.github.io/hybridclr-doc", - "changelogUrl": "https://focus-creative-games.github.io/hybridclr-doc/#/other/changelog", - "licensesUrl": "https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE", + "documentationUrl": "https://hybridclr.doc.code-philosophy.com/#/", + "changelogUrl": "https://hybridclr.doc.code-philosophy.com/#/other/changelog", + "licensesUrl": "https://github.com/focus-creative-games/hybridclr_unity/blob/main/LICENSE", "keywords": [ "HybridCLR", "hotupdate", "hotfix", - "code philosophy", - "unity", - "focus-creative-games" + "focus-creative-games", + "code-philosophy" ], "author": { "name": "Code Philosophy",