コード例 #1
0
            public bool TryGetValue(string text, out int val)
            {
                val = default;

                if (text == null)
                {
                    return(false);
                }
                var systemTab = SharedSymbolTable.GetSystem(1);
                var st        = systemTab.Find(text);

                if (st.Text != null)
                {
                    //found it
                    val = st.Sid;
                    return(true);
                }

//                for (int i = 0, l = Symbols.SystemSymbolTokens.Length; i < l; i++)
//                {
//                    var systemToken = Symbols.SystemSymbolTokens[i];
//                    if (systemToken.Text != text) continue;
//                    val = systemToken.Sid;
//                    return true;
//                }

                if (Parents.Length == 0)
                {
                    return(false);
                }

                return(_dict.TryGetValue(text, out val));
            }
コード例 #2
0
        public void InternNull_ThrowsException(string nullString)
        {
            const string name    = "tableName";
            const int    version = 1;
            var          table   = SharedSymbolTable.NewSharedSymbolTable(name, version, null, new string[0]);

            Assert.ThrowsException <ArgumentNullException>(() => table.Intern(nullString));
        }
コード例 #3
0
        public void BasicSymbol_NoImport_Valid(string[] symbols)
        {
            const string name    = "tableName";
            const int    version = 1;
            var          table   = SharedSymbolTable.NewSharedSymbolTable(name, version, null, symbols);

            AssertTable(table, name, version, symbols);
        }
コード例 #4
0
        public static ICatalog GetCatalog()
        {
            var catalog   = new SimpleCatalog();
            var yjSymbols = SharedSymbolTable.NewSharedSymbolTable("YJ_symbols", 10, null, YjSymbols);

            catalog.PutTable(yjSymbols);
            return(catalog);
        }
コード例 #5
0
        public void InternKnownText_KeepEntry(string text)
        {
            var table     = SharedSymbolTable.NewSharedSymbolTable("table", 1, null, new[] { text });
            var extraText = new StringBuilder(text).ToString();

            Assert.AreNotSame(text, extraText);

            var symtok = table.Find(extraText);

            //make sure that no extra allocation is made
            Assert.AreSame(text, symtok.Text);
            Assert.AreEqual(SymbolToken.UnknownSid, symtok.Sid);
        }
コード例 #6
0
        public void GetTable_BestMatch(int expected, int requested, int[] available)
        {
            const string tName = "T";
            var          map   = new Dictionary <int, ISymbolTable>();
            var          cat   = new SimpleCatalog();

            foreach (var a in available)
            {
                map.Add(a, SharedSymbolTable.NewSharedSymbolTable(tName, a, null, new[] { "yes", "no" }));
                cat.PutTable(map[a]);
            }

            Assert.AreEqual(expected, cat.GetTable(tName, requested).Version);
        }
コード例 #7
0
        public void FindToken(string[] symbols)
        {
            var table = SharedSymbolTable.NewSharedSymbolTable("table", 1, null, symbols);

            foreach (var symbol in symbols)
            {
                var token = table.Find(symbol);
                Assert.AreSame(symbol, token.Text);
            }

            var unknown = table.Find($"{string.Join(",", symbols)}key");

            Assert.AreEqual(SymbolToken.None, unknown);
            Assert.ThrowsException <ArgumentNullException>(() => table.Find(null));
        }
コード例 #8
0
        private void MoveNextUser()
        {
            base.HasNext();

            // if we're not at the top (datagram) level or the next value is null
            if (this.CurrentDepth != 0 || this.valueIsNull)
            {
                return;
            }

            Debug.Assert(this.valueTid != BinaryConstants.TidTypedecl, "valueTid is Typedec1");

            if (this.valueTid == BinaryConstants.TidSymbol)
            {
                // trying to read a symbol here
                // $ion_1_0 is read as an IVM only if it is not annotated
                // we already count the number of annotations
                if (this.Annotations.Count != 0)
                {
                    return;
                }

                this.LoadOnce();

                // just get it straight from the holder, no conversion needed
                var sid = this.valueVariant.IntValue;
                if (sid != SystemSymbols.Ion10Sid)
                {
                    return;
                }

                this.SymbolTable = SharedSymbolTable.GetSystem(1);

                // user don't need to see this symbol so continue here
                this.moveNextNeeded = true;
            }
            else if (this.valueTid == BinaryConstants.TidStruct)
            {
                // trying to read the local symbolTable here
                if (this.hasSymbolTableAnnotation)
                {
                    this.SymbolTable = ReaderLocalTable.ImportReaderTable(this, this.catalog, false);

                    // user don't need to read the localsymboltable so continue
                    this.moveNextNeeded = true;
                }
            }
        }
コード例 #9
0
            public bool TryGetValue(string text, out int val)
            {
                if (text == null)
                {
                    val = 0;
                    return(false);
                }

                var systemTab = SharedSymbolTable.GetSystem(1);

                val = systemTab.FindSymbolId(text);
                if (val > 0)
                {
                    return(true);
                }

                return(this.dict.TryGetValue(text, out val));
            }
コード例 #10
0
 protected SystemTreeReader(IIonValue value)
 {
     _systemSymbols = SharedSymbolTable.GetSystem(1);
     _current       = null;
     _eof           = false;
     _top           = 0;
     if (value.Type() == IonType.Datagram)
     {
         _parent = value;
         _next   = null;
         _iter   = value.GetEnumerator();
     }
     else
     {
         _parent = null;
         _next   = value;
     }
 }
コード例 #11
0
 protected SystemTreeReader(IIonValue value)
 {
     this.systemSymbols = SharedSymbolTable.GetSystem(1);
     this.current       = null;
     this.eof           = false;
     this.top           = 0;
     if (value.Type() == IonType.Datagram)
     {
         this.parent = value;
         this.next   = null;
         this.iter   = value.GetEnumerator();
     }
     else
     {
         this.parent = null;
         this.next   = value;
     }
 }
コード例 #12
0
        public void OneTable_MissingVersion()
        {
            const string tName = "T";
            var          cat   = new SimpleCatalog();

            Assert.IsNull(cat.GetTable(tName));
            Assert.IsNull(cat.GetTable(tName, 3));

            var t1 = SharedSymbolTable.NewSharedSymbolTable(tName, 1, null, new[] { "yes", "no" });

            cat.PutTable(t1);
            Assert.AreSame(t1, cat.GetTable(tName));
            Assert.AreSame(t1, cat.GetTable(tName, 1));
            Assert.AreSame(t1, cat.GetTable(tName, 5));

            var t2 = SharedSymbolTable.NewSharedSymbolTable(tName, 2, null, new[] { "yes", "no", "maybe" });

            cat.PutTable(t2);
            Assert.AreSame(t1, cat.GetTable(tName, 1));
            Assert.AreSame(t2, cat.GetTable(tName, 2));
            Assert.AreSame(t2, cat.GetTable(tName, 5));
        }
コード例 #13
0
 protected SystemTextReader(TextStream input, IonType parent) : base(input, parent)
 {
     _systemSymbols = SharedSymbolTable.GetSystem(1);
 }
コード例 #14
0
 protected SystemTextReader(TextStream input)
     : base(input)
 {
     this.systemSymbols = SharedSymbolTable.GetSystem(1);
 }
コード例 #15
0
 internal SystemBinaryReader(Stream input)
     : this(input, SharedSymbolTable.GetSystem(1))
 {
 }
コード例 #16
0
        public void WriterReader()
        {
            var catalog = new SimpleCatalog();
            var table1  = SharedSymbolTable.NewSharedSymbolTable("table1", 1, null, new[] { "s1", "s2" });
            var table2  = SharedSymbolTable.NewSharedSymbolTable("table2", 1, null, new[] { "s3", "s4" });

            catalog.PutTable(table1);
            catalog.PutTable(table2);

            var stream = new MemoryStream();

            byte[] output;
            using (var binWriter = new ManagedBinaryWriter(stream, new[] { table1, table2 }))
            {
                binWriter.StepIn(IonType.Struct);
                binWriter.SetFieldName("s1");
                binWriter.WriteSymbol("s2");
                binWriter.SetFieldName("s3");
                binWriter.WriteSymbol("s4");
                binWriter.StepOut();
                binWriter.Finish();
                Assert.AreEqual(binWriter.SymbolTable.GetImportedMaxId(), binWriter.SymbolTable.MaxId);

                output = stream.ToArray();
            }

            var reader = IonReaderBuilder.Build(new MemoryStream(output));

            Assert.AreEqual(IonType.Struct, reader.MoveNext());
            reader.StepIn();
            Assert.AreEqual(IonType.Symbol, reader.MoveNext());
            var fns = reader.GetFieldNameSymbol();

            Assert.AreEqual(10, fns.Sid);
            Assert.IsNull(fns.Text);
            Assert.ThrowsException <UnknownSymbolException>(() => reader.CurrentFieldName);
            Assert.AreEqual(11, reader.SymbolValue().Sid);

            Assert.AreEqual(IonType.Symbol, reader.MoveNext());
            fns = reader.GetFieldNameSymbol();
            Assert.AreEqual(12, fns.Sid);
            Assert.IsNull(fns.Text);
            Assert.ThrowsException <UnknownSymbolException>(() => reader.CurrentFieldName);
            Assert.AreEqual(13, reader.SymbolValue().Sid);

            //make sure that a reader with the correct imports can read it
            var reader2 = new UserBinaryReader(new MemoryStream(output), catalog);

            Assert.AreEqual(IonType.Struct, reader2.MoveNext());
            var localTable = reader2.GetSymbolTable();

            Console.WriteLine(localTable.Find("s1").ToString());
            reader2.StepIn();
            Assert.AreEqual(IonType.Symbol, reader2.MoveNext());
            Assert.AreEqual("s1", reader2.CurrentFieldName);
            Assert.AreEqual("s2", reader2.SymbolValue().Text);

            Assert.AreEqual(IonType.Symbol, reader2.MoveNext());
            Assert.AreEqual("s3", reader2.CurrentFieldName);
            Assert.AreEqual("s4", reader2.SymbolValue().Text);
        }
コード例 #17
0
 public override ISymbolTable GetSystemTable() => SharedSymbolTable.GetSystem(1);
コード例 #18
0
 public ISymbolTable GetSystemTable() => SharedSymbolTable.GetSystem(1);
コード例 #19
0
 internal SystemBinaryReader(Stream input, IReaderRoutine readerRoutine)
     : this(input, SharedSymbolTable.GetSystem(1), readerRoutine)
 {
 }
コード例 #20
0
        public void InternUnknownText_Throws()
        {
            var table = SharedSymbolTable.NewSharedSymbolTable("table", 1, null, new[] { "a", "b", "c" });

            Assert.ThrowsException <InvalidOperationException>(() => table.Intern("d"));
        }