Free Electron
ostream_wrapper.h
1 #ifndef OSTREAM_WRAPPER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define OSTREAM_WRAPPER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
3 
4 #if defined(_MSC_VER) || \
5  (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
6  (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
7 #pragma once
8 #endif
9 
10 #include <string>
11 #include <vector>
12 
13 #include "yaml-cpp/dll.h"
14 
15 namespace YAML {
16 class YAML_CPP_API ostream_wrapper {
17  public:
18  ostream_wrapper();
19  explicit ostream_wrapper(std::ostream& stream);
20  ostream_wrapper(const ostream_wrapper&) = delete;
21  ostream_wrapper(ostream_wrapper&&) = delete;
22  ostream_wrapper& operator=(const ostream_wrapper&) = delete;
23  ostream_wrapper& operator=(ostream_wrapper&&) = delete;
24  ~ostream_wrapper();
25 
26  void write(const std::string& str);
27  void write(const char* str, std::size_t size);
28 
29  void set_comment() { m_comment = true; }
30 
31  const char* str() const {
32  if (m_pStream) {
33  return nullptr;
34  } else {
35  m_buffer[m_pos] = '\0';
36  return &m_buffer[0];
37  }
38  }
39 
40  std::size_t row() const { return m_row; }
41  std::size_t col() const { return m_col; }
42  std::size_t pos() const { return m_pos; }
43  bool comment() const { return m_comment; }
44 
45  private:
46  void update_pos(char ch);
47 
48  private:
49  mutable std::vector<char> m_buffer;
50  std::ostream* const m_pStream;
51 
52  std::size_t m_pos;
53  std::size_t m_row, m_col;
54  bool m_comment;
55 };
56 
57 template <std::size_t N>
58 inline ostream_wrapper& operator<<(ostream_wrapper& stream,
59  const char (&str)[N]) {
60  stream.write(str, N - 1);
61  return stream;
62 }
63 
64 inline ostream_wrapper& operator<<(ostream_wrapper& stream,
65  const std::string& str) {
66  stream.write(str);
67  return stream;
68 }
69 
70 inline ostream_wrapper& operator<<(ostream_wrapper& stream, char ch) {
71  stream.write(&ch, 1);
72  return stream;
73 }
74 } // namespace YAML
75 
76 #endif // OSTREAM_WRAPPER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
JSON_API OStream & operator<<(OStream &, const Value &root)
Output using the StyledStreamWriter.
Definition: anchor.h:12