Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
api:buffer [2016/06/19 03:33]
payonel [Static Methods]
api:buffer [2016/06/19 07:56] (current)
payonel [Instance Methods]
Line 12: Line 12:
  
   Creates a new buffered stream, wrapping `stream` with read-write `mode`. `mode` can be readonly (r or `nil`), read-write (rw), or write-only (w). Read about the stream [[api:​buffer#​interface_methods|interface methods]] required on the `stream` object.   Creates a new buffered stream, wrapping `stream` with read-write `mode`. `mode` can be readonly (r or `nil`), read-write (rw), or write-only (w). Read about the stream [[api:​buffer#​interface_methods|interface methods]] required on the `stream` object.
-  ​+
 Instance Methods Instance Methods
 ----------- -----------
Line 47: Line 47:
 - `b:​lines([line_formats...]) string array` - `b:​lines([line_formats...]) string array`
  
-  Returns a function iterator which reads from the stream until it reaches nil. On each read, the `line_formats` list of args ais passed to `stream:​read(...)`. The overwhelmingly typical use is to not define `line_formats`,​ i.e. passing no args to `lines()`. The default behavior (i..e without `line_formats`) is to read a "​line"​ at a time from the stream.+  Returns a function iterator which reads from the stream until it reaches nil. On each read, the `line_formats` list of args as passed to `stream:​read(...)`. The overwhelmingly typical use is to not define `line_formats`,​ i.e. passing no args to `lines()`. The default behavior (i..e without `line_formats`) is to read a "​line"​ at a time from the stream.
  
 ```lua ```lua
Line 62: Line 62:
   ​   ​
   Each `format` is read from the stream and all returned in a multiple return value list of the results. Note all format strings are prefixed with \* and also note that only the first char of the string names of the formats matters, the rest is ignored. These are the supported formats:   Each `format` is read from the stream and all returned in a multiple return value list of the results. Note all format strings are prefixed with \* and also note that only the first char of the string names of the formats matters, the rest is ignored. These are the supported formats:
-``` 
-local file = io.open( 
-``` 
  
-    * a number value, e.g. `b:read(10)`+    * a number value, e.g. `10`
  
-    Read **n** chars from the streamresult is a string.+    Read **n** bytes (in binary mode) or chars (in text mode) from the streamresult is returned as a string. See [[api:​non-standard-lua-libs#​input_and_output_facilities|io.open]] for more details about how to open files in different modes.
  
     `local chars = b:read(10)`     `local chars = b:read(10)`
Line 74: Line 71:
     * "​\*n"​ or "​\*number"​     * "​\*n"​ or "​\*number"​
  
-    Read the next series of bytes from the stream ​and that can be interpreted as a number+    Read the next series of bytes from the stream that can be interpreted as a number. Note that reading numbers is also affected by the open mode, binary or text. See [[api:​non-standard-lua-libs#​input_and_output_facilities|io.open]] for more details about how to open files in different modes..
  
     `local number = b:​read("​*n"​)`     `local number = b:​read("​*n"​)`
Line 127: Line 124:
 The following methods are expected to be implemented on the buffered streams passed to `buffer.new`. The following methods are expected to be implemented on the buffered streams passed to `buffer.new`.
  
-- close+`close() ok, reason` 
 + 
 +  Close handles, release resources, disconnect -- and return success 
 + 
 +- `write(arg: string) ok, reason` 
 + 
 +  Write `arg` as bytes, assume a string of plain unformatted chars. Return falsey and reason on failure. 
 + 
 +- `read(n: number) ok, reason`
  
-write+  Return `n` bytes, and **not** `n` unicode-aware chars. Assume your data is binary data and let the buffer library manage the mode and the unicode string packaging (if applicable). Note that this is exactly how the [[api:​filesystem|filesystem]] library operates.The caller assumes there is more data to read until `nil` is returned. A empty string or a string shorter than `n` chars long is a valid return, but the caller may assume there is more data to request until `nil` is returned.
  
-read+`seek([whence:​ string], [offset: number]) [offset from start] or falsey, reason`
  
-seek+  Refer to `b:seek()` for details. In short, move the stream position to `offset` from `whence`, and return the `offset` from the start of the stream of the position after the seek operation. Note that `seek("​cur",​ 0)` is a valid request, typical of the caller wanting to determine the current position of the stream. Your stream is not required to support `seek`, in such case (or in any case of failure) you should return nil, and the reason (as a string) for the failure.