1 // =================================
  2 // Copyright (c) 2022 Seppo Laakko
  3 // Distributed under the MIT license
  4 // =================================
  5 
  6 using System.IO;
  7 
  8 namespace System
  9 {
 10     public static class Console
 11     {
 12         static nothrow Console() : 
 13             in(SharedPtr<Stream>(new FileStream(stdin)))
 14             out(SharedPtr<Stream>(new FileStream(stdout)))
 15             err(SharedPtr<Stream>(new FileStream(stderr)))
 16         {
 17             if (!in.GetStream()->IsConsole())
 18             {
 19                 in = StreamReader(SharedPtr<Stream>(new BufferedStream(SharedPtr<Stream>(new FileStream(stdin)))));
 20             }
 21             if (!out.GetStream()->IsConsole())
 22             {
 23                 out = StreamWriter(SharedPtr<Stream>(new BufferedStream(SharedPtr<Stream>(new FileStream(stdout)))));
 24             }
 25             if (!err.GetStream()->IsConsole())
 26             {
 27                 err = StreamWriter(SharedPtr<Stream>(new BufferedStream(SharedPtr<Stream>(new FileStream(stderr)))));
 28             }
 29         }
 30         public static void Write(const char* s)
 31         {
 32             out.Write(s);
 33         }
 34         public static void Write(const wchar* s)
 35         {
 36             out.Write(s);
 37         }
 38         public static void Write(const uchar* s)
 39         {
 40             out.Write(s);
 41         }
 42         public static void Write(const string& s)
 43         {
 44             out.Write(s);
 45         }
 46         public static void Write(const wstring& s)
 47         {
 48             out.Write(s);
 49         }
 50         public static void Write(const ustring& s)
 51         {
 52             out.Write(s);
 53         }
 54         public static void Write(bool b)
 55         {
 56             out.Write(b);
 57         }
 58         public static void Write(char c)
 59         {
 60             out.Write(c);
 61         }
 62         public static void Write(wchar w)
 63         {
 64             out.Write(w);
 65         }
 66         public static void Write(uchar u)
 67         {
 68             out.Write(u);
 69         }
 70         public static void Write(sbyte s)
 71         {
 72             out.Write(s);
 73         }
 74         public static void Write(byte b)
 75         {
 76             out.Write(b);
 77         }
 78         public static void Write(short s)
 79         {
 80             out.Write(s);
 81         }
 82         public static void Write(ushort u)
 83         {
 84             out.Write(u);
 85         }
 86         public static void Write(int i)
 87         {
 88             out.Write(i);
 89         }
 90         public static void Write(uint u)
 91         {
 92             out.Write(u);
 93         }
 94         public static void Write(long l)
 95         {
 96             out.Write(l);
 97         }
 98         public static void Write(ulong u)
 99         {
100             out.Write(u);
101         }
102         public static void Write(float f)
103         {
104             out.Write(f);
105         }
106         public static void Write(double d)
107         {
108             out.Write(d);
109         }
110         public static void Write(const Date& date)
111         {
112             out.Write(date);
113         }
114         public static void Write(const DateTime& dateTime)
115         {
116             out.Write(dateTime);
117         }
118         public static void WriteLine()
119         {
120             out.WriteLine();
121         }
122         public static void WriteLine(const char* s)
123         {
124             out.WriteLine(s);
125         }
126         public static void WriteLine(const wchar* s)
127         {
128             out.WriteLine(s);
129         }
130         public static void WriteLine(const uchar* s)
131         {
132             out.WriteLine(s);
133         }
134         public static void WriteLine(const string& s)
135         {
136             out.WriteLine(s);
137         }
138         public static void WriteLine(const wstring& s)
139         {
140             out.WriteLine(s);
141         }
142         public static void WriteLine(const ustring& s)
143         {
144             out.WriteLine(s);
145         }
146         public static void WriteLine(bool b)
147         {
148             out.WriteLine(b);
149         }
150         public static void WriteLine(char x)
151         {
152             out.WriteLine(x);
153         }
154         public static void WriteLine(wchar x)
155         {
156             out.WriteLine(x);
157         }
158         public static void WriteLine(uchar x)
159         {
160             out.WriteLine(x);
161         }
162         public static void WriteLine(sbyte s)
163         {
164             out.WriteLine(s);
165         }
166         public static void WriteLine(byte b)
167         {
168             out.WriteLine(b);
169         }
170         public static void WriteLine(short s)
171         {
172             out.WriteLine(s);
173         }
174         public static void WriteLine(ushort u)
175         {
176             out.WriteLine(u);
177         }
178         public static void WriteLine(int i)
179         {
180             out.WriteLine(i);
181         }
182         public static void WriteLine(uint u)
183         {
184             out.WriteLine(u);
185         }
186         public static void WriteLine(long l)
187         {
188             out.WriteLine(l);
189         }
190         public static void WriteLine(ulong u)
191         {
192             out.WriteLine(u);
193         }
194         public static void WriteLine(float f)
195         {
196             out.WriteLine(f);
197         }
198         public static void WriteLine(double d)
199         {
200             out.WriteLine(d);
201         }
202         public static void WriteLine(const Date& date)
203         {
204             out.WriteLine(date);
205         }
206         public static void WriteLine(const DateTime& dateTime)
207         {
208             out.WriteLine(dateTime);
209         }
210         public static int Read()
211         {
212             return in.Read();
213         }
214         public static string ReadLine()
215         {
216             return in.ReadLine();
217         }
218         public static string ReadToEnd()
219         {
220             return in.ReadToEnd();
221         }
222         public static nothrow StreamReader& In()
223         {
224             return in;
225         }
226         public static nothrow StreamWriter& Out()
227         {
228             return out;
229         }
230         public static nothrow StreamWriter& Error()
231         {
232             return err;
233         }
234         public static nothrow void SetIn(StreamReader&& in_)
235         {
236             in = in_;
237         }
238         public static nothrow void SetOut(StreamWriter&& out_)
239         {
240             out = out_;
241         }
242         public static nothrow void SetError(StreamWriter&& err_)
243         {
244             err = err_;
245         }
246         private static StreamReader in;
247         private static StreamWriter out;
248         private static StreamWriter err;
249     }
250 
251     public class Endl
252     {
253         public nothrow Endl()
254         {
255         }
256     }
257 
258     public nothrow Endl endl()
259     {
260         return Endl();
261     }
262 }