Public Member Functions | |
Predicate (const PredicateTemplate *const &pt) | |
Predicate (const PredicateTemplate *const &pt, Clause *const &parent) | |
Predicate (const Predicate &p) | |
Predicate (const Predicate &p, Clause *const &par) | |
~Predicate () | |
double | sizeMB () const |
void | compress () |
bool | isEqualPred () const |
bool | isEqualPredWithType () const |
bool | isEmptyPred () const |
bool | isInternalPred () const |
bool | isInternalPredWithoutType () const |
void | canonicalize () |
void | appendTerm (Term *const &term) |
Term * | removeLastTerm () |
Removes the last term in the predicate. | |
bool | getSense () const |
void | setSense (const bool &s) |
void | invertSense () |
TruthValue | getTruthValue () const |
void | setTruthValue (const TruthValue &tv) |
string | getTruthValueAsStr () const |
double | getNumGroundingsIfAllVarDiff (const Domain *const &domain) const |
void | createAllGroundingsIfAllVarDiff (const Domain *const &domain, Array< Predicate * > &returnArray) |
void | createAllGroundings (const Domain *const &domain, Array< Predicate * > &returnArray) |
void | createAllGroundings (const Domain *const &domain, Array< int * > &returnArray) |
void | getGroundingNumber (const Domain *const &domain, Array< Predicate * > &returnArray, const int &grounding) |
Generates exactly one grounding of this predicate. | |
int | getNumTerms () const |
const Term * | getTerm (const int &idx) const |
void | setTermToConstant (const int &termNum, const int &constId) |
bool | containsConstant (const int &constId) const |
bool | containsConstants () const |
Checks if this predicate contains at least one constant. | |
void | setTemplate (PredicateTemplate *const &t) |
const PredicateTemplate * | getTemplate () const |
const char * | getName () const |
int | getId () const |
const char * | getTermTypeAsStr (const int &idx) const |
int | getTermTypeAsInt (const int &idx) const |
bool | allTermsAreDiffVars () |
bool | checkAllTermsAreDiffVars () |
bool | isGrounded () |
bool | canBeGroundedAs (Predicate *const &partGndPred) |
Checks if this predicate can be grounded as another (potentially) partially grounded predicate. | |
bool | canBeGroundedAs (const GroundPredicate *const &gndPred) |
Array< int > * | getPredicateConstants (Array< int > *const &constants) |
Array< int > * | getPredicateConstants () |
void | setDirty () |
bool | isDirty () const |
void | setParent (Clause *const &parent) |
Clause * | getParent () const |
bool | isIndexable (bool posClause) |
void | createVarsTypeIdArr (Array< VarsTypeId * > *&varsTypeIdArr) |
void | deleteVarsTypeIdArr (Array< VarsTypeId * > *&varsTypeIdArr) |
bool | same (Predicate *const &p) |
bool | same (const GroundPredicate *const &gp) |
void | appendIntArrRep (Array< int > &rep) |
size_t | hashCode () |
ostream & | printAsInt (ostream &out) const |
ostream & | printWithStrVar (ostream &out, const Domain *const &domain) const |
ostream & | print (ostream &out, const Domain *const &domain) const |
Static Public Member Functions | |
static void | computeFixedSizeB () |
static void | createAllGroundings (const int &predId, const Domain *const &domain, Array< Predicate * > &returnArray) |
static void | createAllGroundingsUnifyingWithTerm (const int &predId, const Domain *const &domain, Array< Predicate * > &returnArray, int termTypeId, int termVal) |
Definition at line 88 of file predicate.h.
Term* Predicate::removeLastTerm | ( | ) | [inline] |
Removes the last term in the predicate.
The template is not changed and terms_ is compressed. Returned Term* no longer belongs to the predicate and caller is responsible for deleting it.
Definition at line 186 of file predicate.h.
References Array< Type >::compress(), Array< Type >::removeLastItem(), and setDirty().
00187 { 00188 Term* term = terms_->removeLastItem(); 00189 terms_->compress(); 00190 setDirty(); 00191 return term; 00192 }
void Predicate::getGroundingNumber | ( | const Domain *const & | domain, | |
Array< Predicate * > & | returnArray, | |||
const int & | grounding | |||
) | [inline] |
Generates exactly one grounding of this predicate.
domain | Domain in which this predicate exists. | |
returnArray | The one grounding produced is placed as the only element in this Array. | |
grounding | The index of the grounding to be produced. This is the grounding-th combination of constants. |
Definition at line 252 of file predicate.h.
References createAllGroundings().
Referenced by Domain::getPredInBlock().
00254 { createAllGroundings(domain, &returnArray, NULL, grounding); }
bool Predicate::containsConstants | ( | ) | const [inline] |
Checks if this predicate contains at least one constant.
Definition at line 288 of file predicate.h.
References Array< Type >::size().
Referenced by Database::getIndexedGndings().
00289 { 00290 for (int i = 0; i < terms_->size(); i++) 00291 { 00292 Term* t = (*terms_)[i]; 00293 if (t->getType() == Term::CONSTANT) return true; 00294 } 00295 return false; 00296 }
bool Predicate::canBeGroundedAs | ( | Predicate *const & | partGndPred | ) | [inline] |
Checks if this predicate can be grounded as another (potentially) partially grounded predicate.
partGndPred | Partially grounded predicate to which this predicate is being compared. |
Definition at line 372 of file predicate.h.
References allTermsAreDiffVars(), getId(), PredicateTemplate::getId(), isGrounded(), same(), and Array< Type >::size().
00373 { 00374 //assert(partGndPred->isGrounded()); 00375 if (template_->getId() != partGndPred->getId()) return false; 00376 if (allTermsAreDiffVars()) return true; 00377 if (isGrounded() && partGndPred->isGrounded()) return same(partGndPred); 00378 00379 int varGndings[MAX_VAR]; 00380 memset(varGndings, -1, MAX_VAR*sizeof(int)); 00381 for (int i = 0; i < terms_->size(); i++) 00382 { 00383 int termType = (*terms_)[i]->getType(); 00384 00385 if (termType == Term::CONSTANT) 00386 { 00387 if ((*terms_)[i]->getId() != partGndPred->getTerm(i)->getId()) 00388 return false; 00389 } 00390 else 00391 if (termType == Term::VARIABLE) 00392 { 00393 int varId = -(*terms_)[i]->getId(); 00394 assert(varId > 0); 00395 assert(varId < MAX_VAR); 00396 if (varGndings[varId] < 0) // if variable has not been grounded 00397 varGndings[varId] = partGndPred->getTerm(i)->getId(); 00398 else 00399 if (varGndings[varId] != partGndPred->getTerm(i)->getId()) 00400 return false; 00401 } 00402 else 00403 { 00404 assert(false); 00405 } 00406 } 00407 return true; 00408 }