mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
Added support for emitting and represeting null
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#define CONVERSION_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||
|
||||
|
||||
#include "null.h"
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
@@ -37,6 +38,9 @@ namespace YAML
|
||||
template <>
|
||||
bool Converter<bool>::Convert(const std::string& input, bool& output);
|
||||
|
||||
template <>
|
||||
bool Converter<_Null>::Convert(const std::string& input, _Null& output);
|
||||
|
||||
template <>
|
||||
bool Converter<std::wstring>::Convert(const std::string& input, std::wstring& output);
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "emittermanip.h"
|
||||
#include "ostream.h"
|
||||
#include "null.h"
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
@@ -51,6 +52,7 @@ namespace YAML
|
||||
Emitter& Write(const _Alias& alias);
|
||||
Emitter& Write(const _Anchor& anchor);
|
||||
Emitter& Write(const _Comment& comment);
|
||||
Emitter& Write(const _Null& null);
|
||||
|
||||
private:
|
||||
enum ATOMIC_TYPE { AT_SCALAR, AT_SEQ, AT_BLOCK_SEQ, AT_FLOW_SEQ, AT_MAP, AT_BLOCK_MAP, AT_FLOW_MAP };
|
||||
|
13
include/null.h
Normal file
13
include/null.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef NULL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||
#define NULL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||
|
||||
|
||||
namespace YAML
|
||||
{
|
||||
struct _Null {};
|
||||
extern _Null Null;
|
||||
}
|
||||
|
||||
#endif // NULL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
@@ -83,6 +83,12 @@ namespace YAML
|
||||
return false;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool Converter<_Null>::Convert(const std::string& input, _Null& /*output*/)
|
||||
{
|
||||
return input.empty() || input == "~" || input == "null" || input == "Null" || input == "NULL";
|
||||
}
|
||||
|
||||
template <>
|
||||
bool Converter<std::wstring>::Convert(const std::string& input, std::wstring& output)
|
||||
{
|
||||
|
@@ -666,4 +666,16 @@ namespace YAML
|
||||
Utils::WriteComment(m_stream, comment.content, m_pState->GetPostCommentIndent());
|
||||
return *this;
|
||||
}
|
||||
|
||||
Emitter& Emitter::Write(const _Null& /*null*/)
|
||||
{
|
||||
if(!good())
|
||||
return *this;
|
||||
|
||||
PreAtomicWrite();
|
||||
EmitSeparationIfNecessary();
|
||||
m_stream << "~";
|
||||
PostAtomicWrite();
|
||||
return *this;
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@
|
||||
#include "aliascontent.h"
|
||||
#include "iterpriv.h"
|
||||
#include "emitter.h"
|
||||
#include <stdexcept>
|
||||
|
||||
namespace YAML
|
||||
{
|
||||
@@ -85,6 +86,9 @@ namespace YAML
|
||||
m_pContent = new Map;
|
||||
break;
|
||||
default:
|
||||
// std::stringstream str;
|
||||
// str << TokenNames[pScanner->peek().type];
|
||||
// throw std::runtime_error(str.str());
|
||||
break;
|
||||
}
|
||||
|
||||
|
6
src/null.cpp
Normal file
6
src/null.cpp
Normal file
@@ -0,0 +1,6 @@
|
||||
#include "null.h"
|
||||
|
||||
namespace YAML
|
||||
{
|
||||
_Null Null;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -351,6 +351,7 @@ namespace Test
|
||||
RunEmitterTest(&Emitter::Indentation, "indentation", passed);
|
||||
RunEmitterTest(&Emitter::SimpleGlobalSettings, "simple global settings", passed);
|
||||
RunEmitterTest(&Emitter::ComplexGlobalSettings, "complex global settings", passed);
|
||||
RunEmitterTest(&Emitter::Null, "null", passed);
|
||||
|
||||
RunEmitterErrorTest(&Emitter::ExtraEndSeq, "extra EndSeq", passed);
|
||||
RunEmitterErrorTest(&Emitter::ExtraEndMap, "extra EndMap", passed);
|
||||
|
@@ -68,6 +68,7 @@ namespace Test {
|
||||
void Indentation(YAML::Emitter& out, std::string& desiredOutput);
|
||||
void SimpleGlobalSettings(YAML::Emitter& out, std::string& desiredOutput);
|
||||
void ComplexGlobalSettings(YAML::Emitter& out, std::string& desiredOutput);
|
||||
void Null(YAML::Emitter& out, std::string& desiredOutput);
|
||||
|
||||
// incorrect emitting
|
||||
void ExtraEndSeq(YAML::Emitter& out, std::string& desiredError);
|
||||
|
Reference in New Issue
Block a user