#ifndef _flags_h_INCLUDED
#define _flags_h_INCLUDED

#include <stdbool.h>

typedef struct flags flags;

struct flags {
  bool active : 1;
  bool backbone0 : 1;
  bool backbone1 : 1;
  bool eliminate : 1;
  bool eliminated : 1;
  unsigned factor : 2;
  bool fixed : 1;
  signed int gackbone : 2;
  bool subsume : 1;
  bool sweep : 1;
  bool transitive : 1;
};

#define FLAGS(IDX) (assert ((IDX) < VARS), (solver->flags + (IDX)))

#define ACTIVE(IDX) (FLAGS (IDX)->active)
#define ELIMINATED(IDX) (FLAGS (IDX)->eliminated)

struct kissat;

void kissat_activate_literal (struct kissat *, unsigned);
void kissat_activate_literals (struct kissat *, unsigned, unsigned *);

void kissat_mark_eliminated_variable (struct kissat *, unsigned idx);
void kissat_mark_fixed_literal (struct kissat *, unsigned lit);

void kissat_mark_added_literals (struct kissat *, unsigned, unsigned *);
void kissat_mark_removed_literals (struct kissat *, unsigned, unsigned *);

#endif
