abedbf2be42c8ee43b1606e9eaaefe722cf71ea0
[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                 private bool disposed = false;\r
15 \r
16                 public StringWriter() : this (new StringBuilder ()) {
17                         \r
18                 }\r
19 \r
20                 public StringWriter( IFormatProvider formatProvider ) : this (new StringBuilder (), formatProvider)  {
21 \r
22                 }\r
23 \r
24                 public StringWriter( StringBuilder sb ) : this (sb, null) {\r
25 \r
26                 }\r
27 \r
28                 public StringWriter( StringBuilder sb, IFormatProvider formatProvider ) {\r
29                         \r
30                         if (sb == null)\r
31                                 throw new ArgumentNullException ();\r
32 \r
33                         internalString = sb;\r
34                         internalFormatProvider = formatProvider;\r
35                 }\r
36 \r
37                 public override System.Text.Encoding Encoding {\r
38                         get {\r
39                                 return System.Text.Encoding.Unicode;\r
40                         }\r
41                 }\r
42 \r
43                 public override void Close() {\r
44                         Dispose( true );\r
45                         disposed = true;\r
46                 }\r
47 \r
48                 protected override void Dispose (bool disposing)\r
49                 {\r
50                         // MS.NET doesn't clear internal buffer.\r
51                         // internalString = null;\r
52                         base.Dispose (disposing);\r
53                         disposed = true;\r
54                 }\r
55 \r
56                 public virtual StringBuilder GetStringBuilder() {\r
57                         return internalString;\r
58                 }\r
59 \r
60                 public override string ToString() {\r
61                         return internalString.ToString();\r
62                 }\r
63 \r
64                 public override void Write( char value ) {\r
65 \r
66                         if (disposed) \r
67                                 throw new ObjectDisposedException ("StringWriter", "Cannot write to a closed StringWriter");\r
68 \r
69                         internalString.Append( value );\r
70                 }\r
71 \r
72                 public override void Write( string value ) {\r
73 \r
74                         if (disposed) \r
75                                 throw new ObjectDisposedException ("StringWriter", "Cannot write to a closed StringWriter");\r
76 \r
77                         internalString.Append( value );\r
78                 }\r
79 \r
80                 public override void Write( char[] buffer, int index, int count ) {\r
81 \r
82                         if (disposed) \r
83                                 throw new ObjectDisposedException ("StringReader", "Cannot write to a closed StringWriter");\r
84 \r
85                         if( buffer == null ) {\r
86                                 throw new ArgumentNullException();\r
87                         } else if( index < 0 || count < 0 ) {\r
88                                 throw new ArgumentOutOfRangeException();\r
89                         } else if( index > buffer.Length || index + count > buffer.Length ) {\r
90                                 throw new ArgumentException();\r
91                         }\r
92                         \r
93                         char[] writeBuffer = new char[ count ];\r
94 \r
95                         Array.Copy( buffer, index, writeBuffer, 0, count );\r
96 \r
97                         internalString.Append( writeBuffer );\r
98                 }\r
99                           \r
100         }\r
101 }\r
102                         \r
103                         \r