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