// Adds a predicate to our list of predicates, deep copying newPredicate into a freshly allocated Predicate object. void TimeStepInfo::addPredicate(Predicate& newPredicate) { if(predicates == NULL) { allocatePredicates(); } std::string tempStrName = ""; // Create a new predicate and copy the information. Predicate *newPred = new Predicate(); tempStrName = newPredicate.getName(); newPred->setName(tempStrName); newPred->setTimeStamp(newPredicate.getMainTimeStamp(), newPredicate.getSubTimeStamp()); newPred->setBlnIsHPredicate(newPredicate.getBlnIsHPredicate()); newPred->setBlnIsNegated(newPredicate.getBlnIsNegated()); newPred->setConstType(newPredicate.getConstType()); // Insert the new predicate in the appropriate place. if(predicates->empty()) { // If we don't have predicates yet, make this the first. predicates->push_back(newPred); } else { // If we already have predicates, find this new one's proper place and stick it there. std::list<Predicate*>::iterator lIter = predicates->begin(); int compareResult = 0; while(lIter != predicates->end()) { tempStrName = (*lIter)->toPredicateString(false, false); compareResult = tempStrName.compare(newPredicate.getName()); if(compareResult < 0 || compareResult == 0) { // If the current element comes before the newcomer (or is the same as the newcomer), move on. ++lIter; } else { // The current element should go after the newcomer, break and insert here. break; } } predicates->insert(lIter, newPred); } }
bool ColouredGraphNodePredicates::isEquivalentTo(const Predicate& predicate, int invariables, const std::vector<const Object*>& objects) const { if (predicate.getName() != predicates_->getName() || predicate.getArity() != predicates_->getArity() || invariables != invariables_ || objects_.size() != objects.size()) { return false; } for (unsigned int i = 0; i < objects.size(); ++i) { if ((int)i != invariables && objects[i] != objects_[i]) { return false; } } return true; }
bool Predicate::operator ==(Predicate& p) { return strcmp(p.getName().c_str(),this->getName().c_str())==0 && p.getArity()==this->getArity(); }