Implemented sugar Parse() functions

This commit is contained in:
Jesse Beder
2011-09-09 23:40:19 -05:00
parent 6e03bebeb0
commit 09beb5c47a
8 changed files with 67 additions and 20 deletions

29
src/value/parse.cpp Normal file
View File

@@ -0,0 +1,29 @@
#include "yaml-cpp/value/parse.h"
#include "yaml-cpp/value/value.h"
#include "yaml-cpp/value/impl.h"
#include "yaml-cpp/parser.h"
#include "valuebuilder.h"
#include <sstream>
namespace YAML
{
Value Parse(const std::string& input) {
std::stringstream stream(input);
return Parse(stream);
}
Value Parse(const char *input) {
std::stringstream stream(input);
return Parse(stream);
}
Value Parse(std::istream& input) {
Parser parser(input);
ValueBuilder builder;
if(!parser.HandleNextDocument(builder))
return Value();
return builder.Root();
}
}

View File

@@ -14,6 +14,14 @@ namespace YAML
{
}
Value ValueBuilder::Root()
{
if(!m_pRoot)
return Value();
return Value(*m_pRoot, m_pMemory);
}
void ValueBuilder::OnDocumentStart(const Mark&)
{
}
@@ -70,13 +78,13 @@ namespace YAML
detail::node& ValueBuilder::Push(anchor_t anchor)
{
detail::node& top = *m_stack.back();
const bool needsKey = (!m_stack.empty() && m_stack.back()->type() == ValueType::Map && m_keys.size() < m_mapDepth);
detail::node& node = m_pMemory->create_node();
m_stack.push_back(&node);
RegisterAnchor(anchor, node);
if(top.type() == ValueType::Map && m_keys.size() < m_mapDepth)
if(needsKey)
m_keys.push_back(&node);
return node;

View File

@@ -19,6 +19,8 @@ namespace YAML
ValueBuilder();
virtual ~ValueBuilder();
Value Root();
virtual void OnDocumentStart(const Mark& mark);
virtual void OnDocumentEnd();