Video Processing Framework
D:/J_PROGRAMI/SPLINEPROJECT/CODE2/Util_YAML/include/yaml-cpp/emitter.h
Go to the documentation of this file.
00001 #ifndef EMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
00002 #define EMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
00003 
00004 #if !defined(__GNUC__) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ >= 4) // GCC supports "pragma once" correctly since 3.4
00005 #pragma once
00006 #endif
00007 
00008 
00009 #include "yaml-cpp/dll.h"
00010 #include "yaml-cpp/emittermanip.h"
00011 #include "yaml-cpp/ostream.h"
00012 #include "yaml-cpp/noncopyable.h"
00013 #include "yaml-cpp/null.h"
00014 #include <memory>
00015 #include <string>
00016 #include <sstream>
00017 
00018 namespace YAML
00019 {
00020         class EmitterState;
00021         
00022         class YAML_CPP_API Emitter: private noncopyable
00023         {
00024         public:
00025                 Emitter();
00026                 ~Emitter();
00027                 
00028                 // output
00029                 const char *c_str() const;
00030                 unsigned size() const;
00031                 
00032                 // state checking
00033                 bool good() const;
00034                 const std::string GetLastError() const;
00035                 
00036                 // global setters
00037                 bool SetOutputCharset(EMITTER_MANIP value);
00038                 bool SetStringFormat(EMITTER_MANIP value);
00039                 bool SetBoolFormat(EMITTER_MANIP value);
00040                 bool SetIntBase(EMITTER_MANIP value);
00041                 bool SetSeqFormat(EMITTER_MANIP value);
00042                 bool SetMapFormat(EMITTER_MANIP value);
00043                 bool SetIndent(unsigned n);
00044                 bool SetPreCommentIndent(unsigned n);
00045                 bool SetPostCommentIndent(unsigned n);
00046                 
00047                 // local setters
00048                 Emitter& SetLocalValue(EMITTER_MANIP value);
00049                 Emitter& SetLocalIndent(const _Indent& indent);
00050                 
00051                 // overloads of write
00052                 Emitter& Write(const std::string& str);
00053                 Emitter& Write(bool b);
00054                 Emitter& Write(const _Alias& alias);
00055                 Emitter& Write(const _Anchor& anchor);
00056                 Emitter& Write(const _Tag& tag);
00057                 Emitter& Write(const _Comment& comment);
00058                 Emitter& Write(const _Null& null);
00059                 Emitter& Write(const _Binary& binary);
00060                 
00061                 template <typename T>
00062                 Emitter& WriteIntegralType(T value);
00063                 
00064                 template <typename T>
00065                 Emitter& WriteStreamable(T value);
00066 
00067         private:
00068                 void PreWriteIntegralType(std::stringstream& str);
00069                 void PreWriteStreamable(std::stringstream& str);
00070                 void PostWriteIntegralType(const std::stringstream& str);
00071                 void PostWriteStreamable(const std::stringstream& str);
00072         
00073         private:
00074                 enum ATOMIC_TYPE { AT_SCALAR, AT_SEQ, AT_BLOCK_SEQ, AT_FLOW_SEQ, AT_MAP, AT_BLOCK_MAP, AT_FLOW_MAP };
00075                 
00076                 void PreAtomicWrite();
00077                 bool GotoNextPreAtomicState();
00078                 void PostAtomicWrite();
00079                 void EmitSeparationIfNecessary();
00080                 
00081                 void EmitBeginDoc();
00082                 void EmitEndDoc();
00083                 void EmitBeginSeq();
00084                 void EmitEndSeq();
00085                 void EmitBeginMap();
00086                 void EmitEndMap();
00087                 void EmitKey();
00088                 void EmitValue();
00089                 void EmitNewline();
00090                 void EmitKindTag();
00091                 void EmitTag(bool verbatim, const _Tag& tag);
00092                 
00093                 const char *ComputeFullBoolName(bool b) const;
00094                 bool CanEmitNewline() const;
00095                 
00096         private:
00097                 ostream m_stream;
00098                 std::auto_ptr <EmitterState> m_pState;
00099         };
00100         
00101         template <typename T>
00102         inline Emitter& Emitter::WriteIntegralType(T value)
00103         {
00104                 if(!good())
00105                         return *this;
00106                 
00107                 std::stringstream str;
00108                 PreWriteIntegralType(str);
00109                 str << value;
00110                 PostWriteIntegralType(str);
00111                 return *this;
00112         }
00113 
00114         template <typename T>
00115         inline Emitter& Emitter::WriteStreamable(T value)
00116         {
00117                 if(!good())
00118                         return *this;
00119                 
00120                 std::stringstream str;
00121                 PreWriteStreamable(str);
00122                 str << value;
00123                 PostWriteStreamable(str);
00124                 return *this;
00125         }
00126         
00127         // overloads of insertion
00128         inline Emitter& operator << (Emitter& emitter, const std::string& v) { return emitter.Write(v); }
00129         inline Emitter& operator << (Emitter& emitter, bool v) { return emitter.Write(v); }
00130         inline Emitter& operator << (Emitter& emitter, const _Alias& v) { return emitter.Write(v); }
00131         inline Emitter& operator << (Emitter& emitter, const _Anchor& v) { return emitter.Write(v); }
00132         inline Emitter& operator << (Emitter& emitter, const _Tag& v) { return emitter.Write(v); }
00133         inline Emitter& operator << (Emitter& emitter, const _Comment& v) { return emitter.Write(v); }
00134         inline Emitter& operator << (Emitter& emitter, const _Null& v) { return emitter.Write(v); }
00135         inline Emitter& operator << (Emitter& emitter, const _Binary& b) { return emitter.Write(b); }
00136 
00137         inline Emitter& operator << (Emitter& emitter, const char *v) { return emitter.Write(std::string(v)); }
00138 
00139         inline Emitter& operator << (Emitter& emitter, int v) { return emitter.WriteIntegralType(v); }
00140         inline Emitter& operator << (Emitter& emitter, unsigned int v) { return emitter.WriteIntegralType(v); }
00141         inline Emitter& operator << (Emitter& emitter, short v) { return emitter.WriteIntegralType(v); }
00142         inline Emitter& operator << (Emitter& emitter, unsigned short v) { return emitter.WriteIntegralType(v); }
00143         inline Emitter& operator << (Emitter& emitter, long v) { return emitter.WriteIntegralType(v); }
00144         inline Emitter& operator << (Emitter& emitter, unsigned long v) { return emitter.WriteIntegralType(v); }
00145         inline Emitter& operator << (Emitter& emitter, long long v) { return emitter.WriteIntegralType(v); }
00146         inline Emitter& operator << (Emitter& emitter, unsigned long long v) { return emitter.WriteIntegralType(v); }
00147 
00148         inline Emitter& operator << (Emitter& emitter, float v) { return emitter.WriteStreamable(v); }
00149         inline Emitter& operator << (Emitter& emitter, double v) { return emitter.WriteStreamable(v); }
00150 
00151         inline Emitter& operator << (Emitter& emitter, EMITTER_MANIP value) {
00152                 return emitter.SetLocalValue(value);
00153         }
00154         
00155         inline Emitter& operator << (Emitter& emitter, _Indent indent) {
00156                 return emitter.SetLocalIndent(indent);
00157         }
00158 }
00159 
00160 #endif // EMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines