#ifndef __CodeTreeInterfaces__
#define __CodeTreeInterfaces__
#include "Forwards.hpp"
#include "TermCodeTree.hpp"
#include "ClauseCodeTree.hpp"
#include "Index.hpp"
#include "TermIndexingStructure.hpp"
namespace Indexing
{
using namespace Kernel;
using namespace Lib;
template<class Data>
class CodeTreeTIS : public TermIndexingStructure<Data>
{
public:
void handle(Data data, bool insert) final
{
if (insert) {
auto ti = new Data(std::move(data));
_ct.insert(ti);
} else {
_ct.remove(data);
}
}
VirtualIterator<QueryRes<ResultSubstitutionSP, Data>> getGeneralizations(TypedTermList t, bool retrieveSubstitutions = true) final ;
bool generalizationExists(TermList t) final ;
VirtualIterator<QueryRes<AbstractingUnifier*, Data>> getUwa(TypedTermList t, Options::UnificationWithAbstraction, bool fixedPointIteration) override { NOT_IMPLEMENTED; }
void output(std::ostream& out) const final { out << _ct; }
private:
class ResultIterator;
TermCodeTree<Data> _ct;
};
class CodeTreeSubsumptionIndex
: public Index
{
public:
CodeTreeSubsumptionIndex(SaturationAlgorithm&) {}
ClauseCodeTree* getClauseCodeTree() { return &_ct; }
protected:
void handleClause(Clause* c, bool adding) override;
private:
ClauseCodeTree _ct;
};
};
#endif