]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/base.cpp
Move files to prepare for assimilation into core
[libs/core.git] / source / io / base.cpp
diff --git a/source/io/base.cpp b/source/io/base.cpp
new file mode 100644 (file)
index 0000000..48de3ee
--- /dev/null
@@ -0,0 +1,61 @@
+#include "base.h"
+#include "poll.h"
+
+using namespace std;
+
+namespace Msp {
+namespace IO {
+
+Base::Base():
+       mode(M_READ),
+       events(P_NONE),
+       eof_flag(false)
+{ }
+
+Base::~Base()
+{
+       signal_deleted.emit();
+}
+
+bool Base::getline(string &line)
+{
+       line.clear();
+
+       if(eof_flag)
+               return false;
+
+       while(1)
+       {
+               int c = get();
+               if(c==-1 || c=='\n')
+                       break;
+               line += c;
+       }
+
+       return !eof_flag || !line.empty();
+}
+
+int Base::get()
+{
+       char c;
+       if(do_read(&c, 1)==0)
+               return -1;
+       return static_cast<unsigned char>(c);
+}
+
+void Base::set_events(PollEvent e)
+{
+       events = e;
+       signal_events_changed.emit(events);
+}
+
+void Base::event(PollEvent ev)
+{
+       if(ev&P_INPUT)
+               signal_data_available.emit();
+
+       on_event(ev);
+}
+
+} // namespace IO
+} // namespace Msp