From 83cd586ea304d6f6aa190c65ee796baaba1941a7 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 23 Sep 2021 12:35:04 -0700 Subject: feat: improved interface of map macro --- include/libn.h | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'include/libn.h') diff --git a/include/libn.h b/include/libn.h index 5d557ce..2cf29c7 100644 --- a/include/libn.h +++ b/include/libn.h @@ -57,7 +57,7 @@ typedef struct mem·Allocator { void *(*alloc)(void *heap, uint n, ulong size); void (*free)(void *heap, void *ptr); } mem·Allocator; -extern mem·Allocator sys·Memory; +extern mem·Allocator sys·Memory; typedef struct mem·Reallocator { void *(*alloc)(void *iface, uint n, ulong size); @@ -159,6 +159,7 @@ enum SeekPos seek·end = SEEK_END }; +/* XXX: change casing */ enum { ReadOK = R_OK, @@ -180,6 +181,7 @@ int io·putstring(io·Stream *s, string str); int io·write(io·Stream *s, int sz, int n, void *buf); int io·flush(io·Stream *s); int io·seek(io·Stream *s, long off, enum SeekPos whence); +long io·tell(io·Stream *s); /* basic os helpers */ int os·exists(byte *path, int flag); @@ -193,13 +195,6 @@ typedef struct io·Reader } io·Reader; extern io·Reader sys·Reader; -/* -typedef struct io·LineReader -{ - int (*readln)(void*, int n, void *buf); -} io·LineReader; -*/ - typedef struct io·Peeker { byte (*get)(void*); @@ -207,12 +202,26 @@ typedef struct io·Peeker } io·Peeker; extern io·Peeker sys·Peeker; -typedef struct io·FullReader +typedef struct io·Seeker +{ + int (*seek)(void *skr, long off, enum SeekPos whence); + long (*tell)(void *skr); +} io·Seeker; +extern io·Seeker sys·Seeker; + +typedef struct io·SeekReader +{ + io·Seeker; + io·Reader; +} io·SeekReader; +extern io·SeekReader sys·SeekReader; + +typedef struct io·PeekReader { io·Reader; io·Peeker; -} io·FullReader; -extern io·FullReader sys·FullReader; +} io·PeekReader; +extern io·PeekReader sys·PeekReader; typedef struct io·Writer { @@ -227,12 +236,12 @@ typedef struct io·Putter } io·Putter; extern io·Putter sys·Putter; -typedef struct io·FullWriter +typedef struct io·PutWriter { io·Writer; io·Putter; -} io·FullWriter; -extern io·FullWriter sys·FullWriter; +} io·PutWriter; +extern io·PutWriter sys·PutWriter; typedef struct io·ReadWriter { @@ -348,13 +357,15 @@ typedef void gz·Stream; /* interfaces */ extern io·Reader gz·Reader; extern io·Peeker gz·Peeker; -extern io·FullReader gz·FullReader; +extern io·Seeker gz·Seeker; +extern io·SeekReader gz·SeekReader; +extern io·PeekReader gz·PeekReader; extern io·Writer gz·Writer; extern io·Putter gz·Putter; -extern io·FullWriter gz·FullWriter; +extern io·PutWriter gz·PutWriter; extern io·ReadWriter gz·ReadWriter; - + gz·Stream *gz·open(byte *path, byte *mode); error gz·close(gz·Stream* s); int gz·read(gz·Stream *s, int sz, int n, void* buf); @@ -366,7 +377,8 @@ error gz·putbyte(gz·Stream *s, byte str); error gz·putstring(gz·Stream *s, byte *str); int gz·printf(gz·Stream *s, byte *fmt, ...); error gz·flush(gz·Stream *s); -vlong gz·seek(gz·Stream *s, long off, enum SeekPos whence); +int gz·seek(gz·Stream *s, long off, enum SeekPos whence); +long gz·tell(gz·Stream *s); // ----------------------------------------------------------------------------- // libjson -- cgit v1.2.1