26 lines
985 B
Plaintext
26 lines
985 B
Plaintext
;;;; vec-new and map-new take a type expression where they take a type, so a
|
|
;;;; local can hold a Vec of slices, of arrays or of pointers with nothing
|
|
;;;; else naming the element type. The last Vec names an allocator after its
|
|
;;;; type, which is the one argument that may follow.
|
|
|
|
(defn main [] i32
|
|
(let [a (arena-new 4096)
|
|
words (vec-new [u8])
|
|
pairs (vec-new [2 i32])
|
|
ptrs (vec-new (Ptr i32))
|
|
opts (vec-new (Option i64) a)
|
|
m (map-new string [u8])
|
|
x (i32 7)]
|
|
(push words (bytes-view "ab"))
|
|
(push words (bytes-view "cde"))
|
|
(push pairs [3 4])
|
|
(push ptrs (addr x))
|
|
(push opts (Some (i64 9)))
|
|
(put m "k" (bytes-view "xyz"))
|
|
(println (length words) (length (at words 1))
|
|
(at (at pairs 0) 1) (deref (at ptrs 0))
|
|
(match (at opts 0) (Some v) v None -1)
|
|
(match (get m "k") (Some v) (length v) None -1))
|
|
(free words) (free pairs) (free ptrs) (free m))
|
|
0)
|