2 // System.IO.StringWriter
\r
4 // Author: Marcin Szczepanski (marcins@zipworld.com.au)
\r
9 namespace System.IO {
\r
11 public class StringWriter : TextWriter {
\r
13 private StringBuilder internalString;
\r
15 public StringWriter() {
\r
16 internalString = new StringBuilder();
\r
19 public StringWriter( IFormatProvider formatProvider ) {
\r
20 internalFormatProvider = formatProvider;
\r
23 public StringWriter( StringBuilder sb ) : this (sb, null) {
\r
27 public StringWriter( StringBuilder sb, IFormatProvider formatProvider ) {
\r
30 throw new ArgumentNullException ();
\r
32 internalString = sb;
\r
33 internalFormatProvider = formatProvider;
\r
36 public override System.Text.Encoding Encoding {
\r
38 return System.Text.Encoding.Unicode;
\r
42 public override void Close() {
\r
46 protected override void Dispose (bool disposing)
\r
48 // MS.NET doesn't clear internal buffer.
\r
49 // internalString = null;
\r
50 base.Dispose (disposing);
\r
53 public virtual StringBuilder GetStringBuilder() {
\r
54 return internalString;
\r
57 public override string ToString() {
\r
58 return internalString.ToString();
\r
61 public override void Write( char value ) {
\r
62 internalString.Append( value );
\r
65 public override void Write( string value ) {
\r
66 internalString.Append( value );
\r
69 public override void Write( char[] buffer, int index, int count ) {
\r
70 if( buffer == null ) {
\r
71 throw new ArgumentNullException();
\r
72 } else if( index < 0 || count < 0 ) {
\r
73 throw new ArgumentOutOfRangeException();
\r
74 } else if( index > buffer.Length || index + count > buffer.Length ) {
\r
75 throw new ArgumentException();
\r
78 char[] writeBuffer = new char[ count ];
\r
80 Array.Copy( buffer, index, writeBuffer, 0, count );
\r
82 internalString.Append( writeBuffer );
\r