C++ question!
I have a class that produces gigabytes of data per second by emitting it character by character due to the structure of the VCD format. I want to let consumers of that API stream data to: file, (shared) memory, socket, ...
How? I have a few options. 1/3
Conversation
1. take std::ostream&. pro: it's standard, i guess. con: have you seen iostream? con: wchar_t ofstream filenames subtly broken in some configurations con: hard to expose for FFI
2. take FILE*. pro: everyone knows that. con: no RAII. con: windows has no funopen() or fmemopen() 2/3
1
12
3. have an internal std::string, caller responsible for flushing buffer. pro: obvious. pro: works even on bare metal. pro: easy to expose via FFI. con: extra copy. con: caller has to care about spooling explicitly
Opinions?
8
12
looks like std::string is the only workable option, thanks everyone! this is what I already implemented but I wanted to see if I'm missing something
3
10
Replying to
Use an internal std::string to implement a ring buffer and provide an API producing std::string_view slices. Alternatively, use std::vector<char> and std::span<char>. Don't expose the internal collection type. You can convert to pointer + length slices for FFI.
Replying to
You could use a pair of iterators to represent the slice, which is closer to how FFI has to do it anyway.
1
Show replies

