OpenRA.FileSystem.PackageEntry.HashFilename C# (CSharp) Метод

HashFilename() публичный статический Метод

public static HashFilename ( string name, PackageHashType type ) : uint
name string
type PackageHashType
Результат uint
        public static uint HashFilename(string name, PackageHashType type)
        {
            switch (type)
            {
                case PackageHashType.Classic:
                    {
                        name = name.ToUpperInvariant();
                        if (name.Length % 4 != 0)
                            name = name.PadRight(name.Length + (4 - name.Length % 4), '\0');

                        using (var ms = new MemoryStream(Encoding.ASCII.GetBytes(name)))
                        {
                            var len = name.Length >> 2;
                            uint result = 0;

                            while (len-- != 0)
                                result = ((result << 1) | (result >> 31)) + ms.ReadUInt32();

                            return result;
                        }
                    }

                case PackageHashType.CRC32:
                    {
                        name = name.ToUpperInvariant();
                        var l = name.Length;
                        var a = l >> 2;
                        if ((l & 3) != 0)
                        {
                            name += (char)(l - (a << 2));
                            var i = 3 - (l & 3);
                            while (i-- != 0)
                                name += name[a << 2];
                        }

                        return CRC32.Calculate(Encoding.ASCII.GetBytes(name));
                    }

                default: throw new NotImplementedException("Unknown hash type `{0}`".F(type));
            }
        }

Usage Example

Пример #1
0
        static Stream GetFromCache(PackageHashType type, string filename)
        {
            var index  = type == PackageHashType.CRC32 ? crcHashIndex : classicHashIndex;
            var folder = index[PackageEntry.HashFilename(filename, type)]
                         .Where(x => x.Exists(filename))
                         .MinByOrDefault(x => x.Priority);

            if (folder != null)
            {
                return(folder.GetContent(filename));
            }

            return(null);
        }
All Usage Examples Of OpenRA.FileSystem.PackageEntry::HashFilename