neyuki 0.4.0

A small Lua-like scripting language implemented in Rust
Documentation
# buffer

Fixed-size blocks of mutable bytes for binary data: file formats, network protocols, hashing input. Offsets are 0-based byte positions and every access is bounds-checked. Numbers are little-endian unless the optional last argument `bigEndian` is `true`. Writing an integer that does not fit keeps its low bits.

```lua
local b = buffer.create(8)
buffer.writeu16(b, 0, 0xCAFE, true) -- big-endian
buffer.writef32(b, 2, 1.5)
print(buffer.tohex(b)) --> cafe0000c03f0000
```

## buffer.create(size: number): buffer

A buffer of `size` zero bytes.

## buffer.fromstring(s: string): buffer

A buffer holding the bytes of `s`.

## buffer.tostring(b: buffer): string

The bytes as text. Bytes that are not valid UTF-8 become U+FFFD.

## buffer.fromhex(s: string): buffer

A buffer from hexadecimal text such as `"ff0080"`.

## buffer.tohex(b: buffer): string

The bytes as lower-case hexadecimal text.

## buffer.frombase64(s: string): buffer

A buffer from standard or URL-safe Base64 text.

## buffer.tobase64(b: buffer): string

The bytes as standard Base64 text.

## buffer.len(b: buffer): number

The size in bytes.

## buffer.resize(b: buffer, size: number): ()

Grows `b` with zero bytes or shrinks it to `size`.

## buffer.slice(b: buffer, offset: number?, count: number?): buffer

A new buffer with a copy of `count` bytes from `offset` (default: everything from `offset` on).

## buffer.copy(target: buffer, targetOffset: number, source: buffer, sourceOffset: number?, count: number?): ()

Copies `count` bytes (default: the rest of `source`) from `source` at `sourceOffset` into `target` at `targetOffset`. The two may be the same buffer with overlapping ranges.

## buffer.fill(b: buffer, offset: number, value: number, count: number?): ()

Sets `count` bytes (default: to the end) from `offset` to `value`.

## buffer.equal(a: buffer, b: buffer): boolean

Whether two buffers hold the same bytes.

## buffer.readstring(b: buffer, offset: number, count: number): string

`count` bytes from `offset` as a string.

## buffer.writestring(b: buffer, offset: number, s: string, count: number?): ()

Writes the first `count` bytes of `s` (default: all of them) at `offset`.

## buffer.readi8(b: buffer, offset: number): number

A signed 8-bit integer.

## buffer.readu8(b: buffer, offset: number): number

An unsigned 8-bit integer.

## buffer.readi16(b: buffer, offset: number, bigEndian: boolean?): number

A signed 16-bit integer.

## buffer.readu16(b: buffer, offset: number, bigEndian: boolean?): number

An unsigned 16-bit integer.

## buffer.readi32(b: buffer, offset: number, bigEndian: boolean?): number

A signed 32-bit integer.

## buffer.readu32(b: buffer, offset: number, bigEndian: boolean?): number

An unsigned 32-bit integer.

## buffer.readi64(b: buffer, offset: number, bigEndian: boolean?): number

A signed 64-bit integer.

## buffer.readu64(b: buffer, offset: number, bigEndian: boolean?): number

An unsigned 64-bit integer.

## buffer.readf32(b: buffer, offset: number, bigEndian: boolean?): number

A 32-bit float.

## buffer.readf64(b: buffer, offset: number, bigEndian: boolean?): number

A 64-bit float.

## buffer.writei8(b: buffer, offset: number, value: number): ()

Writes an 8-bit integer.

## buffer.writeu8(b: buffer, offset: number, value: number): ()

Writes an unsigned 8-bit integer.

## buffer.writei16(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes a 16-bit integer.

## buffer.writeu16(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes an unsigned 16-bit integer.

## buffer.writei32(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes a 32-bit integer.

## buffer.writeu32(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes an unsigned 32-bit integer.

## buffer.writei64(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes a 64-bit integer.

## buffer.writeu64(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes an unsigned 64-bit integer.

## buffer.writef32(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes a 32-bit float.

## buffer.writef64(b: buffer, offset: number, value: number, bigEndian: boolean?): ()

Writes a 64-bit float.

## buffer.readbits(b: buffer, bitOffset: number, bitCount: number): number

Up to 32 bits starting at any bit position, least significant bit first.

## buffer.writebits(b: buffer, bitOffset: number, bitCount: number, value: number): ()

Writes the low `bitCount` bits (up to 32) of `value` at any bit position.