2 // System.IO.TextWriter
\r
5 // Marcin Szczepanski (marcins@zipworld.com.au)
\r
6 // Miguel de Icaza (miguel@gnome.org)
\r
7 // Paolo Molaro (lupus@ximian.com)
\r
12 namespace System.IO {
\r
15 public abstract class TextWriter : MarshalByRefObject, IDisposable {
\r
17 protected TextWriter() {
\r
18 CoreNewLine = System.Environment.NewLine;
\r
21 protected TextWriter( IFormatProvider formatProvider ) {
\r
22 internalFormatProvider = formatProvider;
\r
25 protected string CoreNewLine;
\r
27 internal IFormatProvider internalFormatProvider;
\r
29 public static readonly TextWriter Null = new NullTextWriter ();
\r
31 public abstract Encoding Encoding { get; }
\r
33 public virtual IFormatProvider FormatProvider {
\r
35 return internalFormatProvider;
\r
39 public virtual string NewLine {
\r
45 CoreNewLine = value;
\r
49 public virtual void Close () {
\r
53 protected virtual void Dispose (bool disposing) { }
\r
55 void System.IDisposable.Dispose () {
\r
60 public virtual void Flush()
\r
65 public static TextWriter Synchronized (TextWriter writer)
\r
67 return Synchronized (writer, false);
\r
70 internal static TextWriter Synchronized (TextWriter writer, bool neverClose)
\r
73 throw new ArgumentNullException ("writer is null");
\r
75 if (writer is SynchronizedWriter)
\r
78 return new SynchronizedWriter (writer, neverClose);
\r
81 public virtual void Write (bool value)
\r
83 Write (value.ToString ());
\r
86 public virtual void Write (char value)
\r
91 public virtual void Write (char[] value)
\r
93 if (value != null) {
\r
94 for (int i = 0; i < value.Length; ++i)
\r
99 public virtual void Write (decimal value)
\r
101 Write (value.ToString (internalFormatProvider));
\r
104 public virtual void Write (double value)
\r
106 Write (value.ToString (internalFormatProvider));
\r
109 public virtual void Write (int value)
\r
111 Write (value.ToString (internalFormatProvider));
\r
114 public virtual void Write (long value)
\r
116 Write (value.ToString (internalFormatProvider));
\r
119 public virtual void Write (object value)
\r
122 Write (value.ToString ());
\r
125 public virtual void Write (float value)
\r
127 Write (value.ToString (internalFormatProvider));
\r
130 public virtual void Write (string value)
\r
133 Write (value.ToCharArray ());
\r
136 [CLSCompliant(false)]
\r
137 public virtual void Write (uint value)
\r
139 Write (value.ToString (internalFormatProvider));
\r
142 [CLSCompliant(false)]
\r
143 public virtual void Write (ulong value)
\r
145 Write (value.ToString (internalFormatProvider));
\r
148 public virtual void Write (string format, object arg0)
\r
150 Write (String.Format (format, arg0));
\r
153 public virtual void Write (string format, params object[] arg)
\r
155 Write (String.Format (format, arg));
\r
158 public virtual void Write (char[] buffer, int index, int count)
\r
160 if (buffer == null)
\r
161 throw new ArgumentNullException ("buffer");
\r
162 if (index < 0 || index > buffer.Length)
\r
163 throw new ArgumentOutOfRangeException ("index");
164 // re-ordered to avoid possible integer overflow
165 if (count < 0 || (index > buffer.Length - count))
\r
166 throw new ArgumentOutOfRangeException ("count");
168 for (; count > 0; --count, ++index) {
\r
169 Write (buffer [index]);
\r
173 public virtual void Write (string format, object arg0, object arg1)
\r
175 Write (String.Format (format, arg0, arg1));
\r
178 public virtual void Write (string format, object arg0, object arg1, object arg2 )
\r
180 Write (String.Format (format, arg0, arg1, arg2));
\r
183 public virtual void WriteLine ()
\r
188 public virtual void WriteLine (bool value)
\r
194 public virtual void WriteLine (char value)
\r
200 public virtual void WriteLine (char[] value)
\r
206 public virtual void WriteLine (decimal value)
\r
212 public virtual void WriteLine (double value)
\r
218 public virtual void WriteLine (int value)
\r
224 public virtual void WriteLine (long value)
\r
230 public virtual void WriteLine (object value)
\r
236 public virtual void WriteLine (float value)
\r
242 public virtual void WriteLine (string value)
\r
248 [CLSCompliant(false)]
\r
249 public virtual void WriteLine (uint value)
\r
255 [CLSCompliant(false)]
\r
256 public virtual void WriteLine (ulong value)
\r
262 public virtual void WriteLine (string format, object arg0)
\r
264 Write (format, arg0);
\r
268 public virtual void WriteLine (string format, params object[] arg)
\r
270 Write (format, arg);
\r
274 public virtual void WriteLine (char[] buffer, int index, int count)
\r
276 Write (buffer, index, count);
\r
280 public virtual void WriteLine (string format, object arg0, object arg1)
\r
282 Write (format, arg0, arg1);
\r
286 public virtual void WriteLine (string format, object arg0, object arg1, object arg2)
\r
288 Write (format, arg0, arg1, arg2);
\r
293 // Null version of the TextWriter, for the `Null' instance variable
\r
295 sealed class NullTextWriter : TextWriter {
\r
296 public override Encoding Encoding {
\r
298 return Encoding.Default;
\r
302 public override void Write (string s)
\r
305 public override void Write (char value)
\r
308 public override void Write (char[] value, int index, int count)
\r
315 // Sychronized version of the TextWriter.
\r
318 internal class SynchronizedWriter : TextWriter {
\r
319 private TextWriter writer;
\r
320 private bool neverClose;
\r
322 public SynchronizedWriter (TextWriter writer)
\r
323 : this (writer, false)
\r
327 public SynchronizedWriter (TextWriter writer, bool neverClose)
\r
329 this.writer = writer;
\r
330 this.neverClose = neverClose;
\r
333 public override void Close ()
\r
342 public override void Flush ()
\r
349 #region Write methods
\r
350 public override void Write (bool value)
\r
353 writer.Write (value);
\r
357 public override void Write (char value)
\r
360 writer.Write (value);
\r
364 public override void Write (char [] value)
\r
367 writer.Write (value);
\r
371 public override void Write (Decimal value)
\r
374 writer.Write (value);
\r
378 public override void Write (int value)
\r
381 writer.Write (value);
\r
385 public override void Write (long value)
\r
388 writer.Write (value);
\r
392 public override void Write (object value)
\r
395 writer.Write (value);
\r
399 public override void Write (float value)
\r
402 writer.Write (value);
\r
406 public override void Write (string value)
\r
409 writer.Write (value);
\r
413 public override void Write (uint value)
\r
416 writer.Write (value);
\r
420 public override void Write (ulong value)
\r
423 writer.Write (value);
\r
427 public override void Write (string format, object value)
\r
430 writer.Write (format, value);
\r
434 public override void Write (string format, object [] value)
\r
437 writer.Write (format, value);
\r
441 public override void Write (char [] buffer, int index, int count)
\r
444 writer.Write (buffer, index, count);
\r
448 public override void Write (string format, object arg0, object arg1)
\r
451 writer.Write (format, arg0, arg1);
\r
455 public override void Write (string format, object arg0, object arg1, object arg2)
\r
458 writer.Write (format, arg0, arg1, arg2);
\r
462 #region WriteLine methods
\r
463 public override void WriteLine ()
\r
466 writer.WriteLine ();
\r
470 public override void WriteLine (bool value)
\r
473 writer.WriteLine (value);
\r
477 public override void WriteLine (char value)
\r
480 writer.WriteLine (value);
\r
484 public override void WriteLine (char [] value)
\r
487 writer.WriteLine (value);
\r
491 public override void WriteLine (Decimal value)
\r
494 writer.WriteLine (value);
\r
498 public override void WriteLine (double value)
\r
501 writer.WriteLine (value);
\r
505 public override void WriteLine (int value)
\r
508 writer.WriteLine (value);
\r
512 public override void WriteLine (long value)
\r
515 writer.WriteLine (value);
\r
519 public override void WriteLine (object value)
\r
522 writer.WriteLine (value);
\r
526 public override void WriteLine (float value)
\r
529 writer.WriteLine (value);
\r
533 public override void WriteLine (string value)
\r
536 writer.WriteLine (value);
\r
540 public override void WriteLine (uint value)
\r
543 writer.WriteLine (value);
\r
547 public override void WriteLine (ulong value)
\r
550 writer.WriteLine (value);
\r
554 public override void WriteLine (string format, object value)
\r
557 writer.WriteLine (format, value);
\r
561 public override void WriteLine (string format, object [] value)
\r
564 writer.WriteLine (format, value);
\r
568 public override void WriteLine (char [] buffer, int index, int count)
\r
571 writer.WriteLine (buffer, index, count);
\r
575 public override void WriteLine (string format, object arg0, object arg1)
\r
578 writer.WriteLine (format, arg0, arg1);
\r
582 public override void WriteLine (string format, object arg0, object arg1, object arg2)
\r
585 writer.WriteLine (format, arg0, arg1, arg2);
\r
590 public override Encoding Encoding {
\r
593 return writer.Encoding;
\r
598 public override IFormatProvider FormatProvider {
\r
601 return writer.FormatProvider;
\r
606 public override string NewLine {
\r
609 return writer.NewLine;
\r
615 writer.NewLine = value;
\r