#ifndef CONSOLE_H_
#define CONSOLE_H_

#include <distributions/DistTab.h>
#include <functions/FuncTab.h>
#include <model/BUGSModel.h>
#include <model/SymTab.h>
#include <compiler/ParseTree.h>

#include <iostream>
#include <string>
#include <map>

class Console {
  std::ostream &_out;
  std::ostream &_err;
  FuncTab _functab;
  DistTab _disttab;
  BUGSModel *_model;
  std::vector<ParseTree*> *_pvariables;
  ParseTree *_prelations;
  ParseTree *_pdata;
  unsigned int _iteration;
  void clearModel();
public:
  Console(std::ostream &out, std::ostream &err);
  ~Console();
  bool checkModel(std::string const &filename);
  void compile(std::map<std::string, SArray> &data_table,
	       unsigned int nchain = 1);
  bool setParameters(std::map<std::string, SArray> const &init_table,
		     unsigned int chain);
  bool initialize();
  bool update (long n);
  bool setMonitor(std::string const &name, Range const &range,
		  unsigned int thin); 
  bool setMonitor(std::string const &name, unsigned int thin); 
  bool clearMonitor(std::string const &name, Range const &range);
  bool clearMonitor(std::string const &name);
  bool dumpState(std::map<std::string,SArray> &data_table, unsigned int chain, 
		 bool observed);
  unsigned long iter();
  bool coda(std::ofstream &index, std::ofstream &output);
  bool coda(std::string const &name, 
	    std::ofstream &index, std::ofstream &output);
  bool coda(std::string const &name, Range const &range, 
	    std::ofstream &index, std::ofstream &output);
  void setSeed(unsigned int seed);
  BUGSModel const *model();
};

#endif /* CONSOLE_H_ */


syntax highlighted by Code2HTML, v. 0.9.1