/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 2.0.8
 * 
 * This file is not intended to be easily readable and contains a number of 
 * coding conventions designed to improve portability and efficiency. Do not make
 * changes to this file unless you know what you are doing--modify the SWIG 
 * interface file instead. 
 * ----------------------------------------------------------------------------- */

#ifndef SWIG_formast_WRAP_H_
#define SWIG_formast_WRAP_H_

#include <map>
#include <string>


class SwigDirector_Visitor : public formast::Visitor, public Swig::Director {

public:
    SwigDirector_Visitor(PyObject *self);
    virtual ~SwigDirector_Visitor();
    virtual void module(formast::Module const &module);
    virtual void module_class(formast::Class const &class_);
    virtual void module_enum(formast::Enum const &enum_);
    virtual void stats(formast::Stats const &stats);
    virtual void stats_field(formast::Field const &field);
    virtual void stats_if(formast::If const &if_);
    virtual void enum_stats(formast::EnumStats const &stats);
    virtual void enum_stats_const(formast::EnumConst const &const_);
    virtual void expr(formast::Expr const &e);
    virtual void expr_uint(boost::uint64_t const &n);
    virtual void expr_id(std::string const &i);
    virtual void expr_pos(formast::Expr const &right);
    virtual void expr_neg(formast::Expr const &right);
    virtual void expr_add(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_sub(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_mul(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_div(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_mod(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_pow(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_logical_and(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_logical_or(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_logical_not(formast::Expr const &right);
    virtual void expr_bitwise_and(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_bitwise_or(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_bitwise_xor(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_compare_eq(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_compare_ne(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_compare_gt(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_compare_lt(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_compare_ge(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_compare_le(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_shift_left(formast::Expr const &left, formast::Expr const &right);
    virtual void expr_shift_right(formast::Expr const &left, formast::Expr const &right);


/* Internal Director utilities */
public:
    bool swig_get_inner(const char* swig_protected_method_name) const {
      std::map<std::string, bool>::const_iterator iv = swig_inner.find(swig_protected_method_name);
      return (iv != swig_inner.end() ? iv->second : false);
    }

    void swig_set_inner(const char* swig_protected_method_name, bool val) const
    { swig_inner[swig_protected_method_name] = val;}

private:
    mutable std::map<std::string, bool> swig_inner;


#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
/* VTable implementation */
    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
      PyObject *method = vtable[method_index];
      if (!method) {
        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
        method = PyObject_GetAttr(swig_get_self(), name);
        if (!method) {
          std::string msg = "Method in class Visitor doesn't exist, undefined ";
          msg += method_name;
          Swig::DirectorMethodException::raise(msg.c_str());
        }
        vtable[method_index] = method;
      }
      return method;
    }
private:
    mutable swig::SwigVar_PyObject vtable[33];
#endif

};


#endif
