Some more helpful utility parsers

- Rename VectorParser -> ScalarSequenceParser
- Add Vector3Parser and ColorParser, subclasses of the above, which handle
  Vector3s and Colors
This commit is contained in:
Eryn Wells 2014-07-19 17:17:33 -07:00
parent daf5c7d8a6
commit 2c4f6a4d29
4 changed files with 89 additions and 3 deletions

View file

@ -10,6 +10,7 @@ files = [
'objectParser.cc',
'scalarMappingParser.cc',
'sceneParser.cc',
'vectorParser.cc'
]
objs = []

57
src/yaml/vectorParser.cc Normal file
View file

@ -0,0 +1,57 @@
/* vectorParser.cc
* vim: set tw=80:
* Eryn Wells <eryn@erynwells.me>
*/
#include <cassert>
#include "yaml/vectorParser.hh"
namespace yaml {
Vector3Parser::Vector3Parser(Scene& scene,
ParserStack& parsers,
CallbackFunction onDone)
: ScalarSequenceParser(scene, parsers)
{
auto onSeqDone = [this, onDone](std::vector<double> seq) {
if (seq.size() != 3) {
assert(seq.size() != 3);
return;
}
onDone(Vector3(seq[0], seq[1], seq[2]));
};
SetCallback(onSeqDone);
}
Vector3Parser::~Vector3Parser()
{ }
ColorParser::ColorParser(Scene& scene,
ParserStack& parsers,
CallbackFunction onDone)
: ScalarSequenceParser(scene, parsers)
{
auto onSeqDone = [this, onDone](std::vector<double> seq) {
size_t seqSize = seq.size();
if (seqSize == 3) {
onDone(Color(seq[0], seq[1], seq[2]));
}
else if (seqSize == 4) {
onDone(Color(seq[0], seq[1], seq[2], seq[3]));
}
else {
assert(seqSize != 3 || seqSize != 4);
}
};
SetCallback(onSeqDone);
}
ColorParser::~ColorParser()
{ }
} /* namespace yaml */

View file

@ -23,15 +23,23 @@ namespace yaml {
* type.
*/
template<typename T>
struct VectorParser
struct ScalarSequenceParser
: public UtilityParser<std::vector<T> >
{
typedef T Type;
typedef std::vector<T> VectorType;
typedef typename UtilityParser<VectorType>::CallbackFunction CallbackFunction;
ScalarSequenceParser(Scene& scene,
ParserStack& parsers)
: UtilityParser<VectorType>(scene, parsers),
mVector()
{ }
/** Constructor */
VectorParser(Scene& scene, ParserStack& parsers,
typename UtilityParser<VectorType>::CallbackFunction callback)
ScalarSequenceParser(Scene& scene,
ParserStack& parsers,
CallbackFunction callback)
: UtilityParser<VectorType>(scene, parsers, callback),
mVector()
{ }
@ -73,6 +81,26 @@ private:
VectorType mVector;
};
struct Vector3Parser
: ScalarSequenceParser<double>
{
typedef std::function<void (Vector3)> CallbackFunction;
Vector3Parser(Scene& scene, ParserStack& parsers, CallbackFunction onDone);
~Vector3Parser();
};
struct ColorParser
: ScalarSequenceParser<double>
{
typedef std::function<void (Color)> CallbackFunction;
ColorParser(Scene& scene, ParserStack& parsers, CallbackFunction onDone);
~ColorParser();
};
} /* namespace yaml */
#endif /* __YAML_VECTOR_PARSER_HH__ */