summaryrefslogtreecommitdiff
path: root/include/ulib/iostream
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-01-02 10:09:37 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-01-02 10:09:37 +0800
commit1c8e37f63d413a559825020289178d442537449e (patch)
tree9779a712b5eec91035272e7646eb6811979d7eab /include/ulib/iostream
parentd8eaa13f2efc1eeca4e5f230d5a2d535aaf27338 (diff)
downloadlume-1c8e37f63d413a559825020289178d442537449e.tar.gz
lume-1c8e37f63d413a559825020289178d442537449e.tar.xz
dev(sell): add simple libc and implement shell
please see the log for detail.
Diffstat (limited to 'include/ulib/iostream')
-rw-r--r--include/ulib/iostream110
1 files changed, 110 insertions, 0 deletions
diff --git a/include/ulib/iostream b/include/ulib/iostream
new file mode 100644
index 0000000..83ed74c
--- /dev/null
+++ b/include/ulib/iostream
@@ -0,0 +1,110 @@
+#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 \ No newline at end of file