#ifndef __PLASP__PDDL__TRANSLATION__VARIABLES_H #define __PLASP__PDDL__TRANSLATION__VARIABLES_H #include #include #include #include #include namespace plasp { namespace pddl { //////////////////////////////////////////////////////////////////////////////////////////////////// // // Variables // //////////////////////////////////////////////////////////////////////////////////////////////////// template void translateVariablesForRuleHead(colorlog::ColorStream &outputStream, const T &variables, VariableIDMap &variableIDs); template void translateVariablesForRuleBody(colorlog::ColorStream &outputStream, const T &variables, VariableIDMap &variableIDs); //////////////////////////////////////////////////////////////////////////////////////////////////// template inline void translateVariablesForRuleHead(colorlog::ColorStream &outputStream, const T &variables, VariableIDMap &variableIDs) { for (const auto &variable : variables) { outputStream << ", "; translateVariableDeclaration(outputStream, *variable, variableIDs); } } //////////////////////////////////////////////////////////////////////////////////////////////////// template void translateVariablesForRuleBody(colorlog::ColorStream &outputStream, const T &variables, VariableIDMap &variableIDs) { for (const auto &variable : variables) { if (&variable != &*variables.begin()) outputStream << ", "; if (variable->type) { if (!variable->type.value().template is<::pddl::normalizedAST::PrimitiveTypePointer>()) throw TranslatorException("only primitive types supported currently"); const auto &type = variable->type.value().template get<::pddl::normalizedAST::PrimitiveTypePointer>(); outputStream << colorlog::Function("has") << "("; translateVariableDeclaration(outputStream, *variable, variableIDs); outputStream << ", " << colorlog::Keyword("type") << "(" << *type << "))"; } else { outputStream << colorlog::Function("has") << "("; translateVariableDeclaration(outputStream, *variable, variableIDs); outputStream << ", " << colorlog::Keyword("type") << "(" << colorlog::String("object") << "))"; } } } //////////////////////////////////////////////////////////////////////////////////////////////////// } } #endif