TESVSnip.Domain.Model.Plugin.LoadPluginStrings C# (CSharp) Method

LoadPluginStrings() private method

private LoadPluginStrings ( System encoding, LocalizedStringFormat format, BinaryReader reader ) : LocalizedStringDict
encoding System
format LocalizedStringFormat
reader System.IO.BinaryReader
return LocalizedStringDict
        private LocalizedStringDict LoadPluginStrings(System.Text.Encoding encoding, LocalizedStringFormat format, BinaryReader reader)
        {
            if (encoding == null)
            {
                encoding = Encoding.Instance;
            }

            var dict = new LocalizedStringDict();
            int length = reader.ReadInt32();
            int size = reader.ReadInt32(); // size of data section
            var list = new List<Pair<uint, uint>>();
            for (uint i = 0; i < length; ++i)
            {
                uint id = reader.ReadUInt32();
                uint off = reader.ReadUInt32();
                list.Add(new Pair<uint, uint>(id, off));
            }

            long offset = reader.BaseStream.Position;
            var data = new byte[size];
            using (var stream = new MemoryStream(data, 0, size, true, false))
            {
                var buffer = new byte[65536];
                int left = size;
                while (left > 0)
                {
                    int read = Math.Min(left, buffer.Length);
                    int nread = reader.BaseStream.Read(buffer, 0, read);
                    if (nread == 0)
                    {
                        break;
                    }

                    stream.Write(buffer, 0, nread);
                    left -= nread;
                }
            }

            foreach (var kvp in list)
            {
                var start = (int)kvp.Value;
                int len = 0;
                switch (format)
                {
                    case LocalizedStringFormat.Base:
                        while (data[start + len] != 0)
                        {
                            ++len;
                        }

                        break;

                    case LocalizedStringFormat.DL:
                    case LocalizedStringFormat.IL:
                        len = BitConverter.ToInt32(data, start) - 1;
                        start = start + sizeof(int);
                        if (start + len > data.Length)
                        {
                            len = data.Length - start;
                        }

                        if (len < 0)
                        {
                            len = 0;
                        }

                        break;
                }

                string str = encoding.GetString(data, start, len);
                dict.Add(kvp.Key, str);
            }

            return dict;
        }

Same methods

Plugin::LoadPluginStrings ( System encoding, LocalizedStringFormat format, string path ) : LocalizedStringDict