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

#ifndef tools_sg_read_action
#define tools_sg_read_action

#include "action"
#include "ifield_factory"

namespace tools {
namespace io {
  class irbuf;
}}

namespace tools {
namespace sg {
  class node_desc;
}}

namespace tools {
namespace sg {

class read_action : public action {
  TOOLS_ACTION_NO_COPY(read_action,tools::sg::read_action,action)
public:
  virtual io::irbuf& buffer() = 0;
  virtual bool get_node_desc(const std::string&,node_desc&) const = 0;
  virtual const ifield_factory& field_factory() const = 0;
public:
  read_action(std::ostream& a_out)
  :action(a_out){}
  virtual ~read_action(){}
protected:
  read_action(const read_action& a_from)
  :action(a_from)
  {}
  read_action& operator=(const read_action& a_from){
    action::operator=(a_from);
    return *this;
  }
};

}}

#endif
