#include "crt.h" #include "scalar.h" #include "scanner.h" #include "token.h" #include "exceptions.h" #include "node.h" #include #include namespace YAML { Scalar::Scalar() { } Scalar::~Scalar() { } void Scalar::Parse(Scanner *pScanner, const ParserState& state) { Token& token = pScanner->peek(); m_data = token.value; pScanner->pop(); } void Scalar::Write(std::ostream& out, int indent, bool startedLine, bool onlyOneCharOnLine) { out << "\""; for(unsigned i=0;i> i; return !data.fail(); } bool Scalar::Read(unsigned& u) const { std::stringstream data(m_data); data >> u; return !data.fail(); } bool Scalar::Read(long& l) const { std::stringstream data(m_data); data >> l; return !data.fail(); } bool Scalar::Read(float& f) const { std::stringstream data(m_data); data >> f; return !data.fail(); } bool Scalar::Read(double& d) const { std::stringstream data(m_data); data >> d; return !data.fail(); } bool Scalar::Read(char& c) const { std::stringstream data(m_data); data >> c; return !data.fail(); } namespace { // we're not gonna mess with the mess that is all the isupper/etc. functions bool IsLower(char ch) { return 'a' <= ch && ch <= 'z'; } bool IsUpper(char ch) { return 'A' <= ch && ch <= 'Z'; } char ToLower(char ch) { return IsUpper(ch) ? ch + 'a' - 'A' : ch; } std::string tolower(const std::string& str) { std::string s(str); std::transform(s.begin(), s.end(), s.begin(), ToLower); return s; } template bool IsEntirely(const std::string& str, T func) { for(unsigned i=0;iCompare(this); } int Scalar::Compare(Scalar *pScalar) { if(m_data < pScalar->m_data) return -1; else if(m_data > pScalar->m_data) return 1; else return 0; } }