]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/filtered.h
Add activation check to the rest of Filtered's virtual functions
[libs/core.git] / source / io / filtered.h
index 0d323ecea69667e57c9c148a163837d7a2237149..a4a43192b4b2c166dbf4952e3dfff4ee9aad270e 100644 (file)
@@ -4,6 +4,7 @@
 namespace Msp {
 namespace IO {
 
+// XXX This needs a redesign
 template<typename B, typename F>
 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; }
 };