Added default constructor to Parser, and cleaned it up a bit

This commit is contained in:
Jesse Beder
2009-10-19 22:40:46 +00:00
parent 59b0e986bf
commit ed570b9f7c
2 changed files with 15 additions and 15 deletions

View File

@@ -4,21 +4,24 @@
#define PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
#include "node.h"
#include "parserstate.h"
#include "noncopyable.h"
#include <ios> #include <ios>
#include <string> #include <string>
#include <vector> #include <vector>
#include <map> #include <map>
#include "node.h" #include <memory>
#include "parserstate.h"
namespace YAML namespace YAML
{ {
class Scanner; class Scanner;
struct Token; struct Token;
class Parser class Parser: private noncopyable
{ {
public: public:
Parser();
Parser(std::istream& in); Parser(std::istream& in);
~Parser(); ~Parser();
@@ -35,12 +38,7 @@ namespace YAML
void HandleTagDirective(Token *pToken); void HandleTagDirective(Token *pToken);
private: private:
// can't copy this std::auto_ptr<Scanner> m_pScanner;
Parser(const Parser&) {}
Parser& operator = (const Parser&) { return *this; }
private:
Scanner *m_pScanner;
ParserState m_state; ParserState m_state;
}; };
} }

View File

@@ -8,25 +8,27 @@
namespace YAML namespace YAML
{ {
Parser::Parser(std::istream& in): m_pScanner(0) Parser::Parser()
{
}
Parser::Parser(std::istream& in)
{ {
Load(in); Load(in);
} }
Parser::~Parser() Parser::~Parser()
{ {
delete m_pScanner;
} }
Parser::operator bool() const Parser::operator bool() const
{ {
return !m_pScanner->empty(); return m_pScanner.get() && !m_pScanner->empty();
} }
void Parser::Load(std::istream& in) void Parser::Load(std::istream& in)
{ {
delete m_pScanner; m_pScanner.reset(new Scanner(in));
m_pScanner = new Scanner(in);
m_state.Reset(); m_state.Reset();
} }
@@ -50,7 +52,7 @@ namespace YAML
m_pScanner->pop(); m_pScanner->pop();
// now parse our root node // now parse our root node
document.Parse(m_pScanner, m_state); document.Parse(m_pScanner.get(), m_state);
// and finally eat any doc ends we see // and finally eat any doc ends we see
while(!m_pScanner->empty() && m_pScanner->peek().type == Token::DOC_END) while(!m_pScanner->empty() && m_pScanner->peek().type == Token::DOC_END)