Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
string_reader.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/meta/core.h"
10#include "di/meta/vocab.h"
11#include "di/util/bit_cast.h"
12#include "di/util/declval.h"
15
16namespace di::io {
17template<concepts::detail::ConstantString String>
19public:
20 template<typename U>
22 constexpr explicit StringReader(U&& buffer) : m_buffer(util::forward<U>(buffer)) {}
23
25 auto to_read = container::min(data.size(), m_buffer.size_bytes() - m_byte_offset);
26
27 for (auto i : view::range(to_read)) {
28 data[i] = read_byte();
29 }
30
31 return to_read;
32 }
33
34private:
35 constexpr auto read_byte() -> byte {
37 constexpr auto code_unit_size = sizeof(CodeUnit);
38
39 auto word_index = m_byte_offset / code_unit_size;
40 auto byte_index = m_byte_offset % code_unit_size;
41
42 auto code_units = m_buffer.span();
43 auto code_unit = code_units[word_index];
44 auto as_bytes = util::bit_cast<vocab::Array<byte, code_unit_size>>(code_unit);
45
46 m_byte_offset++;
47 return as_bytes[byte_index];
48 }
49
50 String m_buffer;
51 usize m_byte_offset { 0 };
52};
53
54template<typename String>
56}
57
58namespace di {
60}
constexpr auto span()
Definition string_impl.h:22
Definition string_reader.h:18
constexpr auto read_some(vocab::Span< byte > data) -> usize
Definition string_reader.h:24
constexpr StringReader(U &&buffer)
Definition string_reader.h:22
Definition span_forward_declaration.h:10
Definition operations.h:11
constexpr auto min
Definition min.h:47
string::StringImpl< string::Utf8Encoding > String
Definition string.h:11
Definition reader.h:7
StringReader(String &&) -> StringReader< String >
RemoveCVRef< T >::CodeUnit EncodingCodeUnit
Definition encoding.h:16
size_t usize
Definition integers.h:33
Definition zstring_parser.h:9
constexpr auto as_bytes
Definition as_bytes.h:16
constexpr auto data
Definition data.h:51