Coverage Report

Created: 2025-08-29 06:05

/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