// Copyright (C) 2010, Guy Barrand. All rights reserved.
// See the file tools.license for terms.

#ifndef tools_sg_visible_action
#define tools_sg_visible_action

#include "matrix_action"

namespace tools {
namespace sg {

class visible_action : public matrix_action {
  TOOLS_ACTION(visible_action,tools::sg::visible_action,matrix_action)
public:
  visible_action(std::ostream& a_out,unsigned int a_ww,unsigned int a_wh)
  :parent(a_out,a_ww,a_wh)
  ,m_count(0)
  {}
  virtual ~visible_action(){}
public:
  visible_action(const visible_action& a_from)
  :parent(a_from)
  ,m_count(0)
  {}
  visible_action& operator=(const visible_action& a_from){
    parent::operator=(a_from);
    m_count = 0;
    return *this;
  }
public:
  void reset() {m_count = 0;}

  void increment() {m_count++;}
  unsigned int count() const {return m_count;}
protected:
  unsigned int m_count;
};

}}

#endif
