yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

stringsource.h (1265B)


      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