Exemplo n.º 1
0
 private void SaveTables(Stream stream, StringCoder coder)
 {
     using (var wr = new BinaryWriter(stream, Encoding.Unicode, true))
     {
         wr.Write((Int32)Tables.Count());
         foreach (var table in Tables)
         {
             wr.WriteCString(table.Name);
             wr.Write((Int32)table.Entries.Count());
             foreach (Entry entry in table.Entries)
             {
                 wr.WriteCString(entry.Key);
                 wr.Write((Int32)entry.Hash);
                 if (coder == null)
                 {
                     wr.WriteCString(entry.Text);
                 }
                 else
                 {
                     wr.Write((Int32)coder.Encode(entry.Text));
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
        private void SaveNewFormat(Stream stream)
        {
            stream.Write(MAGIC, 0, MAGIC.Length);

            var coder = new StringCoder();

            using (var memory = new MemoryStream())
            {
                SaveTables(memory, coder);
                long offset = MAGIC.Length + 8 + memory.Length;
                for (int i = 0; i < 64; i += 8)
                {
                    stream.WriteByte((byte)(offset >> i));
                }
                memory.WriteTo(stream);
            }

            var strings = coder.GetStringTable();

            using (var wr = new BinaryWriter(stream))
            {
                wr.Write((Int32)strings.Length);
                foreach (var s in strings)
                {
                    wr.WriteCString(s);
                }
            }
        }