2003-04-11 Ville Palo <vi64pa@kolumbus.fi>
[mono.git] / mcs / class / corlib / System.IO / StringWriter.cs
1 //\r
2 // System.IO.StringWriter\r
3 //\r
4 // Author: Marcin Szczepanski (marcins@zipworld.com.au)\r
5 //\r
6 \r
7 using System.Text;\r
8 \r
9 namespace System.IO {\r
10                 [Serializable]\r
11         public class StringWriter : TextWriter {\r
12                 \r
13                 private StringBuilder internalString;\r
14 \r
15                 public StringWriter() {\r
16                         internalString = new StringBuilder();\r
17                 }\r
18 \r
19                 public StringWriter( IFormatProvider formatProvider ) {\r
20                         internalFormatProvider = formatProvider;\r
21                 }\r
22 \r
23                 public StringWriter( StringBuilder sb ) : this (sb, null) {\r
24 \r
25                 }\r
26 \r
27                 public StringWriter( StringBuilder sb, IFormatProvider formatProvider ) {\r
28                         \r
29                         if (sb == null)\r
30                                 throw new ArgumentNullException ();\r
31 \r
32                         internalString = sb;\r
33                         internalFormatProvider = formatProvider;\r
34                 }\r
35 \r
36                 public override System.Text.Encoding Encoding {\r
37                         get {\r
38                                 return System.Text.Encoding.Unicode;\r
39                         }\r
40                 }\r
41 \r
42                 public override void Close() {\r
43                         Dispose( true );\r
44                 }\r
45 \r
46                 protected override void Dispose (bool disposing)\r
47                 {\r
48                         // MS.NET doesn't clear internal buffer.\r
49                         // internalString = null;\r
50                         base.Dispose (disposing);\r
51                 }\r
52 \r
53                 public virtual StringBuilder GetStringBuilder() {\r
54                         return internalString;\r
55                 }\r
56 \r
57                 public override string ToString() {\r
58                         return internalString.ToString();\r
59                 }\r
60 \r
61                 public override void Write( char value ) {\r
62                         internalString.Append( value );\r
63                 }\r
64 \r
65                 public override void Write( string value ) {\r
66                         internalString.Append( value );\r
67                 }\r
68 \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
76                         }\r
77                         \r
78                         char[] writeBuffer = new char[ count ];\r
79 \r
80                         Array.Copy( buffer, index, writeBuffer, 0, count );\r
81 \r
82                         internalString.Append( writeBuffer );\r
83                 }\r
84                           \r
85         }\r
86 }\r
87                         \r
88                         \r