Represent predicate parameters explicitly

This adds a vector of Parameter structs to PredicateDeclaration. In this
way, the domain of each parameter can be tracked individually.
This commit is contained in:
2018-04-19 16:35:37 +02:00
parent 159717f51c
commit 7bde7c498f
6 changed files with 23 additions and 13 deletions

View File

@@ -245,9 +245,14 @@ struct PredicateDeclaration
Hidden
};
struct Parameter
{
Domain domain{Domain::Unknown};
};
explicit PredicateDeclaration(std::string &&name, size_t arity)
: name{std::move(name)},
arity{arity}
parameters{std::vector<Parameter>(arity)}
{
}
@@ -256,8 +261,13 @@ struct PredicateDeclaration
PredicateDeclaration(PredicateDeclaration &&other) noexcept = default;
PredicateDeclaration &operator=(PredicateDeclaration &&other) noexcept = default;
size_t arity() const noexcept
{
return parameters.size();
}
std::string name;
size_t arity;
std::vector<Parameter> parameters;
bool isUsed{false};
bool isExternal{false};
Visibility visibility{Visibility::Default};

View File

@@ -38,7 +38,7 @@ struct Context
const auto matchesExistingPredicateDeclaration =
[&](const auto &predicateDeclaration)
{
return (predicateDeclaration->arity == arity
return (predicateDeclaration->arity() == arity
&& strcmp(predicateDeclaration->name.c_str(), name) == 0);
};

View File

@@ -261,7 +261,7 @@ inline output::ColorStream &print(output::ColorStream &stream, const Predicate &
inline output::ColorStream &print(output::ColorStream &stream, const PredicateDeclaration &predicateDeclaration, PrintContext &, bool)
{
return (stream << predicateDeclaration.name << "/" << predicateDeclaration.arity);
return (stream << predicateDeclaration.name << "/" << predicateDeclaration.arity());
}
////////////////////////////////////////////////////////////////////////////////////////////////////