Loading [MathJax]/extensions/tex2jax.js
Free Electron
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ext/yaml/yaml-cpp/src/stream.h
1 #ifndef STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define STREAM_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 "yaml-cpp/mark.h"
11 #include <cstddef>
12 #include <deque>
13 #include <ios>
14 #include <iostream>
15 #include <set>
16 #include <string>
17 
18 namespace YAML {
19 
20 class StreamCharSource;
21 
22 class Stream {
23  public:
24  friend class StreamCharSource;
25 
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;
31  ~Stream();
32 
33  operator bool() const;
34  bool operator!() const { return !static_cast<bool>(*this); }
35 
36  char peek() const;
37  char get();
38  std::string get(int n);
39  void eat(int n = 1);
40 
41  static char eof() { return 0x04; }
42 
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; }
48 
49  private:
50  enum CharacterSet { utf8, utf16le, utf16be, utf32le, utf32be };
51 
52  std::istream& m_input;
53  Mark m_mark;
54 
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;
60 
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;
69 };
70 
71 // CharAt
72 // . Unchecked access
73 inline char Stream::CharAt(size_t i) const { return m_readahead[i]; }
74 
75 inline bool Stream::ReadAheadTo(size_t i) const {
76  if (m_readahead.size() > i)
77  return true;
78  return _ReadAheadTo(i);
79 }
80 } // namespace YAML
81 
82 #endif // STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66
Definition: anchor.h:12