#ifndef __QBF_BIOP_H__
#define __QBF_BIOP_H__

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

class QBF_Logical : public QBF
{
public:
    // member 
    logical_operator op_type;
    std::vector<QBF*>* qbf_vector;
    bool qbf_sorted;
    
    // constructor
    QBF_Logical(logical_operator log_op, std::vector<QBF*>* qbf_vector);
    ~QBF_Logical(void);

    // method
    virtual std::string toString();
    virtual void update();
    virtual bool eval();
    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
