// -*- mode: C++; c-file-style: "stroustrup"; c-basic-offset: 4; -*-
////////////////////////////////////////////////////////////////////
//
// $Id: useless.h 817 2011-09-10 13:31:09Z Sebastian Kupferschmid $
//
////////////////////////////////////////////////////////////////////

#ifndef USELESS_USELESS_H
#define USELESS_USELESS_H

#include "system_abstractor.h"

#include "search/heuristic.h"

#include <ext/hash_map>
#include <ext/slist>
#include <vector>

class Task;
class Options;
class State;
class SystemAbstractor;

class Useless : public Heuristic {
protected:
    SystemAbstractor abstr;    

    virtual int32_t isUseless(const State* state, const Transition* trans);
    virtual int32_t evalAbstracted(const State* state, const std::vector<bool>& abstracted) = 0;
public:
    Useless(const Task* task, const Options* opts);
    virtual int32_t compute(const State* state);
    virtual int32_t compute(const State* state, bool& isUseless);
};

#endif /* USELESS_USELESS_H */
