2 // System.IO.TextWriter
5 // Marcin Szczepanski (marcins@zipworld.com.au)
6 // Miguel de Icaza (miguel@gnome.org)
7 // Paolo Molaro (lupus@ximian.com)
11 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using System.Runtime.InteropServices;
45 public abstract class TextWriter : MarshalByRefObject, IDisposable {
47 protected TextWriter() {
48 CoreNewLine = System.Environment.NewLine.ToCharArray ();
51 protected TextWriter( IFormatProvider formatProvider ) {
52 CoreNewLine = System.Environment.NewLine.ToCharArray ();
53 internalFormatProvider = formatProvider;
56 protected char[] CoreNewLine;
58 internal IFormatProvider internalFormatProvider;
60 public static readonly TextWriter Null = new NullTextWriter ();
62 public abstract Encoding Encoding { get; }
64 public virtual IFormatProvider FormatProvider {
66 return internalFormatProvider;
70 public virtual string NewLine {
72 return new string(CoreNewLine);
77 value = Environment.NewLine;
79 CoreNewLine = value.ToCharArray();
83 public virtual void Close () {
87 protected virtual void Dispose (bool disposing)
90 // If we are explicitly disposed, we can avoid finalization.
91 GC.SuppressFinalize (this);
95 public void Dispose ()
99 // If we are explicitly disposed, we can avoid finalization.
100 GC.SuppressFinalize (this);
103 void System.IDisposable.Dispose () {
109 public virtual void Flush()
114 public static TextWriter Synchronized (TextWriter writer)
116 return Synchronized (writer, false);
119 internal static TextWriter Synchronized (TextWriter writer, bool neverClose)
122 throw new ArgumentNullException ("writer is null");
124 if (writer is SynchronizedWriter)
127 return new SynchronizedWriter (writer, neverClose);
130 public virtual void Write (bool value)
132 Write (value.ToString ());
135 public virtual void Write (char value)
140 public virtual void Write (char[] value)
144 Write (value, 0, value.Length);
147 public virtual void Write (decimal value)
149 Write (value.ToString (internalFormatProvider));
152 public virtual void Write (double value)
154 Write (value.ToString (internalFormatProvider));
157 public virtual void Write (int value)
159 Write (value.ToString (internalFormatProvider));
162 public virtual void Write (long value)
164 Write (value.ToString (internalFormatProvider));
167 public virtual void Write (object value)
170 Write (value.ToString ());
173 public virtual void Write (float value)
175 Write (value.ToString (internalFormatProvider));
178 public virtual void Write (string value)
181 Write (value.ToCharArray ());
184 [CLSCompliant(false)]
185 public virtual void Write (uint value)
187 Write (value.ToString (internalFormatProvider));
190 [CLSCompliant(false)]
191 public virtual void Write (ulong value)
193 Write (value.ToString (internalFormatProvider));
196 public virtual void Write (string format, object arg0)
198 Write (String.Format (format, arg0));
201 public virtual void Write (string format, params object[] arg)
203 Write (String.Format (format, arg));
206 public virtual void Write (char[] buffer, int index, int count)
209 throw new ArgumentNullException ("buffer");
210 if (index < 0 || index > buffer.Length)
211 throw new ArgumentOutOfRangeException ("index");
212 // re-ordered to avoid possible integer overflow
213 if (count < 0 || (index > buffer.Length - count))
214 throw new ArgumentOutOfRangeException ("count");
216 for (; count > 0; --count, ++index) {
217 Write (buffer [index]);
221 public virtual void Write (string format, object arg0, object arg1)
223 Write (String.Format (format, arg0, arg1));
226 public virtual void Write (string format, object arg0, object arg1, object arg2 )
228 Write (String.Format (format, arg0, arg1, arg2));
231 public virtual void WriteLine ()
236 public virtual void WriteLine (bool value)
242 public virtual void WriteLine (char value)
248 public virtual void WriteLine (char[] value)
254 public virtual void WriteLine (decimal value)
260 public virtual void WriteLine (double value)
266 public virtual void WriteLine (int value)
272 public virtual void WriteLine (long value)
278 public virtual void WriteLine (object value)
284 public virtual void WriteLine (float value)
290 public virtual void WriteLine (string value)
296 [CLSCompliant(false)]
297 public virtual void WriteLine (uint value)
303 [CLSCompliant(false)]
304 public virtual void WriteLine (ulong value)
310 public virtual void WriteLine (string format, object arg0)
312 Write (format, arg0);
316 public virtual void WriteLine (string format, params object[] arg)
322 public virtual void WriteLine (char[] buffer, int index, int count)
324 Write (buffer, index, count);
328 public virtual void WriteLine (string format, object arg0, object arg1)
330 Write (format, arg0, arg1);
334 public virtual void WriteLine (string format, object arg0, object arg1, object arg2)
336 Write (format, arg0, arg1, arg2);
341 // Null version of the TextWriter, for the `Null' instance variable
343 sealed class NullTextWriter : TextWriter {
344 public override Encoding Encoding {
346 return Encoding.Default;
350 public override void Write (string s)
353 public override void Write (char value)
356 public override void Write (char[] value, int index, int count)
363 // Sychronized version of the TextWriter.
366 internal class SynchronizedWriter : TextWriter {
367 private TextWriter writer;
368 private bool neverClose;
370 public SynchronizedWriter (TextWriter writer)
371 : this (writer, false)
375 public SynchronizedWriter (TextWriter writer, bool neverClose)
377 this.writer = writer;
378 this.neverClose = neverClose;
381 public override void Close ()
390 public override void Flush ()
397 #region Write methods
398 public override void Write (bool value)
401 writer.Write (value);
405 public override void Write (char value)
408 writer.Write (value);
412 public override void Write (char [] value)
415 writer.Write (value);
419 public override void Write (Decimal value)
422 writer.Write (value);
426 public override void Write (int value)
429 writer.Write (value);
433 public override void Write (long value)
436 writer.Write (value);
440 public override void Write (object value)
443 writer.Write (value);
447 public override void Write (float value)
450 writer.Write (value);
454 public override void Write (string value)
457 writer.Write (value);
461 public override void Write (uint value)
464 writer.Write (value);
468 public override void Write (ulong value)
471 writer.Write (value);
475 public override void Write (string format, object value)
478 writer.Write (format, value);
482 public override void Write (string format, object [] value)
485 writer.Write (format, value);
489 public override void Write (char [] buffer, int index, int count)
492 writer.Write (buffer, index, count);
496 public override void Write (string format, object arg0, object arg1)
499 writer.Write (format, arg0, arg1);
503 public override void Write (string format, object arg0, object arg1, object arg2)
506 writer.Write (format, arg0, arg1, arg2);
510 #region WriteLine methods
511 public override void WriteLine ()
518 public override void WriteLine (bool value)
521 writer.WriteLine (value);
525 public override void WriteLine (char value)
528 writer.WriteLine (value);
532 public override void WriteLine (char [] value)
535 writer.WriteLine (value);
539 public override void WriteLine (Decimal value)
542 writer.WriteLine (value);
546 public override void WriteLine (double value)
549 writer.WriteLine (value);
553 public override void WriteLine (int value)
556 writer.WriteLine (value);
560 public override void WriteLine (long value)
563 writer.WriteLine (value);
567 public override void WriteLine (object value)
570 writer.WriteLine (value);
574 public override void WriteLine (float value)
577 writer.WriteLine (value);
581 public override void WriteLine (string value)
584 writer.WriteLine (value);
588 public override void WriteLine (uint value)
591 writer.WriteLine (value);
595 public override void WriteLine (ulong value)
598 writer.WriteLine (value);
602 public override void WriteLine (string format, object value)
605 writer.WriteLine (format, value);
609 public override void WriteLine (string format, object [] value)
612 writer.WriteLine (format, value);
616 public override void WriteLine (char [] buffer, int index, int count)
619 writer.WriteLine (buffer, index, count);
623 public override void WriteLine (string format, object arg0, object arg1)
626 writer.WriteLine (format, arg0, arg1);
630 public override void WriteLine (string format, object arg0, object arg1, object arg2)
633 writer.WriteLine (format, arg0, arg1, arg2);
638 public override Encoding Encoding {
641 return writer.Encoding;
646 public override IFormatProvider FormatProvider {
649 return writer.FormatProvider;
654 public override string NewLine {
657 return writer.NewLine;
663 writer.NewLine = value;