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",