#ifndef __PLASP__PDDL__DOMAIN_H #define __PLASP__PDDL__DOMAIN_H #include #include #include #include #include #include #include #include namespace plasp { namespace pddl { //////////////////////////////////////////////////////////////////////////////////////////////////// // // Domain // //////////////////////////////////////////////////////////////////////////////////////////////////// class Domain { public: Domain(Context &context); public: void findSections(); void parse(); void setName(std::string name); const std::string &name() const; const Requirements &requirements() const; bool hasRequirement(Requirement::Type requirementType) const; void checkRequirement(Requirement::Type requirementType); expressions::PrimitiveTypes &types(); const expressions::PrimitiveTypes &types() const; expressions::Constants &constants(); const expressions::Constants &constants() const; expressions::PredicateDeclarations &predicates(); const expressions::PredicateDeclarations &predicates() const; std::vector> &actions(); const std::vector> &actions() const; void checkConsistency(); void normalizeParameterNames(); private: void parseSection(); void parseRequirementSection(); void computeDerivedRequirements(); void parseTypeSection(); void parseConstantSection(); void parsePredicateSection(); void parseActionSection(); Context &m_context; std::string m_name; utils::Stream::Position m_requirementsPosition; Requirements m_requirements; utils::Stream::Position m_typesPosition; expressions::PrimitiveTypes m_types; utils::Stream::Position m_constantsPosition; expressions::Constants m_constants; utils::Stream::Position m_predicatesPosition; expressions::PredicateDeclarations m_predicates; std::vector m_actionPositions; std::vector> m_actions; }; //////////////////////////////////////////////////////////////////////////////////////////////////// } } #endif