Free Electron
stringsource.h
1 #ifndef STRINGSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define STRINGSOURCE_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 <cstddef>
11 
12 namespace YAML {
13 class StringCharSource {
14  public:
15  StringCharSource(const char* str, std::size_t size)
16  : m_str(str), m_size(size), m_offset(0) {}
17 
18  operator bool() const { return m_offset < m_size; }
19  char operator[](std::size_t i) const { return m_str[m_offset + i]; }
20  bool operator!() const { return !static_cast<bool>(*this); }
21 
22  const StringCharSource operator+(int i) const {
23  StringCharSource source(*this);
24  if (static_cast<int>(source.m_offset) + i >= 0)
25  source.m_offset += i;
26  else
27  source.m_offset = 0;
28  return source;
29  }
30 
31  StringCharSource& operator++() {
32  ++m_offset;
33  return *this;
34  }
35 
36  StringCharSource& operator+=(std::size_t offset) {
37  m_offset += offset;
38  return *this;
39  }
40 
41  private:
42  const char* m_str;
43  std::size_t m_size;
44  std::size_t m_offset;
45 };
46 }
47 
48 #endif // STRINGSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66
Definition: anchor.h:12