mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
Overloaded more integral types for emitting
This commit is contained in:
@@ -46,7 +46,12 @@ namespace YAML
|
|||||||
// overloads of write
|
// overloads of write
|
||||||
Emitter& Write(const std::string& str);
|
Emitter& Write(const std::string& str);
|
||||||
Emitter& Write(const char *str);
|
Emitter& Write(const char *str);
|
||||||
Emitter& Write(int i);
|
Emitter& Write(int value) { return WriteIntegralType(value); }
|
||||||
|
Emitter& Write(unsigned int value) { return WriteIntegralType(value); }
|
||||||
|
Emitter& Write(short value) { return WriteIntegralType(value); }
|
||||||
|
Emitter& Write(unsigned short value) { return WriteIntegralType(value); }
|
||||||
|
Emitter& Write(long value) { return WriteIntegralType(value); }
|
||||||
|
Emitter& Write(unsigned long value) { return WriteIntegralType(value); }
|
||||||
Emitter& Write(bool b);
|
Emitter& Write(bool b);
|
||||||
Emitter& Write(float f);
|
Emitter& Write(float f);
|
||||||
Emitter& Write(double d);
|
Emitter& Write(double d);
|
||||||
@@ -56,6 +61,13 @@ namespace YAML
|
|||||||
Emitter& Write(const _Comment& comment);
|
Emitter& Write(const _Comment& comment);
|
||||||
Emitter& Write(const _Null& null);
|
Emitter& Write(const _Null& null);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void PreWriteIntegralType(std::stringstream& str);
|
||||||
|
void PostWriteIntegralType(const std::stringstream& str);
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
Emitter& WriteIntegralType(T value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum ATOMIC_TYPE { AT_SCALAR, AT_SEQ, AT_BLOCK_SEQ, AT_FLOW_SEQ, AT_MAP, AT_BLOCK_MAP, AT_FLOW_MAP };
|
enum ATOMIC_TYPE { AT_SCALAR, AT_SEQ, AT_BLOCK_SEQ, AT_FLOW_SEQ, AT_MAP, AT_BLOCK_MAP, AT_FLOW_MAP };
|
||||||
|
|
||||||
@@ -76,6 +88,19 @@ namespace YAML
|
|||||||
std::auto_ptr <EmitterState> m_pState;
|
std::auto_ptr <EmitterState> m_pState;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline Emitter& Emitter::WriteIntegralType(T value)
|
||||||
|
{
|
||||||
|
if(!good())
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
std::stringstream str;
|
||||||
|
PreWriteIntegralType(str);
|
||||||
|
str << value;
|
||||||
|
PostWriteIntegralType(str);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
// overloads of insertion
|
// overloads of insertion
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline Emitter& operator << (Emitter& emitter, T v) {
|
inline Emitter& operator << (Emitter& emitter, T v) {
|
||||||
|
@@ -557,16 +557,12 @@ namespace YAML
|
|||||||
return Write(std::string(str));
|
return Write(std::string(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
Emitter& Emitter::Write(int i)
|
void Emitter::PreWriteIntegralType(std::stringstream& str)
|
||||||
{
|
{
|
||||||
if(!good())
|
|
||||||
return *this;
|
|
||||||
|
|
||||||
PreAtomicWrite();
|
PreAtomicWrite();
|
||||||
EmitSeparationIfNecessary();
|
EmitSeparationIfNecessary();
|
||||||
|
|
||||||
EMITTER_MANIP intFmt = m_pState->GetIntFormat();
|
EMITTER_MANIP intFmt = m_pState->GetIntFormat();
|
||||||
std::stringstream str;
|
|
||||||
switch(intFmt) {
|
switch(intFmt) {
|
||||||
case Dec:
|
case Dec:
|
||||||
str << std::dec;
|
str << std::dec;
|
||||||
@@ -574,18 +570,18 @@ namespace YAML
|
|||||||
case Hex:
|
case Hex:
|
||||||
str << std::hex;
|
str << std::hex;
|
||||||
break;
|
break;
|
||||||
case Oct:
|
case Oct:
|
||||||
str << std::oct;
|
str << std::oct;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
str << i;
|
void Emitter::PostWriteIntegralType(const std::stringstream& str)
|
||||||
|
{
|
||||||
m_stream << str.str();
|
m_stream << str.str();
|
||||||
|
|
||||||
PostAtomicWrite();
|
PostAtomicWrite();
|
||||||
return *this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Emitter& Emitter::Write(bool b)
|
Emitter& Emitter::Write(bool b)
|
||||||
|
Reference in New Issue
Block a user