/// <summary> /// Create a new RemapReader /// </summary> public RemapReader(PipGraphFragmentContext fragmentContext, Stream stream, PipExecutionContext context, bool debug = false, bool leaveOpen = true) : base(debug, context.StringTable, stream, leaveOpen) { Context = fragmentContext; m_executionContext = context; m_inliningReader = new InnerInliningReader(stream, context.PathTable, debug, leaveOpen); m_symbolTable = context.SymbolTable; }
public void TestReadWrite() { using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) { var pt1 = new PathTable(); using (var writer1 = new InliningWriter(stream1, pt1, leaveOpen: true)) { writer1.Write(AbsolutePath.Create(pt1, A("C", "f", "g", "h1"))); writer1.Write(AbsolutePath.Create(pt1, A("C", "f", "g", "h"))); writer1.Write(PathAtom.Create(pt1.StringTable, "a1")); writer1.Write(PathAtom.Create(pt1.StringTable, "a")); writer1.Write(StringId.Create(pt1.StringTable, "s1")); writer1.Write(StringId.Create(pt1.StringTable, "s")); } var pt2 = new PathTable(); using (var writer2 = new InliningWriter(stream2, pt2, leaveOpen: true)) { writer2.Write(AbsolutePath.Create(pt2, A("C", "f", "g", "h2"))); writer2.Write(AbsolutePath.Create(pt2, A("C", "f", "g", "h"))); writer2.Write(PathAtom.Create(pt2.StringTable, "a2")); writer2.Write(PathAtom.Create(pt2.StringTable, "a")); writer2.Write(StringId.Create(pt2.StringTable, "s2")); writer2.Write(StringId.Create(pt2.StringTable, "s")); } stream1.Seek(0, SeekOrigin.Begin); stream2.Seek(0, SeekOrigin.Begin); var pt = new PathTable(); using (var reader1 = new InliningReader(stream1, pt, leaveOpen: true)) { XAssert.AreEqual(A("C", "f", "g", "h1").ToCanonicalizedPath(), reader1.ReadAbsolutePath().ToString(pt).ToCanonicalizedPath()); XAssert.AreEqual(A("C", "f", "g", "h").ToCanonicalizedPath(), reader1.ReadAbsolutePath().ToString(pt).ToCanonicalizedPath()); XAssert.AreEqual("a1".ToCanonicalizedPath(), reader1.ReadPathAtom().ToString(pt.StringTable).ToCanonicalizedPath()); XAssert.AreEqual("a".ToCanonicalizedPath(), reader1.ReadPathAtom().ToString(pt.StringTable).ToCanonicalizedPath()); XAssert.AreEqual("s1", reader1.ReadStringId().ToString(pt.StringTable)); XAssert.AreEqual("s", reader1.ReadStringId().ToString(pt.StringTable)); } using (var reader2 = new InliningReader(stream2, pt, leaveOpen: true)) { XAssert.AreEqual(A("C", "f", "g", "h2").ToCanonicalizedPath(), reader2.ReadAbsolutePath().ToString(pt).ToCanonicalizedPath()); XAssert.AreEqual(A("C", "f", "g", "h").ToCanonicalizedPath(), reader2.ReadAbsolutePath().ToString(pt).ToCanonicalizedPath()); XAssert.AreEqual("a2".ToCanonicalizedPath(), reader2.ReadPathAtom().ToString(pt.StringTable).ToCanonicalizedPath()); XAssert.AreEqual("a".ToCanonicalizedPath(), reader2.ReadPathAtom().ToString(pt.StringTable).ToCanonicalizedPath()); XAssert.AreEqual("s2", reader2.ReadStringId().ToString(pt.StringTable)); XAssert.AreEqual("s", reader2.ReadStringId().ToString(pt.StringTable)); } } }
/// <summary> /// Create a new RemapReader /// </summary> public PipRemapReader(PipExecutionContext pipExecutionContext, PipGraphFragmentContext pipGraphFragmentContext, Stream stream, bool debug = false, bool leaveOpen = true) : base(debug, pipExecutionContext.StringTable, stream, leaveOpen) { Contract.Requires(pipExecutionContext != null); Contract.Requires(pipGraphFragmentContext != null); Contract.Requires(stream != null); m_pipExecutionContext = pipExecutionContext; m_pipGraphFragmentContext = pipGraphFragmentContext; m_inliningReader = new InliningReader(stream, pipExecutionContext.PathTable, debug, leaveOpen); m_pipDataEntriesPointerInlineReader = new PipDataEntriesPointerInlineReader(this, stream, pipExecutionContext.PathTable, debug, leaveOpen); }
public void RoundTripInlining() { var pt = new PathTable(); var st = pt.StringTable; var paths = new AbsolutePath[] { AbsolutePath.Create(pt, A("c", "a", "b", "c", "d")), AbsolutePath.Create(pt, A("c", "a", "b", "c")), AbsolutePath.Create(pt, A("d", "AAA", "CCC")), AbsolutePath.Create(pt, A("D", "AAA", "CCC")), AbsolutePath.Create(pt, A("F", "BBB", "CCC")) }; var strings = new StringId[] { StringId.Create(st, "AAA"), StringId.Create(st, "hello"), StringId.Create(st, "繙BШЂЋЧЉЊЖ"), StringId.Create(st, "buildxl"), StringId.Create(st, "inline") }; using (var stream = new MemoryStream()) { using (var writer = new InliningWriter(stream, pt)) { for (int i = 0; i < paths.Length; i++) { writer.Write(paths[i]); writer.Write(strings[i]); } } stream.Position = 0; using (var reader = new InliningReader(stream, pt)) { for (int i = 0; i < paths.Length; i++) { var readPath = reader.ReadAbsolutePath(); var readString = reader.ReadStringId(); Assert.Equal(paths[i], readPath); Assert.Equal(strings[i], readString); } } stream.Position = 0; var pt2 = new PathTable(); var st2 = pt2.StringTable; AbsolutePath.Create(pt2, A("d")); AbsolutePath.Create(pt2, A("x", "dir", "buildxl", "file.txt")); using (var reader = new InliningReader(stream, pt2)) { for (int i = 0; i < paths.Length; i++) { var readPath = reader.ReadAbsolutePath(); var readString = reader.ReadStringId(); Assert.Equal(paths[i].ToString(pt).ToUpperInvariant(), readPath.ToString(pt2).ToUpperInvariant()); Assert.Equal(strings[i].ToString(st), readString.ToString(st2)); } } } }
public PipDataEntriesPointerInlineReader(InliningReader baseInliningReader, Stream stream, PathTable pathTable, bool debug = false, bool leaveOpen = true) : base(stream, pathTable, debug, leaveOpen) { m_baseInliningReader = baseInliningReader; }
public InliningReaderDedupInputStream(InliningReader reader) { m_reader = reader; }