/src/yaml-cpp/include/yaml-cpp/ostream_wrapper.h
Line | Count | Source (jump to first uncovered line) |
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 | 0 | void set_comment() { m_comment = true; } |
30 | | |
31 | 0 | const char* str() const { |
32 | 0 | if (m_pStream) { |
33 | 0 | return nullptr; |
34 | 0 | } else { |
35 | 0 | m_buffer[m_pos] = '\0'; |
36 | 0 | return &m_buffer[0]; |
37 | 0 | } |
38 | 0 | } |
39 | | |
40 | 0 | std::size_t row() const { return m_row; } |
41 | 0 | std::size_t col() const { return m_col; } |
42 | 0 | std::size_t pos() const { return m_pos; } |
43 | 0 | 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 | 0 | const std::string& str) { |
66 | 0 | stream.write(str); |
67 | 0 | return stream; |
68 | 0 | } |
69 | | |
70 | 0 | inline ostream_wrapper& operator<<(ostream_wrapper& stream, char ch) { |
71 | 0 | stream.write(&ch, 1); |
72 | 0 | return stream; |
73 | 0 | } |
74 | | } // namespace YAML |
75 | | |
76 | | #endif // OSTREAM_WRAPPER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |