Skip to content

Commit

Permalink
containers: experimental container syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
mrjbq7 committed Jan 21, 2024
1 parent c2e106a commit b0dc73f
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions extra/containers/authors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
John Benediktsson
69 changes: 69 additions & 0 deletions extra/containers/containers.factor
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
USING: accessors assocs deques dlists growable kernel math
sequences sets ;

IN: containers

GENERIC: count ( obj -- n )

M: sequence count length ;
M: assoc count assoc-size ;
M: set count cardinality ;

GENERIC: capacity ( obj -- n )

M: object capacity count ;
M: growable capacity underlying>> length ;

GENERIC: contains? ( elt obj -- ? )

M: sequence contains? member? ;
M: assoc contains? key? ;
M: set contains? sets:in? ;
M: deque contains? deque-member? ;

GENERIC: items ( obj -- seq )

M: sequence items ;
M: set items members ;
M: assoc items >alist ;
M: dlist items dlist>sequence ;

GENERIC: empty? ( obj -- ? )

M: object empty? count zero? ; inline
M: dlist empty? front>> not ; inline
M: deque empty? deque-empty? ; inline

GENERIC: add ( elt obj -- )

M: sequence add push ;
M: set add adjoin ;

GENERIC: lookup ( key obj -- elt )
M: sequence lookup nth ;
M: assoc lookup at ;

! XXX: at ( key obj -- elt ) and of ( obj key -- elt )

GENERIC: remove ( elt obj -- )

M: sequence remove remove-nth! drop ;
M: set remove delete ;

GENERIC: remove-all ( obj -- )

M: sequence remove-all delete-all ;
M: assoc remove-all clear-assoc ;
M: set remove-all clear-set ;
M: deque remove-all clear-deque ;

GENERIC: like ( obj exemplar -- newobj )

M: sequence like sequences:like ;
M: assoc like assoc-like ;
M: set like set-like ;

GENERIC: clone-like ( obj exemplar -- newobj )

M: sequence clone-like sequences:clone-like ;
M: assoc clone-like assoc-clone-like ;
1 change: 1 addition & 0 deletions extra/containers/tags.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
collections

0 comments on commit b0dc73f

Please sign in to comment.