Crate seq

Source
Expand description

The module seq provides the lightweight, generic sequence container Seq for unmovable data and is embedded into the program during compile time. Elements of Seq are stacked on top of each other.

Initially a sequence is empty. A longer sequence is constructed attaching a new head to the existing sequence, representing the tail.

Multiple sequences may share the same tail, permitting memory-efficient organisation of hierarchical data.

Put this in your Cargo.toml:

## Cargo.toml file
[dependencies]
seq = "0.5"

The “default” usage of this type as a queue is to use Empty or ConsRef to construct a queue, and head and tail to deconstruct a queue into head and remaining tail of a sequence.

§Examples

Constructing two sequences seq1 as [1,0] and seq2 as [2,1,0], sharing data with seq1

use seq::Seq;

// constructing the sequence 'seq1'
const seq1: Seq<i32> = Seq::ConsRef(1, &Seq::ConsRef(0, &Seq::Empty));

// construction the sequence 'seq2' sharing data with 'seq1'
const seq2: Seq<i32> = Seq::ConsRef(2, &seq1);

Deconstructing a sequence

use seq::Seq;

fn print_head<'a>(seq: &'a Seq<i32>) {
   println!("head {}", seq.head().unwrap());
}

Extend an existing sequence. Note the lifetime of the return type matches the one of the tail.

use seq::Seq;

fn extend<'a>(head: i32, tail: &'a Seq<i32>) -> Seq<'a, i32> {
   return Seq::ConsRef(head, tail);
}

Extend an existing sequence with dynamic element residing in heap-memory

use seq::Seq;

fn extend_boxed<'a>(head: i32, tail: &'a Seq<i32>) -> Box<Seq<'a, i32>> {
   return Box::new(Seq::ConsRef(head, tail));
}

Iterate a sequence

use seq::Seq;

fn sum_up(seq: &Seq<i32>) -> i32 {
   return seq.into_iter().fold(0, |x, y| x + y);
}

Macros§

seqdef
The seqdef! macro defines a stack-allocated sequence variable for the speficied data list, the last data item in the list will be the top most in the sequence.

Structs§

SeqIterator
The sequence iterator representation

Enums§

Seq
A single-ended, growable, unmovable queue of data, linking constant data with dynamic data.

Functions§

empty
Function returns static reference to empty list