BufReader

is a buffered I/O wrapper that works with any stream type implementing the stream-read and stream-write interfaces.

Interfaces

Implement these for your stream type to use BufReader:

(definterface stream-read (Fn [&a &(Array Byte) Int] Int))
(definterface stream-write (Fn [&a &(Array Byte)] Int))
(definterface stream-close (Fn [a] ()))

Usage

; Wrap a TcpStream (if socket library implements the interfaces)
(let [br (BufReader.wrap stream)]
  (do
    (match (BufReader.read-line &br)
      (Result.Success line) (println* &line)
      (Result.Error e) (IO.errorln &e))
    (BufReader.delete br)))

clear-read

external

(Fn [(Ref BufReader a)] ())

discards all buffered read data.

clear-write

external

(Fn [(Ref BufReader a)] ())

discards all buffered write data without sending.

copy

external

(Fn [(Ref BufReader a)] BufReader)

delete

external

(Fn [BufReader] ())

closes the underlying stream and frees all buffers.

flush

defn

(Fn [(Ref BufReader a)] (Result () String))

                        (flush br)
                    

sends all buffered write data. Returns (Result () String).

read-append

defn

(Fn [(Ref BufReader a), (Ref (Array Byte) b)] (Result Int String))

                        (read-append br buf)
                    

reads available data and appends to the byte buffer. Returns (Result Int String) with the number of bytes read.

read-line

defn

(Fn [(Ref BufReader a)] (Result String String))

                        (read-line br)
                    

reads until a newline character, returning the line including the delimiter. Returns (Result String String).

read-n

defn

(Fn [(Ref BufReader a), Int] (Result (Array Byte) String))

                        (read-n br n)
                    

reads exactly n bytes. Returns (Result (Array Byte) String). May return fewer bytes on EOF.

read-until

defn

(Fn [(Ref BufReader a), Char] (Result String String))

                        (read-until br delim)
                    

reads until the given delimiter byte. Returns (Result String String).

write

defn

(Fn [(Ref BufReader a), (Ref String b)] Int)

                        (write br data)
                    

buffers string data for writing. Call flush to send.

write-bytes

defn

(Fn [(Ref BufReader a), (Ref (Array Byte) b)] Int)

                        (write-bytes br data)
                    

buffers binary data for writing. Call flush to send.