Navigation Menu

Skip to content

Commit

Permalink
1 new feature + 1 refactor
Browse files Browse the repository at this point in the history
    - Handle multiple strings in input (that is, passed by the "-s"
flag)
    - Better algorithm to handle the new structure
  • Loading branch information
massix committed May 12, 2012
1 parent 13bccfb commit 6d9a7b4
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 62 deletions.
9 changes: 4 additions & 5 deletions include/PMBinaryValidatorApplication.h
Expand Up @@ -61,20 +61,19 @@ class Application


private: private:
std::string aFileName; std::string aFileName;
std::string anInputString; std::vector<std::string> aVectorString;
std::string anOutputString; std::string anOutputString;
std::string aDirectory; std::string aDirectory;


bool isFileNameSet; bool isFileNameSet;
bool isInputStringSet; bool isInputStringSet;
bool isDirectorySet; bool isDirectorySet;


void generateOutputString(PhantomMenace::ParsingEnvironment iParsingEnv); void generateOutputString(

const std::string& iString,
PhantomMenace::ParsingEnvironment parsingEnvironment; const PhantomMenace::ParsingEnvironment& iParsingEnv);


std::vector<boost::shared_ptr<PhantomMenace::ParsingEnvironment> > aParsingEnvironmentVector; std::vector<boost::shared_ptr<PhantomMenace::ParsingEnvironment> > aParsingEnvironmentVector;
// std::vector<PhantomMenace::ParsingEnvironment*> aParsingEnvironmentVector;


protected: protected:
Application(); Application();
Expand Down
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Expand Up @@ -6,7 +6,7 @@ file(GLOB SOURCES *.cpp)
file(GLOB HEADERS ../include/*.h) file(GLOB HEADERS ../include/*.h)


set(PhantomMenaceVersionMajor 1) set(PhantomMenaceVersionMajor 1)
set(PhantomMenaceVersionBinComp 1) set(PhantomMenaceVersionBinComp 2)
set(PhantomMenaceVersionMinor 0) set(PhantomMenaceVersionMinor 0)
set(PhantomMenaceVersion set(PhantomMenaceVersion
${PhantomMenaceVersionMajor}.${PhantomMenaceVersionBinComp}.${PhantomMenaceVersionMinor}) ${PhantomMenaceVersionMajor}.${PhantomMenaceVersionBinComp}.${PhantomMenaceVersionMinor})
Expand Down
101 changes: 45 additions & 56 deletions src/PMBinaryValidatorApplication.cpp
Expand Up @@ -93,7 +93,7 @@ void Application::setFileName(const std::string& iFileName)


void Application::setString(const std::string& iString) void Application::setString(const std::string& iString)
{ {
anInputString = iString; aVectorString.push_back(iString);
isInputStringSet = true; isInputStringSet = true;
} }


Expand All @@ -105,6 +105,9 @@ void Application::setDirectory(const std::string& iDirectory)


bool Application::validateString() throw (std::runtime_error) bool Application::validateString() throw (std::runtime_error)
{ {
bool return_value = true;

/* Check consistency of the request */
if (!isFileNameSet && !isDirectorySet) if (!isFileNameSet && !isDirectorySet)
{ {
throw std::runtime_error("filename or directory not set"); throw std::runtime_error("filename or directory not set");
Expand All @@ -120,104 +123,90 @@ bool Application::validateString() throw (std::runtime_error)
throw std::runtime_error("string not set"); throw std::runtime_error("string not set");
} }


/* Get the parsing environments */
if (isFileNameSet) if (isFileNameSet)
{ {
if (!parsingEnvironment.parseFromFile(aFileName)) boost::shared_ptr<PhantomMenace::ParsingEnvironment> aParsingEnvironment(
new PhantomMenace::ParsingEnvironment());

if (!aParsingEnvironment->parseFromFile(aFileName))
{ {
throw std::runtime_error("couldn't find filename!"); throw std::runtime_error("couldn't find filename!");
} }

aParsingEnvironmentVector.push_back(aParsingEnvironment);
} }


if (isDirectorySet) else
{ {
// Parse the whole directory and build the vector of PE // Parse the whole directory and build the vector of PE
DIR* aDirectory; DIR* aDirectoryPtr = opendir(aDirectory.c_str());
struct dirent* aDirent; struct dirent* aDirent;


if ((aDirectory = opendir(this->aDirectory.c_str())) == 0) if ((aDirectoryPtr = opendir(this->aDirectory.c_str())) == 0)
{ {
throw std::runtime_error("couldn't parse directory"); throw std::runtime_error("couldn't parse directory");
} }


while ((aDirent = readdir(aDirectory)) != 0) while ((aDirent = readdir(aDirectoryPtr)) != 0)
{ {
if (aDirent->d_type == DT_DIR) if (aDirent->d_type == DT_REG)
continue;

std::string aFileName = this->aDirectory + "/" + aDirent->d_name;
if (aFileName.find(".ini") != std::string::npos)
{ {
boost::shared_ptr<PhantomMenace::ParsingEnvironment> aPE( std::string aFileName(aDirectory + aDirent->d_name);
new PhantomMenace::ParsingEnvironment()); if (aFileName.find(".ini") != std::string::npos)
try
{ {
if (aPE->parseFromFile(aFileName)) boost::shared_ptr<PhantomMenace::ParsingEnvironment> aPE(
new PhantomMenace::ParsingEnvironment());
try
{ {
if (aPE->isEnvironmentValid()) if (aPE->parseFromFile(aFileName))
{ {
aParsingEnvironmentVector.push_back(aPE); if (aPE->isEnvironmentValid())
{
aParsingEnvironmentVector.push_back(aPE);
}
} }
} }
}
catch (...) catch (...)
{ {
continue; continue;
}
} }
} }
} }
} }


try
{
if (isFileNameSet)
{
PhantomMenace::Validator validator(parsingEnvironment);
if (validator.validateString(anInputString))
{
generateOutputString(parsingEnvironment);
return true;
}


else return false; /* Validate strings! */
} std::vector<std::string>::const_iterator string_iterator;
std::vector<boost::shared_ptr<PhantomMenace::ParsingEnvironment> >::iterator parsing_iterator;


else if (isDirectorySet) for (string_iterator = aVectorString.begin(); string_iterator != aVectorString.end(); ++string_iterator)
{
for (parsing_iterator = aParsingEnvironmentVector.begin(); parsing_iterator != aParsingEnvironmentVector.end(); ++parsing_iterator)
{ {
// Try to validate against every grammar in the vector PhantomMenace::Validator aValidator(**parsing_iterator);
std::vector<boost::shared_ptr<PhantomMenace::ParsingEnvironment> >::iterator ite; if (aValidator.validateString(*string_iterator))
for (ite = aParsingEnvironmentVector.begin();
ite != aParsingEnvironmentVector.end();
++ite)
{ {
PhantomMenace::Validator aValidator(**ite); generateOutputString(*string_iterator, **parsing_iterator);
if (aValidator.validateString(anInputString))
{
generateOutputString(**ite);
return true;
}
} }

return false;
} }

else return false;
}
catch (...)
{
return false;
} }


/* We should never arrive here! */ return return_value;
return false;
} }


void Application::printLog() const void Application::printLog() const
{ {
std::cout << anOutputString << std::endl; std::cout << anOutputString << std::endl;
} }


void Application::generateOutputString(PhantomMenace::ParsingEnvironment iParsingEnv) void Application::generateOutputString(
const std::string& iString,
const PhantomMenace::ParsingEnvironment& iParsingEnv)
{ {
anOutputString += "\n\nString \"" + iString + "\" validated\n";
anOutputString += "Grammar name : "; anOutputString += "Grammar name : ";
anOutputString += iParsingEnv.getGrammar().getElementName(); anOutputString += iParsingEnv.getGrammar().getElementName();
anOutputString += "\n"; anOutputString += "\n";
Expand Down

0 comments on commit 6d9a7b4

Please sign in to comment.