Implemented construction of SAS and PDDL Descriptions from Parser object.

This commit is contained in:
Patrick Lühne 2016-06-10 00:46:40 +02:00
parent c6bdfe3f38
commit 8bb25e9b90
6 changed files with 56 additions and 0 deletions

View File

@ -21,6 +21,7 @@ namespace pddl
class Description class Description
{ {
public: public:
static Description fromParser(utils::Parser &&parser);
static Description fromStream(std::istream &istream); static Description fromStream(std::istream &istream);
static Description fromFile(const std::string &path); static Description fromFile(const std::string &path);
static Description fromFiles(const std::vector<std::string> &paths); static Description fromFiles(const std::vector<std::string> &paths);

View File

@ -29,6 +29,7 @@ namespace sas
class Description class Description
{ {
public: public:
static Description fromParser(utils::Parser &&parser);
static Description fromStream(std::istream &istream); static Description fromStream(std::istream &istream);
static Description fromFile(const boost::filesystem::path &path); static Description fromFile(const boost::filesystem::path &path);

View File

@ -41,6 +41,13 @@ class Parser
explicit Parser(); explicit Parser();
explicit Parser(std::string streamName, std::istream &istream); explicit Parser(std::string streamName, std::istream &istream);
// Forbid copy construction/assignment
Parser(const Parser &other) = delete;
Parser &operator=(const Parser &other) = delete;
Parser(Parser &&other);
Parser &operator=(Parser &&other);
void readStream(std::string streamName, std::istream &istream); void readStream(std::string streamName, std::istream &istream);
void readFile(const boost::filesystem::path &path); void readFile(const boost::filesystem::path &path);

View File

@ -31,6 +31,20 @@ Description::Description()
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
Description Description::fromParser(utils::Parser &&parser)
{
Description description;
description.m_parser = std::move(parser);
description.parseContent();
description.checkConsistency();
return description;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
Description Description::fromStream(std::istream &istream) Description Description::fromStream(std::istream &istream)
{ {
Description description; Description description;

View File

@ -28,6 +28,16 @@ Description::Description()
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
Description Description::fromParser(utils::Parser &&parser)
{
Description description;
description.parseContent(parser);
return description;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
Description Description::fromStream(std::istream &istream) Description Description::fromStream(std::istream &istream)
{ {
utils::Parser parser; utils::Parser parser;

View File

@ -41,6 +41,29 @@ Parser::Parser(std::string streamName, std::istream &istream)
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
Parser::Parser(Parser &&other)
: m_stream{std::move(other.m_stream)},
m_streamDelimiters{std::move(other.m_streamDelimiters)},
m_isCaseSensitive{other.m_isCaseSensitive}
{
other.m_isCaseSensitive = true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
Parser &Parser::operator=(Parser &&other)
{
m_stream = std::move(other.m_stream);
m_streamDelimiters = std::move(other.m_streamDelimiters);
m_isCaseSensitive = other.m_isCaseSensitive;
other.m_isCaseSensitive = true;
return *this;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void Parser::readStream(std::string streamName, std::istream &istream) void Parser::readStream(std::string streamName, std::istream &istream)
{ {
// Store position of new section // Store position of new section