Subject: Re: [SG16-Unicode] std::byte based I/O library
From: Lyberta (lyberta_at_[hidden])
Date: 2019-02-15 21:00:00
> Dear Lyberta,
> Apologies for the delay. I think the point I'm trying to make is that
> your stream type should not include the state at all.
Well, first, I think we should define what kind of state there is. The
essential state is the current position in the stream and possible error
state maybe. iostreams have these 4 bits of std::ios_base::iostate that
I still use in my library for now.
Another kind of state is format state that defined how IO should be
> The only operations the stream type has is "std::io::read( stream,
> buffer, length )" and "std::io::write( stream, bytes, length )".
> else on the stream object should be for the sole purpose of supporting
> those 2 operations, and literally nothing else. (Maybe async versions as
> well, etc.)
My design has raw read and write as member functions:
void read(std::span<std::byte> buffer);
void write(std::span<const std::byte> buffer);
std::io::read and std::io::write are customization points.
> Note the proper separation of concerns. Now, stream has one job and
> one job only: writing and reading bytes. The serializer can be made to
> all the customization points in the world, all the state it wants, and all
> the functionality, but now none of it gets in the way of whatever the
> stream object is supposed to be doing. The serializer's only job is to ask
> things that get serialized:
I agree that if we want to make a separate type for reading text more
akin to iostreams, it seems like a good idea. Not sure about other types.
I guess I'm gonna write a synopsis of my design so we can have a more
SG16 list run by herb.sutter at gmail.com