From: Mikko Rasa Date: Sun, 31 Oct 2021 18:04:27 +0000 (+0200) Subject: Remove the broken IO::Filtered class X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=f832af5e832a5be2804e5613a73e7cc75428956c;p=libs%2Fcore.git Remove the broken IO::Filtered class --- diff --git a/source/io/file.h b/source/io/file.h index 36f3770..292897b 100644 --- a/source/io/file.h +++ b/source/io/file.h @@ -4,7 +4,6 @@ #include #include #include "buffered.h" -#include "filtered.h" #include "handle.h" #include "seekable.h" diff --git a/source/io/filtered.h b/source/io/filtered.h deleted file mode 100644 index 2092743..0000000 --- a/source/io/filtered.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef MSP_IO_FILTERED_H_ -#define MSP_IO_FILTERED_H_ - -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 -{ -private: - struct Activator - { - Filtered &f; - - Activator(Filtered &f_): f(f_) { f.active = true; } - ~Activator() { f.active = false; } - }; - - F filter; - bool active; - -public: - Filtered(): filter(*this), active(false) { } - ~Filtered() { active = true; } - - template - Filtered(A0 a0): B(a0), filter(*this), active(false) { } - - template - Filtered(A0 a0, A1 a1): B(a0, a1), filter(*this), active(false) { } - -protected: - virtual unsigned do_write(const char *b, unsigned s) - { - if(!active) - { - Activator a(*this); - return filter.write(b, s); - } - else - return B::do_write(b, s); - } - - virtual unsigned do_read(char *b, unsigned s) - { - if(!active) - { - Activator a(*this); - return filter.read(b, s); - } - else - return B::do_read(b, s); - } - -public: - 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; } -}; - -} // namespace IO -} // namespace Msp - -#endif