/* lp_stable.h
 * Neil Moore <neil@cs.uky.edu>
 *  4 Dec 1999
 *
 * Part of liblp.  See COPYRIGHT for copyright information.
 */
#ifndef _LP_STABLE_H_INCLUDED
#define _LP_STABLE_H_INCLUDED

#include <lp.h>

/* Constants passed to the monitor function */
#define LP_MON_CONFLICT 1
#define LP_MON_MODEL 2
#define LP_MON_EBODY 3
#define LP_MON_POSLOOPONLY 4
#define LP_MON_BACKTRACK 5
#define LP_MON_POSFAILED 6
#define LP_MON_NEGFAILED 7
#define LP_MON_BODYPROVEN 8
#define LP_MON_NOTINHEAD 9
#define LP_MON_BACKCHAIN_POS 10
#define LP_MON_BACKCHAIN_NEG 11
#define LP_MON_BACKCHAIN_POS_UNSAT 12
#define LP_MON_BACKCHAIN_NEG_UNSAT 13
#define LP_MON_GUESS 14
#define LP_MON_TEST_POS 15
#define LP_MON_TEST_NEG 16
#define LP_MON_TEST_END 17
#define LP_MON_FORCED_POS 18
#define LP_MON_FORCED_NEG 19

#define LP_MON_NOTINCLOSURE LP_MON_POSLOOPONLY

int lp_stable(struct lp *p, int (*callback)(struct lp *,int *), int *strata, int nstr);
void lp_stable_options(int sloppy, int source, void (*monitor)(struct lp *, int, int, int));
void lp_stable_get_options(int *sloppy, int *source, void (**monitor)(struct lp *, int, int, int));
void lp_stable_stats(int *choices, int *models, int *conflicts, int *forced, int *tried);

#endif /* _LP_STABLE_H_INCLUDED */
