Add io_buffer.{read,writ}er_slice methods
diff --git a/example/jsonfindptrs/jsonfindptrs.cc b/example/jsonfindptrs/jsonfindptrs.cc
index 0c3a999..de60115 100644
--- a/example/jsonfindptrs/jsonfindptrs.cc
+++ b/example/jsonfindptrs/jsonfindptrs.cc
@@ -354,8 +354,8 @@
return "main: src buffer is full";
}
while (true) {
- ssize_t n = read(m_input_file_descriptor, m_src.data.ptr + m_src.meta.wi,
- m_src.data.len - m_src.meta.wi);
+ ssize_t n = read(m_input_file_descriptor, m_src.writer_pointer(),
+ m_src.writer_length());
if (n >= 0) {
m_src.meta.wi += n;
m_src.meta.closed = n == 0;
diff --git a/example/jsonptr/jsonptr.cc b/example/jsonptr/jsonptr.cc
index 61e3f14..71dcc4c 100644
--- a/example/jsonptr/jsonptr.cc
+++ b/example/jsonptr/jsonptr.cc
@@ -876,8 +876,8 @@
return "main: g_src buffer is full";
}
while (true) {
- ssize_t n = read(g_input_file_descriptor, g_src.data.ptr + g_src.meta.wi,
- g_src.data.len - g_src.meta.wi);
+ ssize_t n = read(g_input_file_descriptor, g_src.writer_pointer(),
+ g_src.writer_length());
if (n >= 0) {
g_src.meta.wi += n;
g_src.meta.closed = n == 0;
@@ -892,12 +892,12 @@
const char* //
flush_dst() {
while (true) {
- size_t n = g_dst.meta.wi - g_dst.meta.ri;
+ size_t n = g_dst.reader_length();
if (n == 0) {
break;
}
const int stdout_fd = 1;
- ssize_t i = write(stdout_fd, g_dst.data.ptr + g_dst.meta.ri, n);
+ ssize_t i = write(stdout_fd, g_dst.reader_pointer(), n);
if (i >= 0) {
g_dst.meta.ri += i;
} else if (errno != EINTR) {
@@ -915,13 +915,13 @@
}
const uint8_t* p = static_cast<const uint8_t*>(s);
while (n > 0) {
- size_t i = g_dst.writer_available();
+ size_t i = g_dst.writer_length();
if (i == 0) {
const char* z = flush_dst();
if (z) {
return z;
}
- i = g_dst.writer_available();
+ i = g_dst.writer_length();
if (i == 0) {
return "main: g_dst buffer is full";
}
@@ -1316,9 +1316,7 @@
size_t len = g_json_output_byte_string_length;
while (len > 0) {
wuffs_base__transform__output o = wuffs_base__base_64__encode(
- wuffs_base__make_slice_u8(g_dst.data.ptr + g_dst.meta.wi,
- g_dst.writer_available()),
- wuffs_base__make_slice_u8(ptr, len), finish,
+ g_dst.writer_slice(), wuffs_base__make_slice_u8(ptr, len), finish,
WUFFS_BASE__BASE_64__URL_ALPHABET);
g_dst.meta.wi += o.num_dst;
ptr += o.num_src;
diff --git a/internal/cgen/base/io-public.h b/internal/cgen/base/io-public.h
index 6ae82aa..f62a717 100644
--- a/internal/cgen/base/io-public.h
+++ b/internal/cgen/base/io-public.h
@@ -38,10 +38,14 @@
#ifdef __cplusplus
inline bool is_valid() const;
inline void compact();
- inline uint64_t reader_available() const;
inline uint64_t reader_io_position() const;
- inline uint64_t writer_available() const;
+ inline size_t reader_length() const;
+ inline uint8_t* reader_pointer() const;
+ inline wuffs_base__slice_u8 reader_slice() const;
inline uint64_t writer_io_position() const;
+ inline size_t writer_length() const;
+ inline uint8_t* writer_pointer() const;
+ inline wuffs_base__slice_u8 writer_slice() const;
#endif // __cplusplus
} wuffs_base__io_buffer;
@@ -167,18 +171,25 @@
}
static inline uint64_t //
-wuffs_base__io_buffer__reader_available(const wuffs_base__io_buffer* buf) {
- return buf ? buf->meta.wi - buf->meta.ri : 0;
-}
-
-static inline uint64_t //
wuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {
return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
}
-static inline uint64_t //
-wuffs_base__io_buffer__writer_available(const wuffs_base__io_buffer* buf) {
- return buf ? buf->data.len - buf->meta.wi : 0;
+static inline size_t //
+wuffs_base__io_buffer__reader_length(const wuffs_base__io_buffer* buf) {
+ return buf ? buf->meta.wi - buf->meta.ri : 0;
+}
+
+static inline uint8_t* //
+wuffs_base__io_buffer__reader_pointer(const wuffs_base__io_buffer* buf) {
+ return buf ? (buf->data.ptr + buf->meta.ri) : NULL;
+}
+
+static inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {
+ return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,
+ buf->meta.wi - buf->meta.ri)
+ : wuffs_base__empty_slice_u8();
}
static inline uint64_t //
@@ -186,6 +197,23 @@
return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
}
+static inline size_t //
+wuffs_base__io_buffer__writer_length(const wuffs_base__io_buffer* buf) {
+ return buf ? buf->data.len - buf->meta.wi : 0;
+}
+
+static inline uint8_t* //
+wuffs_base__io_buffer__writer_pointer(const wuffs_base__io_buffer* buf) {
+ return buf ? (buf->data.ptr + buf->meta.wi) : NULL;
+}
+
+static inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {
+ return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,
+ buf->data.len - buf->meta.wi)
+ : wuffs_base__empty_slice_u8();
+}
+
#ifdef __cplusplus
inline bool //
@@ -199,18 +227,23 @@
}
inline uint64_t //
-wuffs_base__io_buffer::reader_available() const {
- return wuffs_base__io_buffer__reader_available(this);
-}
-
-inline uint64_t //
wuffs_base__io_buffer::reader_io_position() const {
return wuffs_base__io_buffer__reader_io_position(this);
}
-inline uint64_t //
-wuffs_base__io_buffer::writer_available() const {
- return wuffs_base__io_buffer__writer_available(this);
+inline size_t //
+wuffs_base__io_buffer::reader_length() const {
+ return wuffs_base__io_buffer__reader_length(this);
+}
+
+inline uint8_t* //
+wuffs_base__io_buffer::reader_pointer() const {
+ return wuffs_base__io_buffer__reader_pointer(this);
+}
+
+inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer::reader_slice() const {
+ return wuffs_base__io_buffer__reader_slice(this);
}
inline uint64_t //
@@ -218,4 +251,19 @@
return wuffs_base__io_buffer__writer_io_position(this);
}
+inline size_t //
+wuffs_base__io_buffer::writer_length() const {
+ return wuffs_base__io_buffer__writer_length(this);
+}
+
+inline uint8_t* //
+wuffs_base__io_buffer::writer_pointer() const {
+ return wuffs_base__io_buffer__writer_pointer(this);
+}
+
+inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer::writer_slice() const {
+ return wuffs_base__io_buffer__writer_slice(this);
+}
+
#endif // __cplusplus
diff --git a/internal/cgen/data/data.go b/internal/cgen/data/data.go
index 44573dd..1bdd6cc 100644
--- a/internal/cgen/data/data.go
+++ b/internal/cgen/data/data.go
@@ -454,12 +454,13 @@
""
const BaseIOPublicH = "" +
- "// ---------------- I/O\n//\n// See (/doc/note/io-input-output.md).\n\n// wuffs_base__io_buffer_meta is the metadata for a wuffs_base__io_buffer's\n// data.\ntypedef struct {\n size_t wi; // Write index. Invariant: wi <= len.\n size_t ri; // Read index. Invariant: ri <= wi.\n uint64_t pos; // Position of the buffer start relative to the stream start.\n bool closed; // No further writes are expected.\n} wuffs_base__io_buffer_meta;\n\n// wuffs_base__io_buffer is a 1-dimensional buffer (a pointer and length) plus\n// additional metadata.\n//\n// A value with all fields zero is a valid, empty buffer.\ntypedef struct {\n wuffs_base__slice_u8 data;\n wuffs_base__io_buffer_meta meta;\n\n#ifdef __cplusplus\n inline bool is_valid() const;\n inline void compact();\n inline uint64_t reader_available() const;\n inline uint64_t reader_io_position() const;\n inline uint64_t writer_available() const;\n inline uint64_t writer_io_position() const;\n#endif // __cplusplus\n\n} wuffs_base__io_buffer;\n\nstatic inline wuffs_base__io_buf" +
- "fer //\nwuffs_base__make_io_buffer(wuffs_base__slice_u8 data,\n wuffs_base__io_buffer_meta meta) {\n wuffs_base__io_buffer ret;\n ret.data = data;\n ret.meta = meta;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta //\nwuffs_base__make_io_buffer_meta(size_t wi,\n size_t ri,\n uint64_t pos,\n bool closed) {\n wuffs_base__io_buffer_meta ret;\n ret.wi = wi;\n ret.ri = ri;\n ret.pos = pos;\n ret.closed = closed;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__ptr_u8__reader(uint8_t* ptr, size_t len, bool closed) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = ptr;\n ret.data.len = len;\n ret.meta.wi = len;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = closed;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__ptr_u8__writer(uint8_t* ptr, size_t len) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = ptr;\n ret.data.len = len;\n ret.meta.wi = 0" +
- ";\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = false;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__slice_u8__reader(wuffs_base__slice_u8 s, bool closed) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = s.ptr;\n ret.data.len = s.len;\n ret.meta.wi = s.len;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = closed;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__slice_u8__writer(wuffs_base__slice_u8 s) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = s.ptr;\n ret.data.len = s.len;\n ret.meta.wi = 0;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = false;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__empty_io_buffer() {\n wuffs_base__io_buffer ret;\n ret.data.ptr = NULL;\n ret.data.len = 0;\n ret.meta.wi = 0;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = false;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta //\nwuffs_base__empty_io_buffer_meta() {\n wuffs_base__io_buffer_meta ret;\n ret.wi = " +
- "0;\n ret.ri = 0;\n ret.pos = 0;\n ret.closed = false;\n return ret;\n}\n\nstatic inline bool //\nwuffs_base__io_buffer__is_valid(const wuffs_base__io_buffer* buf) {\n if (buf) {\n if (buf->data.ptr) {\n return (buf->meta.ri <= buf->meta.wi) && (buf->meta.wi <= buf->data.len);\n } else {\n return (buf->meta.ri == 0) && (buf->meta.wi == 0) && (buf->data.len == 0);\n }\n }\n return false;\n}\n\n// wuffs_base__io_buffer__compact moves any written but unread bytes to the\n// start of the buffer.\nstatic inline void //\nwuffs_base__io_buffer__compact(wuffs_base__io_buffer* buf) {\n if (!buf || (buf->meta.ri == 0)) {\n return;\n }\n buf->meta.pos = wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri);\n size_t n = buf->meta.wi - buf->meta.ri;\n if (n != 0) {\n memmove(buf->data.ptr, buf->data.ptr + buf->meta.ri, n);\n }\n buf->meta.wi = n;\n buf->meta.ri = 0;\n}\n\nstatic inline uint64_t //\nwuffs_base__io_buffer__reader_available(const wuffs_base__io_buffer* buf) {\n return buf ? buf->meta.wi - buf->meta.ri" +
- " : 0;\n}\n\nstatic inline uint64_t //\nwuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {\n return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;\n}\n\nstatic inline uint64_t //\nwuffs_base__io_buffer__writer_available(const wuffs_base__io_buffer* buf) {\n return buf ? buf->data.len - buf->meta.wi : 0;\n}\n\nstatic inline uint64_t //\nwuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {\n return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;\n}\n\n#ifdef __cplusplus\n\ninline bool //\nwuffs_base__io_buffer::is_valid() const {\n return wuffs_base__io_buffer__is_valid(this);\n}\n\ninline void //\nwuffs_base__io_buffer::compact() {\n wuffs_base__io_buffer__compact(this);\n}\n\ninline uint64_t //\nwuffs_base__io_buffer::reader_available() const {\n return wuffs_base__io_buffer__reader_available(this);\n}\n\ninline uint64_t //\nwuffs_base__io_buffer::reader_io_position() const {\n return wuffs_base__io_buffer__reader_io_position(this);\n}\n\ninline uint" +
- "64_t //\nwuffs_base__io_buffer::writer_available() const {\n return wuffs_base__io_buffer__writer_available(this);\n}\n\ninline uint64_t //\nwuffs_base__io_buffer::writer_io_position() const {\n return wuffs_base__io_buffer__writer_io_position(this);\n}\n\n#endif // __cplusplus\n" +
+ "// ---------------- I/O\n//\n// See (/doc/note/io-input-output.md).\n\n// wuffs_base__io_buffer_meta is the metadata for a wuffs_base__io_buffer's\n// data.\ntypedef struct {\n size_t wi; // Write index. Invariant: wi <= len.\n size_t ri; // Read index. Invariant: ri <= wi.\n uint64_t pos; // Position of the buffer start relative to the stream start.\n bool closed; // No further writes are expected.\n} wuffs_base__io_buffer_meta;\n\n// wuffs_base__io_buffer is a 1-dimensional buffer (a pointer and length) plus\n// additional metadata.\n//\n// A value with all fields zero is a valid, empty buffer.\ntypedef struct {\n wuffs_base__slice_u8 data;\n wuffs_base__io_buffer_meta meta;\n\n#ifdef __cplusplus\n inline bool is_valid() const;\n inline void compact();\n inline uint64_t reader_io_position() const;\n inline size_t reader_length() const;\n inline uint8_t* reader_pointer() const;\n inline wuffs_base__slice_u8 reader_slice() const;\n inline uint64_t writer_io_position() const;\n inline size_t writer_length() const" +
+ ";\n inline uint8_t* writer_pointer() const;\n inline wuffs_base__slice_u8 writer_slice() const;\n#endif // __cplusplus\n\n} wuffs_base__io_buffer;\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__make_io_buffer(wuffs_base__slice_u8 data,\n wuffs_base__io_buffer_meta meta) {\n wuffs_base__io_buffer ret;\n ret.data = data;\n ret.meta = meta;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta //\nwuffs_base__make_io_buffer_meta(size_t wi,\n size_t ri,\n uint64_t pos,\n bool closed) {\n wuffs_base__io_buffer_meta ret;\n ret.wi = wi;\n ret.ri = ri;\n ret.pos = pos;\n ret.closed = closed;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__ptr_u8__reader(uint8_t* ptr, size_t len, bool closed) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = ptr;\n ret.data.len = len;\n ret.meta.wi = len;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = closed;\n return ret;\n}\n\nstatic " +
+ "inline wuffs_base__io_buffer //\nwuffs_base__ptr_u8__writer(uint8_t* ptr, size_t len) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = ptr;\n ret.data.len = len;\n ret.meta.wi = 0;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = false;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__slice_u8__reader(wuffs_base__slice_u8 s, bool closed) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = s.ptr;\n ret.data.len = s.len;\n ret.meta.wi = s.len;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = closed;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__slice_u8__writer(wuffs_base__slice_u8 s) {\n wuffs_base__io_buffer ret;\n ret.data.ptr = s.ptr;\n ret.data.len = s.len;\n ret.meta.wi = 0;\n ret.meta.ri = 0;\n ret.meta.pos = 0;\n ret.meta.closed = false;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer //\nwuffs_base__empty_io_buffer() {\n wuffs_base__io_buffer ret;\n ret.data.ptr = NULL;\n ret.data.len = 0;\n ret.meta.wi = 0;\n ret.meta.ri = 0;\n ret.meta.po" +
+ "s = 0;\n ret.meta.closed = false;\n return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta //\nwuffs_base__empty_io_buffer_meta() {\n wuffs_base__io_buffer_meta ret;\n ret.wi = 0;\n ret.ri = 0;\n ret.pos = 0;\n ret.closed = false;\n return ret;\n}\n\nstatic inline bool //\nwuffs_base__io_buffer__is_valid(const wuffs_base__io_buffer* buf) {\n if (buf) {\n if (buf->data.ptr) {\n return (buf->meta.ri <= buf->meta.wi) && (buf->meta.wi <= buf->data.len);\n } else {\n return (buf->meta.ri == 0) && (buf->meta.wi == 0) && (buf->data.len == 0);\n }\n }\n return false;\n}\n\n// wuffs_base__io_buffer__compact moves any written but unread bytes to the\n// start of the buffer.\nstatic inline void //\nwuffs_base__io_buffer__compact(wuffs_base__io_buffer* buf) {\n if (!buf || (buf->meta.ri == 0)) {\n return;\n }\n buf->meta.pos = wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri);\n size_t n = buf->meta.wi - buf->meta.ri;\n if (n != 0) {\n memmove(buf->data.ptr, buf->data.ptr + buf->meta.ri, n);\n }\n buf->met" +
+ "a.wi = n;\n buf->meta.ri = 0;\n}\n\nstatic inline uint64_t //\nwuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {\n return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;\n}\n\nstatic inline size_t //\nwuffs_base__io_buffer__reader_length(const wuffs_base__io_buffer* buf) {\n return buf ? buf->meta.wi - buf->meta.ri : 0;\n}\n\nstatic inline uint8_t* //\nwuffs_base__io_buffer__reader_pointer(const wuffs_base__io_buffer* buf) {\n return buf ? (buf->data.ptr + buf->meta.ri) : NULL;\n}\n\nstatic inline wuffs_base__slice_u8 //\nwuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {\n return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,\n buf->meta.wi - buf->meta.ri)\n : wuffs_base__empty_slice_u8();\n}\n\nstatic inline uint64_t //\nwuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {\n return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;\n}\n\nstatic inline size_t" +
+ " //\nwuffs_base__io_buffer__writer_length(const wuffs_base__io_buffer* buf) {\n return buf ? buf->data.len - buf->meta.wi : 0;\n}\n\nstatic inline uint8_t* //\nwuffs_base__io_buffer__writer_pointer(const wuffs_base__io_buffer* buf) {\n return buf ? (buf->data.ptr + buf->meta.wi) : NULL;\n}\n\nstatic inline wuffs_base__slice_u8 //\nwuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {\n return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,\n buf->data.len - buf->meta.wi)\n : wuffs_base__empty_slice_u8();\n}\n\n#ifdef __cplusplus\n\ninline bool //\nwuffs_base__io_buffer::is_valid() const {\n return wuffs_base__io_buffer__is_valid(this);\n}\n\ninline void //\nwuffs_base__io_buffer::compact() {\n wuffs_base__io_buffer__compact(this);\n}\n\ninline uint64_t //\nwuffs_base__io_buffer::reader_io_position() const {\n return wuffs_base__io_buffer__reader_io_position(this);\n}\n\ninline size_t //\nwuffs_base__io_buffer::reader_length() const {\n return wuffs" +
+ "_base__io_buffer__reader_length(this);\n}\n\ninline uint8_t* //\nwuffs_base__io_buffer::reader_pointer() const {\n return wuffs_base__io_buffer__reader_pointer(this);\n}\n\ninline wuffs_base__slice_u8 //\nwuffs_base__io_buffer::reader_slice() const {\n return wuffs_base__io_buffer__reader_slice(this);\n}\n\ninline uint64_t //\nwuffs_base__io_buffer::writer_io_position() const {\n return wuffs_base__io_buffer__writer_io_position(this);\n}\n\ninline size_t //\nwuffs_base__io_buffer::writer_length() const {\n return wuffs_base__io_buffer__writer_length(this);\n}\n\ninline uint8_t* //\nwuffs_base__io_buffer::writer_pointer() const {\n return wuffs_base__io_buffer__writer_pointer(this);\n}\n\ninline wuffs_base__slice_u8 //\nwuffs_base__io_buffer::writer_slice() const {\n return wuffs_base__io_buffer__writer_slice(this);\n}\n\n#endif // __cplusplus\n" +
""
const BaseRangePrivateH = "" +
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 3f89e62..0b7a5d0 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -1902,10 +1902,14 @@
#ifdef __cplusplus
inline bool is_valid() const;
inline void compact();
- inline uint64_t reader_available() const;
inline uint64_t reader_io_position() const;
- inline uint64_t writer_available() const;
+ inline size_t reader_length() const;
+ inline uint8_t* reader_pointer() const;
+ inline wuffs_base__slice_u8 reader_slice() const;
inline uint64_t writer_io_position() const;
+ inline size_t writer_length() const;
+ inline uint8_t* writer_pointer() const;
+ inline wuffs_base__slice_u8 writer_slice() const;
#endif // __cplusplus
} wuffs_base__io_buffer;
@@ -2031,18 +2035,25 @@
}
static inline uint64_t //
-wuffs_base__io_buffer__reader_available(const wuffs_base__io_buffer* buf) {
- return buf ? buf->meta.wi - buf->meta.ri : 0;
-}
-
-static inline uint64_t //
wuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {
return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
}
-static inline uint64_t //
-wuffs_base__io_buffer__writer_available(const wuffs_base__io_buffer* buf) {
- return buf ? buf->data.len - buf->meta.wi : 0;
+static inline size_t //
+wuffs_base__io_buffer__reader_length(const wuffs_base__io_buffer* buf) {
+ return buf ? buf->meta.wi - buf->meta.ri : 0;
+}
+
+static inline uint8_t* //
+wuffs_base__io_buffer__reader_pointer(const wuffs_base__io_buffer* buf) {
+ return buf ? (buf->data.ptr + buf->meta.ri) : NULL;
+}
+
+static inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {
+ return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,
+ buf->meta.wi - buf->meta.ri)
+ : wuffs_base__empty_slice_u8();
}
static inline uint64_t //
@@ -2050,6 +2061,23 @@
return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
}
+static inline size_t //
+wuffs_base__io_buffer__writer_length(const wuffs_base__io_buffer* buf) {
+ return buf ? buf->data.len - buf->meta.wi : 0;
+}
+
+static inline uint8_t* //
+wuffs_base__io_buffer__writer_pointer(const wuffs_base__io_buffer* buf) {
+ return buf ? (buf->data.ptr + buf->meta.wi) : NULL;
+}
+
+static inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {
+ return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,
+ buf->data.len - buf->meta.wi)
+ : wuffs_base__empty_slice_u8();
+}
+
#ifdef __cplusplus
inline bool //
@@ -2063,18 +2091,23 @@
}
inline uint64_t //
-wuffs_base__io_buffer::reader_available() const {
- return wuffs_base__io_buffer__reader_available(this);
-}
-
-inline uint64_t //
wuffs_base__io_buffer::reader_io_position() const {
return wuffs_base__io_buffer__reader_io_position(this);
}
-inline uint64_t //
-wuffs_base__io_buffer::writer_available() const {
- return wuffs_base__io_buffer__writer_available(this);
+inline size_t //
+wuffs_base__io_buffer::reader_length() const {
+ return wuffs_base__io_buffer__reader_length(this);
+}
+
+inline uint8_t* //
+wuffs_base__io_buffer::reader_pointer() const {
+ return wuffs_base__io_buffer__reader_pointer(this);
+}
+
+inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer::reader_slice() const {
+ return wuffs_base__io_buffer__reader_slice(this);
}
inline uint64_t //
@@ -2082,6 +2115,21 @@
return wuffs_base__io_buffer__writer_io_position(this);
}
+inline size_t //
+wuffs_base__io_buffer::writer_length() const {
+ return wuffs_base__io_buffer__writer_length(this);
+}
+
+inline uint8_t* //
+wuffs_base__io_buffer::writer_pointer() const {
+ return wuffs_base__io_buffer__writer_pointer(this);
+}
+
+inline wuffs_base__slice_u8 //
+wuffs_base__io_buffer::writer_slice() const {
+ return wuffs_base__io_buffer__writer_slice(this);
+}
+
#endif // __cplusplus
// ---------------- Tokens
diff --git a/test/c/std/gif.c b/test/c/std/gif.c
index a13ad0e..ca3e510 100644
--- a/test/c/std/gif.c
+++ b/test/c/std/gif.c
@@ -1372,7 +1372,7 @@
"metadata (vs buffer size)",
iccp, xmp);
}
- if (n > wuffs_base__io_buffer__reader_available(&src)) {
+ if (n > wuffs_base__io_buffer__reader_length(&src)) {
RETURN_FAIL(
"metadata chunk length (iccp=%d, xmp=%d): too much "
"metadata (vs available)",