Added emitting std::set (and refactored the stl emitters a bit)

This commit is contained in:
Jesse Beder 2011-05-18 21:07:25 +00:00
parent 9fbcfe9ec5
commit 4c3926a5c7

View File

@ -8,32 +8,37 @@
#include <vector> #include <vector>
#include <list> #include <list>
#include <set>
#include <map> #include <map>
namespace YAML namespace YAML
{ {
template <typename T> template<typename Seq>
inline Emitter& operator << (Emitter& emitter, const std::vector <T>& v) { inline Emitter& EmitSeq(Emitter& emitter, const Seq& seq) {
typedef typename std::vector <T> vec;
emitter << BeginSeq; emitter << BeginSeq;
for(typename vec::const_iterator it=v.begin();it!=v.end();++it) for(typename Seq::const_iterator it=seq.begin();it!=seq.end();++it)
emitter << *it;
emitter << EndSeq;
return emitter;
}
template <typename T>
inline Emitter& operator << (Emitter& emitter, const std::list <T>& v) {
typedef typename std::list <T> list;
emitter << BeginSeq;
for(typename list::const_iterator it=v.begin();it!=v.end();++it)
emitter << *it; emitter << *it;
emitter << EndSeq; emitter << EndSeq;
return emitter; return emitter;
} }
template<typename T>
inline Emitter& operator << (Emitter& emitter, const std::vector<T>& v) {
return EmitSeq(emitter, v);
}
template<typename T>
inline Emitter& operator << (Emitter& emitter, const std::list<T>& v) {
return EmitSeq(emitter, v);
}
template<typename T>
inline Emitter& operator << (Emitter& emitter, const std::set<T>& v) {
return EmitSeq(emitter, v);
}
template <typename K, typename V> template <typename K, typename V>
inline Emitter& operator << (Emitter& emitter, const std::map <K, V>& m) { inline Emitter& operator << (Emitter& emitter, const std::map<K, V>& m) {
typedef typename std::map <K, V> map; typedef typename std::map <K, V> map;
emitter << BeginMap; emitter << BeginMap;
for(typename map::const_iterator it=m.begin();it!=m.end();++it) for(typename map::const_iterator it=m.begin();it!=m.end();++it)