1 //------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //------------------------------------------------------------
4 namespace System.Xml
5 {
6     using System.IO;
7     using System.Collections;
8     using System.Text;
9     using System.Diagnostics;
10     using System.Globalization;
11     using System.Runtime.Serialization;
12     using System.Runtime;
13     using System.Threading;
14     using System.Collections.Generic;
15 
16     abstract class XmlNodeWriter
17     {
18         static XmlNodeWriter nullNodeWriter;
19 
20         static public XmlNodeWriter Null
21         {
22             get
23             {
24                 if (nullNodeWriter == null)
25                     nullNodeWriter = new XmlNullNodeWriter();
26                 return nullNodeWriter;
27             }
28         }
29 
WriteBase64TextAsync(AsyncEventArgs<XmlNodeWriterWriteBase64TextArgs> state)30         internal virtual AsyncCompletionResult WriteBase64TextAsync(AsyncEventArgs<XmlNodeWriterWriteBase64TextArgs> state)
31         {
32             // We do not guard this invocation. The caller of the NodeWriter should ensure that that
33             // they override the FastAsync guard clause for the XmlDictionaryWriter and that the
34             // nodeWriter has an implemenation for WriteBase64TextAsync.
35             throw Fx.AssertAndThrow("WriteBase64TextAsync not implemented.");
36         }
37 
BeginWriteBase64Text(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count, AsyncCallback callback, object state)38         public virtual IAsyncResult BeginWriteBase64Text(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count, AsyncCallback callback, object state)
39         {
40             return new WriteBase64TextAsyncResult(trailBuffer, trailCount, buffer, offset, count, this, callback, state);
41         }
42 
EndWriteBase64Text(IAsyncResult result)43         public virtual void EndWriteBase64Text(IAsyncResult result)
44         {
45             WriteBase64TextAsyncResult.End(result);
46         }
47 
Flush()48         public abstract void Flush();
Close()49         public abstract void Close();
WriteDeclaration()50         public abstract void WriteDeclaration();
WriteComment(string text)51         public abstract void WriteComment(string text);
WriteCData(string text)52         public abstract void WriteCData(string text);
WriteStartElement(string prefix, string localName)53         public abstract void WriteStartElement(string prefix, string localName);
WriteStartElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)54         public virtual void WriteStartElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)
55         {
56             WriteStartElement(Encoding.UTF8.GetString(prefixBuffer, prefixOffset, prefixLength), Encoding.UTF8.GetString(localNameBuffer, localNameOffset, localNameLength));
57         }
WriteStartElement(string prefix, XmlDictionaryString localName)58         public abstract void WriteStartElement(string prefix, XmlDictionaryString localName);
WriteEndStartElement(bool isEmpty)59         public abstract void WriteEndStartElement(bool isEmpty);
WriteEndElement(string prefix, string localName)60         public abstract void WriteEndElement(string prefix, string localName);
WriteEndElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)61         public virtual void WriteEndElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)
62         {
63             WriteEndElement(Encoding.UTF8.GetString(prefixBuffer, prefixOffset, prefixLength), Encoding.UTF8.GetString(localNameBuffer, localNameOffset, localNameLength));
64         }
WriteXmlnsAttribute(string prefix, string ns)65         public abstract void WriteXmlnsAttribute(string prefix, string ns);
WriteXmlnsAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] nsBuffer, int nsOffset, int nsLength)66         public virtual void WriteXmlnsAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] nsBuffer, int nsOffset, int nsLength)
67         {
68             WriteXmlnsAttribute(Encoding.UTF8.GetString(prefixBuffer, prefixOffset, prefixLength), Encoding.UTF8.GetString(nsBuffer, nsOffset, nsLength));
69         }
WriteXmlnsAttribute(string prefix, XmlDictionaryString ns)70         public abstract void WriteXmlnsAttribute(string prefix, XmlDictionaryString ns);
WriteStartAttribute(string prefix, string localName)71         public abstract void WriteStartAttribute(string prefix, string localName);
WriteStartAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)72         public virtual void WriteStartAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)
73         {
74             WriteStartAttribute(Encoding.UTF8.GetString(prefixBuffer, prefixOffset, prefixLength), Encoding.UTF8.GetString(localNameBuffer, localNameOffset, localNameLength));
75         }
WriteStartAttribute(string prefix, XmlDictionaryString localName)76         public abstract void WriteStartAttribute(string prefix, XmlDictionaryString localName);
WriteEndAttribute()77         public abstract void WriteEndAttribute();
WriteCharEntity(int ch)78         public abstract void WriteCharEntity(int ch);
WriteEscapedText(string value)79         public abstract void WriteEscapedText(string value);
WriteEscapedText(XmlDictionaryString value)80         public abstract void WriteEscapedText(XmlDictionaryString value);
WriteEscapedText(char[] chars, int offset, int count)81         public abstract void WriteEscapedText(char[] chars, int offset, int count);
WriteEscapedText(byte[] buffer, int offset, int count)82         public abstract void WriteEscapedText(byte[] buffer, int offset, int count);
WriteText(string value)83         public abstract void WriteText(string value);
WriteText(XmlDictionaryString value)84         public abstract void WriteText(XmlDictionaryString value);
WriteText(char[] chars, int offset, int count)85         public abstract void WriteText(char[] chars, int offset, int count);
WriteText(byte[] buffer, int offset, int count)86         public abstract void WriteText(byte[] buffer, int offset, int count);
WriteInt32Text(int value)87         public abstract void WriteInt32Text(int value);
WriteInt64Text(Int64 value)88         public abstract void WriteInt64Text(Int64 value);
WriteBoolText(bool value)89         public abstract void WriteBoolText(bool value);
WriteUInt64Text(UInt64 value)90         public abstract void WriteUInt64Text(UInt64 value);
WriteFloatText(float value)91         public abstract void WriteFloatText(float value);
WriteDoubleText(double value)92         public abstract void WriteDoubleText(double value);
WriteDecimalText(decimal value)93         public abstract void WriteDecimalText(decimal value);
WriteDateTimeText(DateTime value)94         public abstract void WriteDateTimeText(DateTime value);
WriteUniqueIdText(UniqueId value)95         public abstract void WriteUniqueIdText(UniqueId value);
WriteTimeSpanText(TimeSpan value)96         public abstract void WriteTimeSpanText(TimeSpan value);
WriteGuidText(Guid value)97         public abstract void WriteGuidText(Guid value);
WriteStartListText()98         public abstract void WriteStartListText();
WriteListSeparator()99         public abstract void WriteListSeparator();
WriteEndListText()100         public abstract void WriteEndListText();
WriteBase64Text(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count)101         public abstract void WriteBase64Text(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count);
WriteQualifiedName(string prefix, XmlDictionaryString localName)102         public abstract void WriteQualifiedName(string prefix, XmlDictionaryString localName);
103 
104         class XmlNullNodeWriter : XmlNodeWriter
105         {
Flush()106             public override void Flush() { }
Close()107             public override void Close() { }
WriteDeclaration()108             public override void WriteDeclaration() { }
WriteComment(string text)109             public override void WriteComment(string text) { }
WriteCData(string text)110             public override void WriteCData(string text) { }
WriteStartElement(string prefix, string localName)111             public override void WriteStartElement(string prefix, string localName) { }
WriteStartElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)112             public override void WriteStartElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength) { }
WriteStartElement(string prefix, XmlDictionaryString localName)113             public override void WriteStartElement(string prefix, XmlDictionaryString localName) { }
WriteEndStartElement(bool isEmpty)114             public override void WriteEndStartElement(bool isEmpty) { }
WriteEndElement(string prefix, string localName)115             public override void WriteEndElement(string prefix, string localName) { }
WriteEndElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)116             public override void WriteEndElement(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength) { }
WriteXmlnsAttribute(string prefix, string ns)117             public override void WriteXmlnsAttribute(string prefix, string ns) { }
WriteXmlnsAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] nsBuffer, int nsOffset, int nsLength)118             public override void WriteXmlnsAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] nsBuffer, int nsOffset, int nsLength) { }
WriteXmlnsAttribute(string prefix, XmlDictionaryString ns)119             public override void WriteXmlnsAttribute(string prefix, XmlDictionaryString ns) { }
WriteStartAttribute(string prefix, string localName)120             public override void WriteStartAttribute(string prefix, string localName) { }
WriteStartAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength)121             public override void WriteStartAttribute(byte[] prefixBuffer, int prefixOffset, int prefixLength, byte[] localNameBuffer, int localNameOffset, int localNameLength) { }
WriteStartAttribute(string prefix, XmlDictionaryString localName)122             public override void WriteStartAttribute(string prefix, XmlDictionaryString localName) { }
WriteEndAttribute()123             public override void WriteEndAttribute() { }
WriteCharEntity(int ch)124             public override void WriteCharEntity(int ch) { }
WriteEscapedText(string value)125             public override void WriteEscapedText(string value) { }
WriteEscapedText(XmlDictionaryString value)126             public override void WriteEscapedText(XmlDictionaryString value) { }
WriteEscapedText(char[] chars, int offset, int count)127             public override void WriteEscapedText(char[] chars, int offset, int count) { }
WriteEscapedText(byte[] buffer, int offset, int count)128             public override void WriteEscapedText(byte[] buffer, int offset, int count) { }
WriteText(string value)129             public override void WriteText(string value) { }
WriteText(XmlDictionaryString value)130             public override void WriteText(XmlDictionaryString value) { }
WriteText(char[] chars, int offset, int count)131             public override void WriteText(char[] chars, int offset, int count) { }
WriteText(byte[] buffer, int offset, int count)132             public override void WriteText(byte[] buffer, int offset, int count) { }
WriteInt32Text(int value)133             public override void WriteInt32Text(int value) { }
WriteInt64Text(Int64 value)134             public override void WriteInt64Text(Int64 value) { }
WriteBoolText(bool value)135             public override void WriteBoolText(bool value) { }
WriteUInt64Text(UInt64 value)136             public override void WriteUInt64Text(UInt64 value) { }
WriteFloatText(float value)137             public override void WriteFloatText(float value) { }
WriteDoubleText(double value)138             public override void WriteDoubleText(double value) { }
WriteDecimalText(decimal value)139             public override void WriteDecimalText(decimal value) { }
WriteDateTimeText(DateTime value)140             public override void WriteDateTimeText(DateTime value) { }
WriteUniqueIdText(UniqueId value)141             public override void WriteUniqueIdText(UniqueId value) { }
WriteTimeSpanText(TimeSpan value)142             public override void WriteTimeSpanText(TimeSpan value) { }
WriteGuidText(Guid value)143             public override void WriteGuidText(Guid value) { }
WriteStartListText()144             public override void WriteStartListText() { }
WriteListSeparator()145             public override void WriteListSeparator() { }
WriteEndListText()146             public override void WriteEndListText() { }
WriteBase64Text(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count)147             public override void WriteBase64Text(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count) { }
WriteQualifiedName(string prefix, XmlDictionaryString localName)148             public override void WriteQualifiedName(string prefix, XmlDictionaryString localName) { }
149         }
150 
151         class WriteBase64TextAsyncResult : ScheduleActionItemAsyncResult
152         {
153             byte[] trailBuffer;
154             int trailCount;
155             byte[] buffer;
156             int offset;
157             int count;
158             XmlNodeWriter nodeWriter;
159 
WriteBase64TextAsyncResult(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count, XmlNodeWriter nodeWriter, AsyncCallback callback, object state)160             public WriteBase64TextAsyncResult(byte[] trailBuffer, int trailCount, byte[] buffer, int offset, int count, XmlNodeWriter nodeWriter, AsyncCallback callback, object state)
161                 : base(callback, state)
162             {
163                 Fx.Assert(nodeWriter != null, "nodeWriter should never be null");
164 
165                 this.trailBuffer = trailBuffer;
166                 this.trailCount = trailCount;
167                 this.buffer = buffer;
168                 this.offset = offset;
169                 this.count = count;
170                 this.nodeWriter = nodeWriter;
171 
172                 Schedule();
173             }
174 
OnDoWork()175             protected override void OnDoWork()
176             {
177                 this.nodeWriter.WriteBase64Text(this.trailBuffer, this.trailCount, this.buffer, this.offset, this.count);
178             }
179         }
180     }
181 }
182