Add ScalarMappingParser

This commit is contained in:
Eryn Wells 2014-07-19 11:28:03 -07:00
parent 7153ec759b
commit 625e3a6f47
3 changed files with 121 additions and 0 deletions

View file

@ -8,6 +8,7 @@ Import('env')
files = [
'parsers.cc',
'object_parser.cc',
'scalarMappingParser.cc',
'scene_parser.cc',
]

View file

@ -0,0 +1,76 @@
/* scalarMappingParser.cc
* vim: set tw=80:
* Eryn Wells <eryn@erynwells.me>
*/
/**
* Implementation of ScalarMappingParser.
*/
#include <cassert>
#include <cstdio>
#include "scalarMappingParser.hh"
namespace yaml {
ScalarMappingParser::ScalarMappingParser(Scene& scene,
ParserStack& parsers)
: Parser(scene, parsers),
mShouldExpectKey(true)
{ }
ScalarMappingParser::~ScalarMappingParser()
{ }
void
ScalarMappingParser::HandleEvent(yaml_event_t& event)
{
if (mShouldExpectKey && event.type == YAML_SCALAR_EVENT) {
HandleKeyEvent(std::string((char*)event.data.scalar.value,
event.data.scalar.length));
}
else {
HandleValueEvent(event);
}
}
#pragma mark key/value handling
void
ScalarMappingParser::HandleKeyEvent(const std::string& key)
{
printf("%s: key = %s\n", __PRETTY_FUNCTION__, key.c_str());
assert(false);
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-parameter"
void
ScalarMappingParser::HandleValueEvent(yaml_event_t& event)
{
assert(false);
}
#pragma clang diagnostic pop
void
ScalarMappingParser::SetShouldExpectKey(bool shouldExpectKey)
{
mShouldExpectKey = shouldExpectKey;
}
bool
ScalarMappingParser::GetShouldExpectKey()
const
{
return mShouldExpectKey;
}
} /* namespace yaml */

View file

@ -0,0 +1,44 @@
/* scalarMappingParser.hh
* vim: set tw=80:
* Eryn Wells <eryn@erynwells.me>
*/
/**
* Declares a yaml::ScalarMappingParser.
*/
#ifndef __YAML_SCALARMAPPINGPARSER_HH__
#define __YAML_SCALARMAPPINGPARSER_HH__
#include <functional>
#include <map>
#include <string>
#include "yaml/parsers.hh"
namespace yaml {
struct ScalarMappingParser
: public Parser
{
ScalarMappingParser(Scene& scene, ParserStack& parsers);
virtual ~ScalarMappingParser();
void HandleEvent(yaml_event_t& event);
protected:
virtual void HandleKeyEvent(const std::string& key);
virtual void HandleValueEvent(yaml_event_t& event);
void SetShouldExpectKey(bool shouldExpectKey);
bool GetShouldExpectKey() const;
private:
/** Subclasses set this to `true` when they're finished parsing the value. */
bool mShouldExpectKey;
};
} /* namespace yaml */
#endif /* __YAML_SCALARMAPPINGPARSER_HH__ */