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