2010-03-27 12:03:06 -04:00
|
|
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
2008-08-19 15:06:20 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2015-06-05 02:15:51 -04:00
|
|
|
USING: fry kernel sequences ;
|
2008-08-19 15:06:20 -04:00
|
|
|
IN: deques
|
|
|
|
|
|
|
|
GENERIC: push-front* ( obj deque -- node )
|
|
|
|
GENERIC: push-back* ( obj deque -- node )
|
2011-11-08 16:20:56 -05:00
|
|
|
GENERIC: peek-front* ( deque -- obj ? )
|
|
|
|
GENERIC: peek-back* ( deque -- obj ? )
|
2008-08-19 15:06:20 -04:00
|
|
|
GENERIC: pop-front* ( deque -- )
|
|
|
|
GENERIC: pop-back* ( deque -- )
|
|
|
|
GENERIC: delete-node ( node deque -- )
|
|
|
|
GENERIC: deque-member? ( value deque -- ? )
|
|
|
|
GENERIC: clear-deque ( deque -- )
|
|
|
|
GENERIC: node-value ( node -- value )
|
2008-11-16 06:53:25 -05:00
|
|
|
GENERIC: deque-empty? ( deque -- ? )
|
2008-08-19 15:06:20 -04:00
|
|
|
|
2011-11-08 16:20:56 -05:00
|
|
|
ERROR: empty-deque ;
|
|
|
|
|
2012-07-13 18:14:51 -04:00
|
|
|
: peek-front ( deque -- obj )
|
2015-08-13 19:13:05 -04:00
|
|
|
peek-front* [ drop empty-deque ] unless ;
|
2011-11-08 16:20:56 -05:00
|
|
|
|
2012-07-13 18:14:51 -04:00
|
|
|
: ?peek-front ( deque -- obj/f )
|
2011-11-08 16:20:56 -05:00
|
|
|
peek-front* [ drop f ] unless ;
|
|
|
|
|
2012-07-13 18:14:51 -04:00
|
|
|
: peek-back ( deque -- obj )
|
2015-08-13 19:13:05 -04:00
|
|
|
peek-back* [ drop empty-deque ] unless ;
|
2011-11-08 16:20:56 -05:00
|
|
|
|
2012-07-13 18:14:51 -04:00
|
|
|
: ?peek-back ( deque -- obj/f )
|
2011-11-08 16:20:56 -05:00
|
|
|
peek-back* [ drop f ] unless ;
|
|
|
|
|
2008-08-19 15:06:20 -04:00
|
|
|
: push-front ( obj deque -- )
|
2010-03-27 12:03:06 -04:00
|
|
|
push-front* drop ; inline
|
2008-08-19 15:06:20 -04:00
|
|
|
|
|
|
|
: push-all-front ( seq deque -- )
|
2015-06-05 02:15:51 -04:00
|
|
|
'[ _ push-front ] each ;
|
2008-08-19 15:06:20 -04:00
|
|
|
|
|
|
|
: push-back ( obj deque -- )
|
2010-03-27 12:03:06 -04:00
|
|
|
push-back* drop ; inline
|
2008-08-19 15:06:20 -04:00
|
|
|
|
|
|
|
: push-all-back ( seq deque -- )
|
2015-06-05 02:15:51 -04:00
|
|
|
'[ _ push-back ] each ;
|
2008-08-19 15:06:20 -04:00
|
|
|
|
|
|
|
: pop-front ( deque -- obj )
|
2010-03-27 12:03:06 -04:00
|
|
|
[ peek-front ] [ pop-front* ] bi ; inline
|
2008-08-19 15:06:20 -04:00
|
|
|
|
|
|
|
: pop-back ( deque -- obj )
|
2010-03-27 12:03:06 -04:00
|
|
|
[ peek-back ] [ pop-back* ] bi ; inline
|
2008-08-19 15:06:20 -04:00
|
|
|
|
2014-12-11 18:57:48 -05:00
|
|
|
: slurp-deque ( ... deque quot: ( ... obj -- ... ) -- ... )
|
2014-12-11 17:05:04 -05:00
|
|
|
[ drop '[ _ deque-empty? ] ]
|
2009-01-26 00:04:35 -05:00
|
|
|
[ '[ _ pop-back @ ] ]
|
2014-12-11 17:05:04 -05:00
|
|
|
2bi until ; inline
|
2008-08-19 15:06:20 -04:00
|
|
|
|
|
|
|
MIXIN: deque
|