#include <algorithm>
#include "LiteralMiniIndex.hpp"
namespace Indexing
{
using namespace Lib;
using namespace Kernel;
bool LiteralMiniIndex::literalHeaderComparator(const Entry& e1, const Entry& e2)
{
return e1._header<e2._header || ( e1._header==e2._header && e1._weight<e2._weight );
}
void LiteralMiniIndex::init(Clause* cl)
{
_cnt = cl->length();
_entries.ensure(cl->length()+1);
init(cl->literals());
}
LiteralMiniIndex::LiteralMiniIndex(Clause* cl)
: _cnt(cl->length()), _entries(cl->length()+1)
{
init(cl->literals());
}
LiteralMiniIndex::LiteralMiniIndex(Literal* const * lits, unsigned length)
: _cnt(length), _entries(length+1)
{
init(lits);
}
void LiteralMiniIndex::init(Literal* const * lits)
{
ASS_G(_cnt, 0);
for(unsigned i=0;i<_cnt;i++) {
_entries[i].init(lits[i]);
}
_entries[_cnt].initTerminal();
std::sort(_entries.begin(), _entries.end()-1,literalHeaderComparator);
}
}