Where is an input-output stream

Discussion of Common Lisp
Post Reply
Jasper
Posts: 209
Joined: Fri Oct 10, 2008 8:22 am
Location: Eindhoven, The Netherlands
Contact:

Where is an input-output stream

Post by Jasper » Wed Apr 11, 2012 10:17 am

I mean a stream you can write to, and when you read from it, the same comes out. Basically as in the example make-two-way-stream, but with less angering me by showing it can be done but only giving an horribly crappy way.

Basically i want a function that makes `(make-two-way-stream (make-string-input-stream "") (make-string-output-stream))` that makes an object so that `(close that-object)` ...closes it.

gugamilare
Posts: 406
Joined: Sat Mar 07, 2009 6:17 pm
Location: Brazil
Contact:

Re: Where is an input-output stream

Post by gugamilare » Wed Apr 11, 2012 2:03 pm

So, what you want is a virtual file?

I think the only way to do that would be to use Gray Streams or Simple Streams. I did it a while ago using the compatibility library Flexi-Streams using in-memory streams, but it ended not working quite the way I expected it to.

I hope you have more luck with it than I did :)

nuntius
Posts: 538
Joined: Sat Aug 09, 2008 10:44 am
Location: Newton, MA

Re: Where is an input-output stream

Post by nuntius » Wed Apr 11, 2012 4:06 pm

Unfortunately, CL only has a limited set of stream types built in. The file stream and string stream are the basic types. The broadcast-, concatenated-, echo-, synonym-, and two-way-stream types allow for chaining and composition.

If you want to use the stream API, and your pattern doesn't fit in the standard classes, then you probably want to use Gray streams.

Flexi-streams adds a layer on top of Gray streams that you probably don't need based on your current description.

Post Reply