From 18383b973877f4c30c878414a51c0b44ea5dafe4 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Wed, 22 Apr 2020 19:33:09 -0700 Subject: feat: added generic interfaces for I/O --- include/libn.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'include/libn.h') diff --git a/include/libn.h b/include/libn.h index c8d510f..67d131d 100644 --- a/include/libn.h +++ b/include/libn.h @@ -107,6 +107,48 @@ vlong io·write(Stream *s, int sz, int n, void *buf); int io·flush(Stream *s); int io·seek(Stream *s, long off, enum SeekPos origin); +/* Generic I/O interfaces */ + +typedef struct io·Reader +{ + int (*read)(int n, void *buf); +}; + +typedef struct io·Peeker +{ + byte (*get)(void); + error (*unget)(byte); +}; + +typedef struct io·FullReader +{ + io·Reader; + io·Peeker; +} io·FullReader; + +typedef struct io·Writer +{ + int (*write)(int n, void *buf); +} io·Writer; + +typedef struct io·Putter +{ + error (*put)(byte); + int (*putstr)(string); +} io·Putter; + +typedef struct io·FullWriter +{ + io·Writer; + io·Putter; +} io·FullWriter; + +typedef struct io·ReadWriter +{ + io·Reader; + io·Writer; +} io·ReadWriter; + // ----------------------------------------------------------------------------- // Buffered I/O -- cgit v1.2.1