runner


  class runner {
  public:
  runner(char *s, runner *x = 0) : str(s), _runner(x) { }
  virtual void process(attribute& p) { }
  virtual void run() {
          string_converter cv(str);
          for( int i = 1; i <= cv.argc(); i++ ) {
                  attribute p( cv[i] );
                  self()->process(p);
                  }
          }
  virtual void execute(ostream&) { }
  virtual int operator()(ostream& out) {
          self()->run(); 
          self()->execute(out);
          return 1;
          }
  
  virtual runner* self() { return _runner?_runner:this; }
  
  private:
  char* str;
  runner* _runner;
  };

slide: runner