#ifndef _level_hpp_INCLUDED
#define _level_hpp_INCLUDED

#include <climits>

namespace CaDiCaL {

// For each new decision we increase the decision level and push a 'Level'
// on the 'control' stack.  The information gathered here is used in
// 'reuse_trail' and for early aborts in clause minimization.

struct Level {

  int decision; // decision literal of this level
  int trail;    // trail start of this level

  struct {
    int count; // how many variables seen during 'analyze'
    int trail; // smallest trail position seen on this level
  } seen;

  void reset () {
    seen.count = 0;
    seen.trail = INT_MAX;
  }

  Level (int d, int t) : decision (d), trail (t) { reset (); }
  Level () {}
};

} // namespace CaDiCaL

#endif
