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

SavePluginStrings() private method

private SavePluginStrings ( System enc, LocalizedStringFormat format, LocalizedStringDict strings, BinaryWriter writer ) : void
enc System
format LocalizedStringFormat
strings LocalizedStringDict
writer System.IO.BinaryWriter
return void
        private void SavePluginStrings(System.Text.Encoding enc, LocalizedStringFormat format, LocalizedStringDict strings, BinaryWriter writer)
        {
            if (enc == null)
            {
                enc = Encoding.Instance;
            }

            var list = new List<Pair<uint, uint>>();

            using (var stream = new MemoryStream())
            using (var memWriter = new BinaryWriter(stream))
            {
                foreach (var kvp in strings)
                {
                    list.Add(new Pair<uint, uint>(kvp.Key, (uint)stream.Position));
                    byte[] data = enc.GetBytes(kvp.Value);
                    switch (format)
                    {
                        case LocalizedStringFormat.Base:
                            memWriter.Write(data, 0, data.Length);
                            memWriter.Write((byte)0);
                            break;

                        case LocalizedStringFormat.DL:
                        case LocalizedStringFormat.IL:
                            memWriter.Write(data.Length + 1);
                            memWriter.Write(data, 0, data.Length);
                            memWriter.Write((byte)0);
                            break;
                    }
                }

                writer.Write(strings.Count);
                writer.Write((int)stream.Length);
                foreach (var item in list)
                {
                    writer.Write(item.Key);
                    writer.Write(item.Value);
                }

                stream.Position = 0;
                var buffer = new byte[65536];
                var left = (int)stream.Length;
                while (left > 0)
                {
                    int read = Math.Min(left, buffer.Length);
                    int nread = stream.Read(buffer, 0, read);
                    if (nread == 0)
                    {
                        break;
                    }

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

Same methods

Plugin::SavePluginStrings ( System enc, LocalizedStringFormat format, LocalizedStringDict strings, string path ) : void