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:
parent
daf5c7d8a6
commit
2c4f6a4d29
4 changed files with 89 additions and 3 deletions
|
@ -10,6 +10,7 @@ files = [
|
||||||
'objectParser.cc',
|
'objectParser.cc',
|
||||||
'scalarMappingParser.cc',
|
'scalarMappingParser.cc',
|
||||||
'sceneParser.cc',
|
'sceneParser.cc',
|
||||||
|
'vectorParser.cc'
|
||||||
]
|
]
|
||||||
|
|
||||||
objs = []
|
objs = []
|
||||||
|
|
57
src/yaml/vectorParser.cc
Normal file
57
src/yaml/vectorParser.cc
Normal 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 */
|
|
@ -23,15 +23,23 @@ namespace yaml {
|
||||||
* type.
|
* type.
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct VectorParser
|
struct ScalarSequenceParser
|
||||||
: public UtilityParser<std::vector<T> >
|
: public UtilityParser<std::vector<T> >
|
||||||
{
|
{
|
||||||
typedef T Type;
|
typedef T Type;
|
||||||
typedef std::vector<T> VectorType;
|
typedef std::vector<T> VectorType;
|
||||||
|
typedef typename UtilityParser<VectorType>::CallbackFunction CallbackFunction;
|
||||||
|
|
||||||
|
ScalarSequenceParser(Scene& scene,
|
||||||
|
ParserStack& parsers)
|
||||||
|
: UtilityParser<VectorType>(scene, parsers),
|
||||||
|
mVector()
|
||||||
|
{ }
|
||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
VectorParser(Scene& scene, ParserStack& parsers,
|
ScalarSequenceParser(Scene& scene,
|
||||||
typename UtilityParser<VectorType>::CallbackFunction callback)
|
ParserStack& parsers,
|
||||||
|
CallbackFunction callback)
|
||||||
: UtilityParser<VectorType>(scene, parsers, callback),
|
: UtilityParser<VectorType>(scene, parsers, callback),
|
||||||
mVector()
|
mVector()
|
||||||
{ }
|
{ }
|
||||||
|
@ -73,6 +81,26 @@ private:
|
||||||
VectorType mVector;
|
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 */
|
} /* namespace yaml */
|
||||||
|
|
||||||
#endif /* __YAML_VECTOR_PARSER_HH__ */
|
#endif /* __YAML_VECTOR_PARSER_HH__ */
|
Loading…
Add table
Add a link
Reference in a new issue