X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fbase.cpp;h=9c2b40a1f2a9460eee16a34f6e0b08aab245786c;hb=cc541830f00cc3238edb82ff2e14e8b9060645b6;hp=48de3ee56ca8e3fc304f5d4caca2fcf8a57b8a9a;hpb=c7afef88380ebebc8c2b04e48664d73281ec8848;p=libs%2Fcore.git diff --git a/source/io/base.cpp b/source/io/base.cpp index 48de3ee..9c2b40a 100644 --- a/source/io/base.cpp +++ b/source/io/base.cpp @@ -8,13 +8,20 @@ namespace IO { Base::Base(): mode(M_READ), - events(P_NONE), - eof_flag(false) + eof_flag(false), + mutex(0) { } Base::~Base() { signal_deleted.emit(); + delete mutex; +} + +void Base::check_access(Mode m) const +{ + if(!(mode&m)) + throw invalid_access(m); } bool Base::getline(string &line) @@ -24,7 +31,7 @@ bool Base::getline(string &line) if(eof_flag) return false; - while(1) + while(!eof()) { int c = get(); if(c==-1 || c=='\n') @@ -43,18 +50,27 @@ int Base::get() return static_cast(c); } -void Base::set_events(PollEvent e) +void Base::set_eof() { - events = e; - signal_events_changed.emit(events); + if(!eof_flag) + { + eof_flag = true; + signal_end_of_file.emit(); + } } -void Base::event(PollEvent ev) + +Base::Synchronize::Synchronize(Base &i): + io(i) { - if(ev&P_INPUT) - signal_data_available.emit(); + if(!io.mutex) + io.mutex = new Mutex; + io.mutex->lock(); +} - on_event(ev); +Base::Synchronize::~Synchronize() +{ + io.mutex->unlock(); } } // namespace IO