Пример #1
0
// 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);
	}
}
Пример #2
0
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;
}
Пример #3
0
bool Predicate::operator ==(Predicate& p) {
	  return strcmp(p.getName().c_str(),this->getName().c_str())==0 && p.getArity()==this->getArity();
}