#ifndef _factor_hpp_INCLUDED
#define _factor_hpp_INCLUDED
#include "clause.hpp"
#include "heap.hpp"
namespace CaDiCaL {
struct Internal;
struct factor_occs_size {
Internal *internal;
factor_occs_size (Internal *i) : internal (i) {}
bool operator() (unsigned a, unsigned b);
};
struct Quotient {
Quotient (int f) : factor (f) {}
~Quotient () {}
int factor;
size_t id;
int64_t bid; Quotient *prev, *next;
vector<Clause *> qlauses;
vector<size_t> matches;
size_t matched;
};
typedef heap<factor_occs_size> FactorSchedule;
struct Factoring {
Factoring (Internal *, int64_t);
~Factoring ();
Internal *internal;
int64_t limit;
FactorSchedule schedule;
int initial;
int bound;
vector<unsigned> count;
vector<int> fresh;
vector<int> counted;
vector<int> nounted;
vector<Clause *> flauses;
struct {
Quotient *first, *last;
} quotients;
};
}
#endif