Example #1
0
 /// <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));
                    }
                }
        }
Example #3
0
        /// <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);
        }
Example #4
0
        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));
                    }
                }
            }
        }
Example #5
0
 public PipDataEntriesPointerInlineReader(InliningReader baseInliningReader, Stream stream, PathTable pathTable, bool debug = false, bool leaveOpen = true)
     : base(stream, pathTable, debug, leaveOpen)
 {
     m_baseInliningReader = baseInliningReader;
 }
Example #6
0
 public InliningReaderDedupInputStream(InliningReader reader)
 {
     m_reader = reader;
 }