No matching definitions.

tur/gen

stdlib/gen.tur

generator helpers and macros for consuming and composing generators.

Since: Phase GF2

defn

gen-some?

(gen-some? [p :ptr<void>] :bool)

test whether a gen-next result contains a value.

pvoid* pointer returned by gen-next

true if p is non-NULL (a value was yielded), false if the generator was exhausted and gen-next returned NULL.

(let [v (gen-next g)]
    (when (gen-some? v) (println (gen-unwrap v))))

Since: GF2

defn

gen-unwrap

(gen-unwrap [p :ptr<void>] :int)

extract the int64_t value from a gen-next pointer.

pa non-NULL void* pointer returned by gen-next

The int64_t value that was yielded.

(gen-unwrap (gen-next g))  ; => yielded int value

Since: GF2

defn

gen-none

(gen-none :ptr<void>)

return a null generator result representing no value.

NULL as :ptr<void>; test with gen-some? to distinguish from a real value.

(gen-none)  ; => NULL

Since: GF2

defn

gen-arr-new

(gen-arr-new :int)

allocate an empty array for use with gen-collect.

Opaque pointer to an empty array (len=0).

(let [a (gen-arr-new)] ...)

Since: GF2

defn

gen-arr-push!

(gen-arr-push! [a val] :nil)

append val to the end of a gen-arr array.

aarray pointer returned by gen-arr-new
valint64_t value to append
(gen-arr-push! my-arr 42)

Since: GF2

defn

gen-arr-len

(gen-arr-len [a] :int)

return the number of elements in a gen-arr array.

aarray pointer returned by gen-arr-new

Number of collected elements.

(gen-arr-len my-arr)  ; => 3

Since: GF2

defn

gen-arr-get

(gen-arr-get [a i] :int)

return the element at index i in a gen-arr array.

aarray pointer returned by gen-arr-new
izero-based index

The int64_t value stored at position i.

(gen-arr-get my-arr 0)  ; => first element

Since: GF2

defmacro

gen-collect

(gen-collect [g])

materialise all yielded values into a gen-arr array.

ga generator expression

A gen-arr-new array containing all int64_t values yielded by g. Iterate with gen-arr-len and gen-arr-get.

(let [arr (gen-collect g)]
    (println (gen-arr-len arr)))

Since: GF2

defmacro

gen-for-each

(gen-for-each [f g])

call f with every value yielded by a generator.

fa one-argument callable applied to each yielded value
ga generator expression
(gen-for-each println my-gen)

Since: GF2

defmacro

gen-nth

(gen-nth [n g])

return the nth (0-indexed) yielded value, or gen-none.

nzero-based index
ga generator expression

The raw void* pointer from gen-next at position n, or gen-none (NULL) if the generator has fewer than n+1 values. Test with gen-some? and extract with gen-unwrap.

(let [v (gen-nth 2 my-gen)]
    (when (gen-some? v) (println (gen-unwrap v))))

Since: GF2

defmacro

yield*

(yield* [inner])

re-yield every value from an inner generator.

innera generator expression whose values are to be forwarded
(gen []
    (yield* inner-gen)
    (yield 99))

Since: GF2