diff --git a/src/yaml/SConscript b/src/yaml/SConscript index f144ea7..2130657 100644 --- a/src/yaml/SConscript +++ b/src/yaml/SConscript @@ -10,6 +10,7 @@ files = [ 'objectParser.cc', 'scalarMappingParser.cc', 'sceneParser.cc', + 'vectorParser.cc' ] objs = [] diff --git a/src/yaml/vectorParser.cc b/src/yaml/vectorParser.cc new file mode 100644 index 0000000..5409f97 --- /dev/null +++ b/src/yaml/vectorParser.cc @@ -0,0 +1,57 @@ +/* vectorParser.cc + * vim: set tw=80: + * Eryn Wells + */ + +#include + +#include "yaml/vectorParser.hh" + + +namespace yaml { + +Vector3Parser::Vector3Parser(Scene& scene, + ParserStack& parsers, + CallbackFunction onDone) + : ScalarSequenceParser(scene, parsers) +{ + auto onSeqDone = [this, onDone](std::vector 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 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 */ diff --git a/src/yaml/vector_parser.hh b/src/yaml/vectorParser.hh similarity index 66% rename from src/yaml/vector_parser.hh rename to src/yaml/vectorParser.hh index 97540ad..2eb1bb5 100644 --- a/src/yaml/vector_parser.hh +++ b/src/yaml/vectorParser.hh @@ -23,15 +23,23 @@ namespace yaml { * type. */ template -struct VectorParser +struct ScalarSequenceParser : public UtilityParser > { typedef T Type; typedef std::vector VectorType; + typedef typename UtilityParser::CallbackFunction CallbackFunction; + + ScalarSequenceParser(Scene& scene, + ParserStack& parsers) + : UtilityParser(scene, parsers), + mVector() + { } /** Constructor */ - VectorParser(Scene& scene, ParserStack& parsers, - typename UtilityParser::CallbackFunction callback) + ScalarSequenceParser(Scene& scene, + ParserStack& parsers, + CallbackFunction callback) : UtilityParser(scene, parsers, callback), mVector() { } @@ -73,6 +81,26 @@ private: VectorType mVector; }; + +struct Vector3Parser + : ScalarSequenceParser +{ + typedef std::function CallbackFunction; + + Vector3Parser(Scene& scene, ParserStack& parsers, CallbackFunction onDone); + ~Vector3Parser(); +}; + + +struct ColorParser + : ScalarSequenceParser +{ + typedef std::function CallbackFunction; + + ColorParser(Scene& scene, ParserStack& parsers, CallbackFunction onDone); + ~ColorParser(); +}; + } /* namespace yaml */ #endif /* __YAML_VECTOR_PARSER_HH__ */ diff --git a/src/yaml/vector_parser.cc b/src/yaml/vector_parser.cc deleted file mode 100644 index e69de29..0000000