\ 4tH library - BUFFER - Copyright 2004,2008 J.L. Bezemer \ You can redistribute this file and/or modify it under \ the terms of the GNU General Public License [UNDEFINED] ring-buffer [IF] [UNDEFINED] /ring [IF] \ default ring size 64 constant /ring \ must be a power of 2! [THEN] struct 1 +field head 1 +field tail /ring +field ring end-struct /ring-buffer /ring -1 [+] constant mask : ring-buffer ( b -- ) 0 swap 2dup head ! tail ! ; : buffer-used ( b -- n ) dup head @ swap tail @ - mask and ; : buffer-ends? ( b -- f ) buffer-used mask = ; : buffer-empty? ( b -- f ) buffer-used 0= ; : wrap ( x -- n n) @ dup 1+ mask and ; : >b ( n b -- ) dup head dup >r wrap >r >r ring r> th ! r> r> ! ; : b> ( b -- n ) dup tail dup >r wrap >r >r ring r> th @ r> r> ! ; [DEFINED] 4TH# [IF] hide mask hide head hide tail hide ring hide /ring hide wrap [THEN] [THEN]