8 #ifndef WPIUTIL_WPI_RAW_ISTREAM_H_
9 #define WPIUTIL_WPI_RAW_ISTREAM_H_
16 #include <system_error>
19 #include "wpi/ArrayRef.h"
20 #include "wpi/SmallVector.h"
21 #include "wpi/StringRef.h"
22 #include "wpi/Twine.h"
51 size_t readsome(
void* data,
size_t len) {
52 size_t readlen = std::min(in_avail(), len);
53 if (readlen == 0)
return 0;
54 read_impl(data, readlen);
59 size_t old_size = buf.size();
61 read_impl(&buf[old_size], len);
62 buf.resize(old_size + m_read_count);
67 size_t old_size = buf.size();
69 read_impl(&buf[old_size], len);
70 buf.resize(old_size + m_read_count);
74 raw_istream& readinto(std::vector<char>& buf,
size_t len) {
75 size_t old_size = buf.size();
76 buf.insert(buf.end(), len, 0);
77 read_impl(&buf[old_size], len);
78 buf.resize(old_size + m_read_count);
82 raw_istream& readinto(std::vector<uint8_t>& buf,
size_t len) {
83 size_t old_size = buf.size();
84 buf.insert(buf.end(), len, 0);
85 read_impl(&buf[old_size], len);
86 buf.resize(old_size + m_read_count);
90 raw_istream& readinto(std::string& buf,
size_t len) {
91 size_t old_size = buf.size();
92 buf.insert(buf.end(), len, 0);
93 read_impl(&buf[old_size], len);
94 buf.resize(old_size + m_read_count);
106 virtual void close() = 0;
111 virtual size_t in_avail()
const = 0;
114 size_t read_count()
const {
return m_read_count; }
116 bool has_error()
const {
return m_error; }
117 void clear_error() { m_error =
false; }
123 void error_detected() { m_error =
true; }
124 void set_read_count(
size_t count) { m_read_count =
count; }
127 virtual void read_impl(
void* data,
size_t len) = 0;
129 bool m_error =
false;
130 size_t m_read_count = 0;
144 : m_cur(str), m_left(std::strlen(str)) {}
145 raw_mem_istream(
const char* mem,
size_t len) : m_cur(mem), m_left(len) {}
146 void close()
override;
147 size_t in_avail()
const override;
150 void read_impl(
void* data,
size_t len)
override;
159 size_t bufSize = 4096);
162 void close()
override;
163 size_t in_avail()
const override;
166 void read_impl(
void* data,
size_t len)
override;
178 #endif // WPIUTIL_WPI_RAW_ISTREAM_H_
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:41
namespace to hold default to_json function
Definition: SmallString.h:21
Definition: raw_istream.h:26
Definition: raw_istream.h:156
Definition: raw_istream.h:133
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
Definition: SmallVector.h:402
auto count(R &&Range, const E &Element) -> typename std::iterator_traits< decltype(adl_begin(Range))>::difference_type
Wrapper function around std::count to count the number of times an element Element occurs in the give...
Definition: STLExtras.h:941
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:79
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:149