X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Ffiltered.h;h=209274361e4432ca6608d4eb1112786c5b84e100;hp=0d323ecea69667e57c9c148a163837d7a2237149;hb=7b81490ae4ed6c7c8566f889d146677827f5d4a5;hpb=6e0fd758970bcb5bad5e3f2454b694cc4d7b4b66 diff --git a/source/io/filtered.h b/source/io/filtered.h index 0d323ec..2092743 100644 --- a/source/io/filtered.h +++ b/source/io/filtered.h @@ -4,6 +4,11 @@ namespace Msp { namespace IO { +/** +This class is broken by design. Do not use. It exposes base class methods in +an unsafe and misleading way. In particular, a Filtered causes +seeks to behave incorrectly. +*/ template class Filtered: public B { @@ -53,9 +58,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; } };