internal void WriteLanguageString(Memory.Strings.StringMemoryPool pool)
        {
            LanguageOffsetsInitialize();

            if (JustEnglish)
            {
                var ptr = pool.Add(mLanguageStrings[0]);
                for (int x = 0, offset = (int)ptr.u32; x < mLanguageOffsets.Length; x++)
                {
                    mLanguageOffsets[x] = offset;
                }
            }
            else
            {
                for (int x = 0; x < mLanguageStrings.Length; x++)
                {
                    string str = mLanguageStrings[x];

                    var ptr = str != null
                                                ? pool.Add(str)
                                                : Values.PtrHandle.InvalidHandle32;

                    mLanguageOffsets[x] = (int)ptr.u32;
                }
            }
        }
Esempio n. 2
0
        private bool BuildFileNamesTable(IO.EndianStream blockStream)
        {
            Contract.Requires(blockStream.IsWriting);

            using (var ms = new System.IO.MemoryStream(mFiles.Count * 128))
                using (var s = new IO.EndianWriter(ms, blockStream.ByteOrder))
                {
                    var smp = new Memory.Strings.StringMemoryPool(kFileNamesTablePoolConfig);
                    for (int x = FileChunksFirstIndex; x < mFiles.Count; x++)
                    {
                        var file = mFiles[x];

                        file.FileNameOffset = smp.Add(file.FileName).u32;
                    }
                    smp.WriteStrings(s);

                    var filenames_chunk = mFiles[0];
                    PackFileNames(blockStream, ms, filenames_chunk);

                    return(true);
                }
        }
Esempio n. 3
0
        void WriteStringsToBuffer(LocaleStringTableBuffer stringData)
        {
            var pool = new Memory.Strings.StringMemoryPool(kStringPoolConfig);

            foreach (var sref in mStringReferences)
            {
                sref.WriteLanguageString(pool);
            }

            using (var ms = new System.IO.MemoryStream((int)pool.Size))
                using (var ew = new IO.EndianWriter(ms, Shell.EndianFormat.Big))
                {
                    pool.WriteStrings(ew);
                    stringData.Buffer = ms.ToArray();
                }

            if (stringData.Buffer.Length > kInfo.BufferMaxSize)
            {
                throw new InvalidOperationException("Exceeded string table buffer size by (bytes): " +
                                                    (stringData.Buffer.Length - kInfo.BufferMaxSize));
            }
        }