X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fbase.cpp;fp=source%2Fio%2Fbase.cpp;h=48de3ee56ca8e3fc304f5d4caca2fcf8a57b8a9a;hp=0000000000000000000000000000000000000000;hb=6e0fd758970bcb5bad5e3f2454b694cc4d7b4b66;hpb=b97d4e9f86e90254ab9edef7ee62a910f6333c78 diff --git a/source/io/base.cpp b/source/io/base.cpp new file mode 100644 index 0000000..48de3ee --- /dev/null +++ b/source/io/base.cpp @@ -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(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