class QBF_Quantified;

#ifndef __QBF_QUANTIFIED_H__
#define __QBF_QUANTIFIED_H__

#include <vector>
#include <string>
#include "qbf.hpp"
#include "variable.hpp"
#include <boost/logic/tribool.hpp>

class QBF_Quantified : public QBF
{
 public:
    // member 
    quantifier q_type;
    std::vector<Variable*>* var_vector;
    QBF* qbf;
    bool variable_ordered;
    bool preprocessed;
    
    // constructor
    QBF_Quantified(quantifier q_t, std::vector<Variable*>* vl, QBF* q);
    ~QBF_Quantified(void);

    // method 
    virtual std::string toString();
    virtual void update();
    virtual bool eval();
    bool eval(std::vector<Variable*>::iterator itr);
    virtual void propagate(unsigned long assigner_id, bool b); //
    virtual void reset_status(); //

private:
    // method
    virtual void update_prob();
    virtual void update_size();
    virtual void update_child_cost();
};
#endif
