X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Ffiltered.h;h=a4a43192b4b2c166dbf4952e3dfff4ee9aad270e;hb=7a493cb73ff5f5f820d4873d6c993d0e9c5a580a;hp=0d323ecea69667e57c9c148a163837d7a2237149;hpb=d16185720fa344263367dbd50c61bfc8183d99a4;p=libs%2Fcore.git diff --git a/source/io/filtered.h b/source/io/filtered.h index 0d323ec..a4a4319 100644 --- a/source/io/filtered.h +++ b/source/io/filtered.h @@ -4,6 +4,7 @@ namespace Msp { namespace IO { +// XXX This needs a redesign template class Filtered: public B { @@ -53,9 +54,32 @@ protected: } public: - virtual unsigned put(char c) { return filter.put(c); } - virtual bool getline(std::string &l) { return filter.getline(l); } - virtual int get() { return filter.get(); } + virtual unsigned put(char c) + { + if(active) + return B::put(c); + + Activator a(*this); + return filter.put(c); + } + + virtual bool getline(std::string &l) + { + if(active) + return B::getline(l); + + Activator a(*this); + return filter.getline(l); + } + + virtual int get() + { + if(active) + return B::get(); + + Activator a(*this); + return filter.get(); + } F &get_filter() { return filter; } };