293 lines
4.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace UniversalEditor.Compression.Common
{
public static class DecodeHelper
{
private static readonly uint[] crcTable = new uint[]
{
0u,
1996959894u,
3993919788u,
2567524794u,
124634137u,
1886057615u,
3915621685u,
2657392035u,
249268274u,
2044508324u,
3772115230u,
2547177864u,
162941995u,
2125561021u,
3887607047u,
2428444049u,
498536548u,
1789927666u,
4089016648u,
2227061214u,
450548861u,
1843258603u,
4107580753u,
2211677639u,
325883990u,
1684777152u,
4251122042u,
2321926636u,
335633487u,
1661365465u,
4195302755u,
2366115317u,
997073096u,
1281953886u,
3579855332u,
2724688242u,
1006888145u,
1258607687u,
3524101629u,
2768942443u,
901097722u,
1119000684u,
3686517206u,
2898065728u,
853044451u,
1172266101u,
3705015759u,
2882616665u,
651767980u,
1373503546u,
3369554304u,
3218104598u,
565507253u,
1454621731u,
3485111705u,
3099436303u,
671266974u,
1594198024u,
3322730930u,
2970347812u,
795835527u,
1483230225u,
3244367275u,
3060149565u,
1994146192u,
31158534u,
2563907772u,
4023717930u,
1907459465u,
112637215u,
2680153253u,
3904427059u,
2013776290u,
251722036u,
2517215374u,
3775830040u,
2137656763u,
141376813u,
2439277719u,
3865271297u,
1802195444u,
476864866u,
2238001368u,
4066508878u,
1812370925u,
453092731u,
2181625025u,
4111451223u,
1706088902u,
314042704u,
2344532202u,
4240017532u,
1658658271u,
366619977u,
2362670323u,
4224994405u,
1303535960u,
984961486u,
2747007092u,
3569037538u,
1256170817u,
1037604311u,
2765210733u,
3554079995u,
1131014506u,
879679996u,
2909243462u,
3663771856u,
1141124467u,
855842277u,
2852801631u,
3708648649u,
1342533948u,
654459306u,
3188396048u,
3373015174u,
1466479909u,
544179635u,
3110523913u,
3462522015u,
1591671054u,
702138776u,
2966460450u,
3352799412u,
1504918807u,
783551873u,
3082640443u,
3233442989u,
3988292384u,
2596254646u,
62317068u,
1957810842u,
3939845945u,
2647816111u,
81470997u,
1943803523u,
3814918930u,
2489596804u,
225274430u,
2053790376u,
3826175755u,
2466906013u,
167816743u,
2097651377u,
4027552580u,
2265490386u,
503444072u,
1762050814u,
4150417245u,
2154129355u,
426522225u,
1852507879u,
4275313526u,
2312317920u,
282753626u,
1742555852u,
4189708143u,
2394877945u,
397917763u,
1622183637u,
3604390888u,
2714866558u,
953729732u,
1340076626u,
3518719985u,
2797360999u,
1068828381u,
1219638859u,
3624741850u,
2936675148u,
906185462u,
1090812512u,
3747672003u,
2825379669u,
829329135u,
1181335161u,
3412177804u,
3160834842u,
628085408u,
1382605366u,
3423369109u,
3138078467u,
570562233u,
1426400815u,
3317316542u,
2998733608u,
733239954u,
1555261956u,
3268935591u,
3050360625u,
752459403u,
1541320221u,
2607071920u,
3965973030u,
1969922972u,
40735498u,
2617837225u,
3943577151u,
1913087877u,
83908371u,
2512341634u,
3803740692u,
2075208622u,
213261112u,
2463272603u,
3855990285u,
2094854071u,
198958881u,
2262029012u,
4057260610u,
1759359992u,
534414190u,
2176718541u,
4139329115u,
1873836001u,
414664567u,
2282248934u,
4279200368u,
1711684554u,
285281116u,
2405801727u,
4167216745u,
1634467795u,
376229701u,
2685067896u,
3608007406u,
1308918612u,
956543938u,
2808555105u,
3495958263u,
1231636301u,
1047427035u,
2932959818u,
3654703836u,
1088359270u,
936918000u,
2847714899u,
3736837829u,
1202900863u,
817233897u,
3183342108u,
3401237130u,
1404277552u,
615818150u,
3134207493u,
3453421203u,
1423857449u,
601450431u,
3009837614u,
3294710456u,
1567103746u,
711928724u,
3020668471u,
3272380065u,
1510334235u,
755167117u
};
public static uint BitReverse(uint code, int length)
{
uint num = 0u;
do
{
num |= (code & 1u);
num <<= 1;
code >>= 1;
}
while (--length > 0);
return num >> 1;
}
public static uint UpdateCrc32(uint crc32, byte[] buffer, int offset, int length)
{
crc32 ^= 4294967295u;
while (--length >= 0)
{
offset++;
crc32 = (DecodeHelper.crcTable[(int)((IntPtr)((long)((ulong)((crc32 ^ (uint)buffer[offset]) & 255u))))] ^ crc32 >> 8);
}
crc32 ^= 4294967295u;
return crc32;
}
}
}