示例#1
0
        private static Task <ConcurrentBigMap <AbsolutePath, AbsolutePath> > LoadAsync(Stream stream, string fileName, PathTable pathTable)
        {
            return(ExceptionUtilities.HandleRecoverableIOException(
                       async() =>
            {
                s_fileEnvelope.ReadHeader(stream);
                using (BuildXLReader reader = new BuildXLReader(debug: false, stream: stream, leaveOpen: true))
                {
                    var stringTable = await StringTable.DeserializeAsync(reader);
                    var loadedPathTable = await PathTable.DeserializeAsync(reader, Task.FromResult(stringTable));

                    var importedPathIndex = pathTable.Import(loadedPathTable);

                    var pathMapping = new ConcurrentBigMap <AbsolutePath, AbsolutePath>();

                    var count = reader.ReadInt32();
                    for (int i = 0; i < count; i++)
                    {
                        var loadedKey = reader.ReadAbsolutePath();
                        var loadedValue = reader.ReadAbsolutePath();

                        var key = importedPathIndex[loadedKey.Value.Index];
                        var value = importedPathIndex[loadedValue.Value.Index];

                        pathMapping[key] = value;
                    }

                    return pathMapping;
                }
            },
                       ex => { throw new BuildXLException(I($"Failed to read '{fileName}'"), ex); }));
        }
示例#2
0
        /// <summary>
        /// Reads a StringTable
        /// </summary>
        public async Task <StringTable> ReadStringTableAsync()
        {
            Start <StringTable>();
            var value = await StringTable.DeserializeAsync(this);

            End();
            return(value);
        }