public void UseStandardSession2()
        {
            MemoryStream           ms      = new MemoryStream();
            XmlBinaryWriterSession session =
                new XmlBinaryWriterSession();
            XmlDictionary       dic = new XmlDictionary();
            XmlDictionaryString x   = dic.Add("urn:foo");
            XmlDictionaryWriter w   = XmlDictionaryWriter.CreateBinaryWriter(ms, dic, session);

            w.WriteStartElement(dic.Add("FOO"), x);
            w.WriteStartElement(dic.Add("blah"), x);
            w.WriteStartElement(dic.Add("blabla"), x);
            w.Close();
            Assert.AreEqual(new byte [] { 0x42, 2, 0x0A, 0, 0x42, 4, 0x42, 6, 1, 1, 1 }, ms.ToArray(), "#1");

            XmlDictionaryString ds;

            Assert.IsTrue(dic.TryLookup(0, out ds), "#2-1");
            Assert.AreEqual("urn:foo", ds.Value, "#2-2");
            Assert.AreEqual(0, ds.Key, "#2-3");
            Assert.IsTrue(dic.TryLookup(1, out ds), "#3-1");
            Assert.AreEqual("FOO", ds.Value, "#3-2");
            Assert.AreEqual(1, ds.Key, "#3-3");
            Assert.IsTrue(dic.TryLookup(2, out ds), "#4-1");
            Assert.AreEqual("blah", ds.Value, "#4-2");
            Assert.AreEqual(2, ds.Key, "#4-3");
            Assert.IsTrue(dic.TryLookup(3, out ds), "#5-1");
            Assert.AreEqual("blabla", ds.Value, "#5-2");
            Assert.AreEqual(3, ds.Key, "#5-3");
        }
Exemple #2
0
    public void Beyond128DictionaryEntries ()
    {
        XmlDictionaryString ds;
        MemoryStream ms = new MemoryStream ();
        XmlDictionary dic = new XmlDictionary ();
        for (int i = 0; i < 260; i++)
            Assert.AreEqual (i, dic.Add ("n" + i).Key, "d");
        XmlDictionary dic2 = new XmlDictionary ();
        XmlBinaryWriterSession session = new XmlBinaryWriterSession ();
        int idx;
        for (int i = 0; i < 260; i++)
            session.TryAdd (dic2.Add ("n" + i), out idx);
        XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter (ms, dic, session);
        w.WriteStartElement (dic.Add ("n128"), dic.Add ("n129"));
        w.WriteStartElement (dic2.Add ("n130"), dic2.Add ("n131"));
        w.WriteStartElement (dic.Add ("n132"), dic2.Add ("n133"));
        w.WriteStartElement (dic.Add ("n256"), dic2.Add ("n256"));
        w.Close ();

        byte [] bytes = new byte []
        {
            // so, when it went beyond 128, the index
            // becomes 2 bytes, where
            // - the first byte always becomes > 80, and
            // - the second byte becomes (n / 0x80) * 2.
            0x42, 0x80, 2, 0x0A, 0x82, 2,
            0x42, 0x85, 2, 0x0A, 0x87, 2,
            0x42, 0x88, 2, 0x0A, 0x8B, 2,
            0x42, 0x80, 4, 0x0A, 0x81, 4,
            1, 1, 1, 1
        };
        Assert.AreEqual (bytes, ms.ToArray (), "result");
    }
Exemple #3
0
        public void TryAddDuplicate()
        {
            XmlDictionary          dic = new XmlDictionary();
            XmlDictionaryString    d1  = dic.Add("foo");
            XmlBinaryWriterSession s   = new XmlBinaryWriterSession();
            int idx;

            s.TryAdd(d1, out idx);
            s.TryAdd(d1, out idx);
        }
Exemple #4
0
 public void WriteDictionaryStringWithDifferentDictionary () // it actually works
 {
     MemoryStream ms = new MemoryStream ();
     XmlBinaryWriterSession session = new XmlBinaryWriterSession ();
     XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter (ms, new XmlDictionary (), session);
     XmlDictionary dic = new XmlDictionary ();
     w.WriteStartElement (dic.Add ("FOO"), XmlDictionaryString.Empty);
     w.Close ();
     Assert.AreEqual (new byte [] {0x42, 1, 1}, ms.ToArray ());
 }
Exemple #5
0
 public void UseStandardSession ()
 {
     MemoryStream ms = new MemoryStream ();
     XmlBinaryWriterSession session =
         new XmlBinaryWriterSession ();
     XmlDictionary dic = new XmlDictionary ();
     XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter (ms, dic, session);
     w.WriteStartElement (dic.Add ("FOO"), XmlDictionaryString.Empty);
     w.WriteStartElement (dic.Add ("blah"), XmlDictionaryString.Empty);
     w.WriteStartElement (dic.Add ("blabla"), XmlDictionaryString.Empty);
     w.Close ();
     Assert.AreEqual (new byte [] {0x42, 0, 0x42, 2, 0x42, 4, 1, 1, 1}, ms.ToArray ());
 }
Exemple #6
0
        public void TryAddIndex()
        {
            XmlDictionary          dic = new XmlDictionary();
            XmlDictionaryString    d1  = dic.Add("foo");
            XmlDictionaryString    d2  = dic.Add("bar");
            XmlDictionaryString    d3  = dic.Add("baz");
            XmlBinaryWriterSession s   = new XmlBinaryWriterSession();
            int idx;

            s.TryAdd(d1, out idx);
            Assert.AreEqual(0, idx, "#1");
            s.TryAdd(d3, out idx);
            Assert.AreEqual(1, idx, "#2");              // not 2
        }
Exemple #7
0
        private static void Test2()
        {
            Employee employee = new Employee
            {
                Id       = "123",
                Deptment = "生产",
                Name     = "lhl",
                Sex      = "M"
            };
            var           session    = new XmlBinaryWriterSession();
            XmlDictionary dictionary = new XmlDictionary();

            dictionary.Add("Employee");
            dictionary.Add("Id");
            dictionary.Add("Name");
            dictionary.Add("Gender");
            WriteObject <Employee>(employee, (stream) => XmlDictionaryWriter.CreateBinaryWriter(stream, dictionary, session, false));
        }
Exemple #8
0
        static void Main(string[] args)
        {
            Employee employee = new Employee
            {
                Id         = "001",
                Name       = "张三",
                Gender     = "男",
                Department = "销售部"
            };
            var           session    = new XmlBinaryWriterSession();
            XmlDictionary dictionary = new XmlDictionary();

            dictionary.Add("Employee");
            dictionary.Add("Id");
            dictionary.Add("Name");
            dictionary.Add("Gender");
            dictionary.Add("Department");
            WriteObject <Employee>(employee, stream => XmlDictionaryWriter.CreateBinaryWriter(stream, dictionary, session, false));
        }
        public void IndicesFromDictionaryAndSession()
        {
            // So, I found out the solution for the indices puzzle.
            MemoryStream           ms      = new MemoryStream();
            XmlBinaryWriterSession session = new XmlBinaryWriterSession();
            XmlDictionary          dic     = new XmlDictionary();
            XmlDictionaryWriter    w       = XmlDictionaryWriter.CreateBinaryWriter(ms, dic, session);
            XmlDictionary          dic2    = new XmlDictionary();
            XmlDictionary          dic3    = new XmlDictionary();

            w.WriteStartElement(dic.Add("FOO"), XmlDictionaryString.Empty);
            w.WriteStartElement(dic2.Add("FOO"), XmlDictionaryString.Empty);
            w.WriteStartElement(dic3.Add("FOO"), XmlDictionaryString.Empty);
            w.WriteStartElement(dic2.Add("BAR"), XmlDictionaryString.Empty);
            w.WriteStartElement(dic.Add("BAR"), XmlDictionaryString.Empty);
            w.Close();
            // ... so, looks like even indices are for dictionary,
            // and odd indices are for session.
            byte [] bytes = new byte [] {
                0x42, 0, 0x42, 1, 0x42, 1, 0x42, 3,
                0x42, 2, 1, 1, 1, 1, 1
            };
            Assert.AreEqual(bytes, ms.ToArray());
        }
 public BinaryBufferedMessageWriter(IXmlDictionary dictionary, XmlBinaryWriterSession session)
 {
     this.dictionary = dictionary;
     this.session    = session;
 }
 public static XmlDictionaryWriter CreateBinaryWriter(Stream stream, IXmlDictionary dictionary, XmlBinaryWriterSession session, bool ownsStream);
 public static XmlDictionaryWriter CreateBinaryWriter(Stream stream, IXmlDictionary dictionary, XmlBinaryWriterSession session, bool ownsStream);