-#if defined(_MSC_VER)
- struct _timeb t;
- _ftime(&t);
- return int(t.time * 1000 + t.millitm);
-#else
- struct timeval t;
- gettimeofday(&t, NULL);
- return t.tv_sec * 1000 + t.tv_usec / 1000;
-#endif
+ int uflow() {
+
+ int c = stream_buf->sbumpc();
+
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ file.rdbuf()->sputc(traits_type::to_char_type(c));
+
+ return traits_type::not_eof(c);
+ }
+
+ ios& stream;
+ ofstream& file;
+ streambuf* stream_buf;
+};
+
+class Logger {
+public:
+ Logger() : in(cin, file), out(cout, file) {}
+ ~Logger() { set(false); }
+
+ void set(bool b) {
+
+ if (b && !file.is_open())
+ {
+ file.open("io_log.txt", ifstream::out | ifstream::app);
+ in.set(true);
+ out.set(true);
+ }
+ else if (!b && file.is_open())
+ {
+ out.set(false);
+ in.set(false);
+ file.close();
+ }
+ }
+
+private:
+ Tee in, out;
+ ofstream file;
+};
+
+void logger_set(bool b) {
+
+ static Logger l;
+ l.set(b);