Overloaded more integral types for emitting

This commit is contained in:
jbeder
2009-11-06 03:24:12 +00:00
parent 472bb80c9c
commit 71489e5abf
2 changed files with 33 additions and 12 deletions

View File

@@ -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) {

View File

@@ -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;
@@ -580,12 +576,12 @@ namespace YAML
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)