1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2026 Richard QIn
*/
#ifndef _IOSTREAM
#define _IOSTREAM
#include "stdio.h"
namespace std
{
class ostream
{
private:
FILE* _stream;
public:
ostream(FILE* f) : _stream(f) {}
ostream& operator<<(const char* str)
{
fprintf(_stream, "%s", str);
return *this;
}
ostream& operator<<(int n)
{
fprintf(_stream, "%d", n);
return *this;
}
ostream &operator<<(long n)
{
fprintf(_stream, "%ld", n);
return *this;
}
ostream &operator<<(long long n)
{
fprintf(_stream, "%lld", n);
return *this;
}
ostream &operator<<(double f)
{
fprintf(_stream, "%f", f);
return *this;
}
ostream &operator<<(char c)
{
fputc(c, _stream);
return *this;
}
ostream &operator<<(void *p)
{
fprintf(_stream, "%p", p);
return *this;
}
ostream &operator<<(ostream &(*func)(ostream &))
{
return func(*this);
}
ostream &flush()
{
fflush(_stream);
return *this;
}
};
class istream{
private:
FILE* _stream;
public:
istream(FILE *f) : _stream(f) {}
istream& operator>>(int n)
{
fscanf(_stream, "%d", n);
return *this;
}
istream &operator>>(double &f)
{
fscanf(_stream, "%lf", &f);
return *this;
}
istream &operator>>(char *str)
{
fscanf(_stream, "%s", str);
return *this;
}
istream &operator>>(char &c)
{
char tmp[2];
fscanf(_stream, " %c", tmp);
c = tmp[0];
return *this;
}
};
inline ostream &endl(ostream &os)
{
os << '\n';
os.flush();
return os;
}
}
#endif
|