Skip to main content


Generic, extensible buffers

Generic, mutable sequences that grow to accommodate arbitrary numbers of elements.

Class Buffer<X> provides extensible, mutable sequences of elements of type X. that can be efficiently produced and consumed with imperative code. A buffer object can be extended by a single element or the contents of another buffer object.

When required, the current state of a buffer object can be converted to a fixed-size array of its elements.

Buffers complement Motoko's non-extensible array types (arrays do not support efficient extension, because the size of an array is determined at construction and cannot be changed).

class Buffer<X>

Function add

func add(elem : X)

Adds a single element to the buffer.

Function removeLast

func removeLast() : ?X

Removes the item that was inserted last and returns it or null if no elements had been added to the Buffer.

Function append

func append(b : Buffer<X>)

Adds all elements in buffer b to this buffer.

Function size

func size() : Nat

Returns the current number of elements.

Function clear

func clear()

Resets the buffer.

Function clone

func clone() : Buffer<X>

Returns a copy of this buffer.

Function vals

func vals() : { next : () -> ?X }

Returns an Iter over the elements of this buffer.

Function toArray

func toArray() : [X]

Creates a new array containing this buffer's elements.

Function toVarArray

func toVarArray() : [var X]

Creates a mutable array containing this buffer's elements.

Function get

func get(i : Nat) : X

Gets the i-th element of this buffer. Traps if i >= count. Indexing is zero-based.

Function getOpt

func getOpt(i : Nat) : ?X

Gets the i-th element of the buffer as an option. Returns null when i >= count. Indexing is zero-based.

Function put

func put(i : Nat, elem : X)

Overwrites the current value of the i-entry of this buffer with elem. Traps if the index is out of bounds. Indexing is zero-based. Create a stateful buffer class encapsulating a mutable array.

The argument initCapacity determines its initial capacity. The underlying mutable array grows by doubling when its current capacity is exceeded.

Function fromArray

func fromArray<X>(elems : [X]) : Buffer<X>

Creates a buffer from immutable array elements.

Function fromVarArray

func fromVarArray<X>(elems : [var X]) : Buffer<X>

Creates a buffer from the elements of a mutable array.