1 #ifndef STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 2 #define STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 4 #if defined(_MSC_VER) || \ 5 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ 6 (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 10 #include "yaml-cpp/mark.h" 20 class StreamCharSource;
24 friend class StreamCharSource;
26 Stream(std::istream& input);
27 Stream(
const Stream&) =
delete;
28 Stream(Stream&&) =
delete;
29 Stream& operator=(
const Stream&) =
delete;
30 Stream& operator=(Stream&&) =
delete;
33 operator bool()
const;
34 bool operator!()
const {
return !
static_cast<bool>(*this); }
38 std::string
get(
int n);
41 static char eof() {
return 0x04; }
43 const Mark mark()
const {
return m_mark; }
44 int pos()
const {
return m_mark.pos; }
45 int line()
const {
return m_mark.line; }
46 int column()
const {
return m_mark.column; }
47 void ResetColumn() { m_mark.column = 0; }
50 enum CharacterSet { utf8, utf16le, utf16be, utf32le, utf32be };
52 std::istream& m_input;
55 CharacterSet m_charSet;
56 mutable std::deque<char> m_readahead;
57 unsigned char*
const m_pPrefetched;
58 mutable size_t m_nPrefetchedAvailable;
59 mutable size_t m_nPrefetchedUsed;
61 void AdvanceCurrent();
62 char CharAt(
size_t i)
const;
63 bool ReadAheadTo(
size_t i)
const;
64 bool _ReadAheadTo(
size_t i)
const;
65 void StreamInUtf8()
const;
66 void StreamInUtf16()
const;
67 void StreamInUtf32()
const;
68 unsigned char GetNextByte()
const;
73 inline char Stream::CharAt(
size_t i)
const {
return m_readahead[i]; }
75 inline bool Stream::ReadAheadTo(
size_t i)
const {
76 if (m_readahead.size() > i)
78 return _ReadAheadTo(i);
82 #endif // STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66