This commit is contained in:
beder
2008-07-31 19:41:11 +00:00
parent 89ed418b83
commit 2601f5fd49
9 changed files with 37 additions and 0 deletions

View File

@@ -13,6 +13,8 @@ namespace YAML
class Content;
class Scanner;
enum CONTENT_TYPE { CT_NONE, CT_SCALAR, CT_SEQUENCE, CT_MAP };
class Node
{
public:
@@ -23,6 +25,8 @@ namespace YAML
void Parse(Scanner *pScanner, const ParserState& state);
void Write(std::ostream& out, int indent, bool startedLine, bool onlyOneCharOnLine) const;
CONTENT_TYPE GetType() const;
// accessors
Iterator begin() const;
Iterator end() const;

View File

@@ -16,6 +16,8 @@ namespace YAML
class Sequence;
class Map;
enum CONTENT_TYPE;
class Content
{
public:
@@ -31,6 +33,7 @@ namespace YAML
virtual bool GetEnd(std::map <Node *, Node *, ltnode>::const_iterator& it) const { return false; }
virtual Node *GetNode(unsigned i) const { return 0; }
virtual unsigned GetSize() const { return 0; }
virtual CONTENT_TYPE GetType() const = 0;
// extraction
virtual void Read(std::string& s) { throw InvalidScalar(); }

View File

@@ -163,6 +163,11 @@ namespace YAML
out << std::endl;
}
CONTENT_TYPE Map::GetType() const
{
return CT_MAP;
}
int Map::Compare(Content *pContent)
{
return -pContent->Compare(this);

View File

@@ -19,6 +19,8 @@ namespace YAML
virtual void Parse(Scanner *pScanner, const ParserState& state);
virtual void Write(std::ostream& out, int indent, bool startedLine, bool onlyOneCharOnLine);
virtual CONTENT_TYPE GetType() const;
// ordering
virtual int Compare(Content *pContent);
virtual int Compare(Scalar *pScalar) { return 1; }

View File

@@ -144,6 +144,14 @@ namespace YAML
}
}
CONTENT_TYPE Node::GetType() const
{
if(!m_pContent)
return CT_NONE;
return m_pContent->GetType();
}
// begin
// Returns an iterator to the beginning of this (sequence or map).
Iterator Node::begin() const

View File

@@ -3,6 +3,7 @@
#include "scanner.h"
#include "token.h"
#include "exceptions.h"
#include "node.h"
#include <sstream>
namespace YAML
@@ -37,6 +38,11 @@ namespace YAML
out << "\"\n";
}
CONTENT_TYPE Scalar::GetType() const
{
return CT_SCALAR;
}
void Scalar::Read(std::string& s)
{
s = m_data;

View File

@@ -14,6 +14,8 @@ namespace YAML
virtual void Parse(Scanner *pScanner, const ParserState& state);
virtual void Write(std::ostream& out, int indent, bool startedLine, bool onlyOneCharOnLine);
virtual CONTENT_TYPE GetType() const;
// extraction
virtual void Read(std::string& s);
virtual void Read(int& i);

View File

@@ -150,6 +150,11 @@ namespace YAML
out << std::endl;
}
CONTENT_TYPE Sequence::GetType() const
{
return CT_SEQUENCE;
}
int Sequence::Compare(Content *pContent)
{
return -pContent->Compare(this);

View File

@@ -22,6 +22,8 @@ namespace YAML
virtual void Parse(Scanner *pScanner, const ParserState& state);
virtual void Write(std::ostream& out, int indent, bool startedLine, bool onlyOneCharOnLine);
virtual CONTENT_TYPE GetType() const;
// ordering
virtual int Compare(Content *pContent);
virtual int Compare(Scalar *pScalar) { return 1; }