aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/yaml-cpp/src/stream.h
blob: 410051b8336f2e378c0f019f80daee38c94dbffe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 
#define STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 
 
#if defined(_MSC_VER) ||                                            \ 
    (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ 
     (__GNUC__ >= 4))  // GCC supports "pragma once" correctly since 3.4 
#pragma once 
#endif 
 
#include "yaml-cpp/noncopyable.h" 
#include "yaml-cpp/mark.h" 
#include <cstddef> 
#include <deque> 
#include <ios> 
#include <iostream> 
#include <set> 
#include <string> 
 
namespace YAML { 
class Stream : private noncopyable { 
 public: 
  friend class StreamCharSource; 
 
  Stream(std::istream& input); 
  ~Stream(); 
 
  operator bool() const; 
  bool operator!() const { return !static_cast<bool>(*this); } 
 
  char peek() const; 
  char get(); 
  std::string get(int n); 
  void eat(int n = 1); 
 
  static char eof() { return 0x04; } 
 
  const Mark mark() const { return m_mark; } 
  int pos() const { return m_mark.pos; } 
  int line() const { return m_mark.line; } 
  int column() const { return m_mark.column; } 
  void ResetColumn() { m_mark.column = 0; } 
 
 private: 
  enum CharacterSet { utf8, utf16le, utf16be, utf32le, utf32be }; 
 
  std::istream& m_input; 
  Mark m_mark; 
 
  CharacterSet m_charSet; 
  mutable std::deque<char> m_readahead; 
  unsigned char* const m_pPrefetched; 
  mutable size_t m_nPrefetchedAvailable; 
  mutable size_t m_nPrefetchedUsed; 
 
  void AdvanceCurrent(); 
  char CharAt(size_t i) const; 
  bool ReadAheadTo(size_t i) const; 
  bool _ReadAheadTo(size_t i) const; 
  void StreamInUtf8() const; 
  void StreamInUtf16() const; 
  void StreamInUtf32() const; 
  unsigned char GetNextByte() const; 
}; 
 
// CharAt 
// . Unchecked access 
inline char Stream::CharAt(size_t i) const { return m_readahead[i]; } 
 
inline bool Stream::ReadAheadTo(size_t i) const { 
  if (m_readahead.size() > i) 
    return true; 
  return _ReadAheadTo(i); 
} 
} 
 
#endif  // STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66