Skip to content

fukamachi/circular-streams

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Circular-Streams - Circularly readable streams for Common Lisp

Build Status Coverage Status

Usage

(defparameter *stream*
              (flex:make-in-memory-input-stream
               #(72 101 108 108 111)))

(defparameter *circular-stream*
              (make-circular-stream *stream*))

(read-char *circular-stream*)          ;=> #\H
(read-char *circular-stream*)          ;=> #\e
(read-char *circular-stream*)          ;=> #\l
(read-char *circular-stream*)          ;=> #\l
(read-char *circular-stream*)          ;=> #\o
(read-char *circular-stream* nil :eof) ;=> :eof

(let ((buf (make-array 5 :adjustable t :fill-pointer 5)))
  (read-sequence buf *circular-stream*)
  (flex:octets-to-string buf))
;=> "Hello"

Description

Circular-Streams allows you to read streams circularly by wrapping real streams. Once you reach end-of-file of a stream, it's file position will be reset to 0 and you're able to read it again.

Note this library can treat only octet streams which has a method read-byte. This might be expanded in the future.

This library was originally written by Tomohiro Matsuyama as a part of Clack, Eitaro Fukamachi ported it with some improvements.

API Reference

[Class] circular-input-stream

Class for circular input streams. make-circular-input-stream is available to create an instance.

[Function] make-circular-stream

Creates circular-input-stream and returns it.

Author

Copyright

Copyright (c) 2011-2012 Tomohiro Matsuyama ([email protected])
Copyright (c) 2012-2016 Eitaro Fukamachi ([email protected])

License

Licensed under the LLGPL License.

See Also

About

Circularly readable streams for Common Lisp.

Resources

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published