1
2
3
4
5
6 using System;
7
8 namespace System.IO
9 {
10 public class StreamWriter : TextWriter
11 {
12 public nothrow StreamWriter(const SharedPtr<Stream>& stream_) : this(stream_, stream_->IsHostTextFile())
13 {
14 }
15 public nothrow StreamWriter(const SharedPtr<Stream>& stream_, bool expandLineEndings_) :
16 stream(stream_), expandLineEndings(expandLineEndings_)
17 {
18 }
19 public void Write(const char* x, long length)
20 {
21 if (expandLineEndings)
22 {
23 long start = 0;
24 for (long i = 0; i < length; ++i;)
25 {
26 if (x[i] == '\n')
27 {
28 if (i > start)
29 {
30 stream->Write(cast<byte*>(cast<void*>(x)) + start, i - start);
31 }
32 stream->Write(cast<byte*>(cast<void*>("\r\n")), 2);
33 start = i + 1;
34 }
35 }
36 if (length > start)
37 {
38 stream->Write(cast<byte*>(cast<void*>(x)) + start, length - start);
39 }
40 }
41 else
42 {
43 stream->Write(cast<byte*>(cast<void*>(x)), length);
44 }
45 }
46 public override void Write(const string& x)
47 {
48 Write(x.Chars(), x.Length());
49 }
50 public override void Write(const wstring& x)
51 {
52 Write(ToUtf8(x));
53 }
54 public override void Write(const ustring& x)
55 {
56 Write(ToUtf8(x));
57 }
58 public override void Write(bool x)
59 {
60 Write(ToString(x));
61 }
62 public override void Write(char x)
63 {
64 Write(ToString(x));
65 }
66 public override void Write(wchar x)
67 {
68 Write(ToString(x));
69 }
70 public override void Write(uchar x)
71 {
72 Write(ToString(x));
73 }
74 public override void Write(sbyte x)
75 {
76 Write(ToString(x));
77 }
78 public override void Write(byte x)
79 {
80 Write(ToString(x));
81 }
82 public override void Write(short x)
83 {
84 Write(ToString(x));
85 }
86 public override void Write(ushort x)
87 {
88 Write(ToString(x));
89 }
90 public override void Write(int x)
91 {
92 Write(ToString(x));
93 }
94 public override void Write(uint x)
95 {
96 Write(ToString(x));
97 }
98 public override void Write(long x)
99 {
100 Write(ToString(x));
101 }
102 public override void Write(ulong x)
103 {
104 Write(ToString(x));
105 }
106 public override void Write(float x)
107 {
108 Write(ToString(x));
109 }
110 public override void Write(double x)
111 {
112 Write(ToString(x));
113 }
114 public override void Write(const Date& date)
115 {
116 Write(date.ToString());
117 }
118 public override void Write(const DateTime& dateTime)
119 {
120 Write(dateTime.ToString());
121 }
122 public override void WriteLine()
123 {
124 Write("\n", 1);
125 }
126 public override void WriteLine(const string& x)
127 {
128 Write(x);
129 WriteLine();
130 }
131 public override void WriteLine(const wstring& x)
132 {
133 Write(x);
134 WriteLine();
135 }
136 public override void WriteLine(const ustring& x)
137 {
138 Write(x);
139 WriteLine();
140 }
141 public override void WriteLine(bool x)
142 {
143 Write(x);
144 WriteLine();
145 }
146 public override void WriteLine(char x)
147 {
148 Write(x);
149 WriteLine();
150 }
151 public override void WriteLine(wchar x)
152 {
153 Write(x);
154 WriteLine();
155 }
156 public override void WriteLine(uchar x)
157 {
158 Write(x);
159 WriteLine();
160 }
161 public override void WriteLine(sbyte x)
162 {
163 Write(x);
164 WriteLine();
165 }
166 public override void WriteLine(byte x)
167 {
168 Write(x);
169 WriteLine();
170 }
171 public override void WriteLine(short x)
172 {
173 Write(x);
174 WriteLine();
175 }
176 public override void WriteLine(ushort x)
177 {
178 Write(x);
179 WriteLine();
180 }
181 public override void WriteLine(int x)
182 {
183 Write(x);
184 WriteLine();
185 }
186 public override void WriteLine(uint x)
187 {
188 Write(x);
189 WriteLine();
190 }
191 public override void WriteLine(long x)
192 {
193 Write(x);
194 WriteLine();
195 }
196 public override void WriteLine(ulong x)
197 {
198 Write(x);
199 WriteLine();
200 }
201 public override void WriteLine(float x)
202 {
203 Write(x);
204 WriteLine();
205 }
206 public override void WriteLine(double x)
207 {
208 Write(x);
209 WriteLine();
210 }
211 public override void WriteLine(const Date& date)
212 {
213 Write(date);
214 WriteLine();
215 }
216 public override void WriteLine(const DateTime& dateTime)
217 {
218 Write(dateTime);
219 WriteLine();
220 }
221 public nothrow const SharedPtr<Stream>& GetStream() const
222 {
223 return stream;
224 }
225 public inline nothrow bool ExpandLineEndings() const
226 {
227 return expandLineEndings;
228 }
229 public inline nothrow void SetExpandLineEndings(bool expandLineEndings_)
230 {
231 expandLineEndings = expandLineEndings_;
232 }
233 private SharedPtr<Stream> stream;
234 private bool expandLineEndings;
235 }
236 }