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
Last revision Both sides next revision
api:buffer [2016/06/19 05:52]
payonel [Interface Methods]
api:buffer [2016/06/19 07:54]
payonel [Interface 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#​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#​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   Close handles, release resources, disconnect -- and return success
  
-- `write(arg: string)`+- `write(arg: string) ​ok, reason`
  
   Write `arg` as bytes, assume a string of plain unformatted chars. Return falsey and reason on failure.   Write `arg` as bytes, assume a string of plain unformatted chars. Return falsey and reason on failure.
  
-- `read(n: number)`+- `read(n: number) ​ok, reason` 
 + 
 +  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.
  
-  Return ​`n` unicode chars. 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 returnbut the caller may assume there is more data to request until `nilis returned.+`seek([whence: ​string], [offset: number]) [offset from start] ​or falseyreason`
  
-- `seek([whence:​ string], [offset: number)` 
   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.   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.