diff options
author | David N. Welton <davidw@efn.org> | 1998-11-09 21:18:01 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:27 -0800 |
commit | 926b1b647ac830660933a5e63eb52d4a2552e264 (patch) | |
tree | e25db5f6e1441d67f5d9af063432018ee20a5f51 /logical.scm | |
parent | b21cac3362022718634f7086964208b2eed8e897 (diff) | |
parent | fa3f23105ddcf07c5900de47f19af43d1db1b597 (diff) | |
download | slib-926b1b647ac830660933a5e63eb52d4a2552e264.tar.gz slib-926b1b647ac830660933a5e63eb52d4a2552e264.zip |
Import Debian changes 2c3-3debian/2c3-3
slib (2c3-3) frozen unstable; urgency=low
* Fixes #16235.
* Fixes #19943.
* Fixes #20265.
* Fixes #24917.
* Fixes #27389.
slib (2c3-2) frozen unstable; urgency=low
* Re-uploaded for slink freeze.
slib (2c3-1) unstable; urgency=low
* New upstream release.
Diffstat (limited to 'logical.scm')
-rw-r--r-- | logical.scm | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/logical.scm b/logical.scm index 1cc0726..c85507d 100644 --- a/logical.scm +++ b/logical.scm @@ -67,10 +67,25 @@ (define (logical:logbit? index int) (logical:logtest (logical:integer-expt 2 index) int)) -(define (logical:bit-extract n start end) +(define (logical:copy-bit index to bool) + (if bool + (logical:logior to (logical:ash 1 index)) + (logical:logand to (logical:lognot (logical:ash 1 index))))) + +(define (logical:bit-field n start end) (logical:logand (- (logical:integer-expt 2 (- end start)) 1) (logical:ash n (- start)))) +(define (logical:bitwise-if mask n0 n1) + (logical:logior (logical:logand mask n0) + (logical:logand (logical:lognot mask) n1))) + +(define (logical:copy-bit-field to start end from) + (logical:bitwise-if + (logical:ash (- (logical:integer-expt 2 (- end start)) 1) start) + (logical:ash from start) + to)) + (define (logical:ash int cnt) (if (negative? cnt) (let ((n (logical:integer-expt 2 (- cnt)))) @@ -142,9 +157,12 @@ (define lognot logical:lognot) (define logtest logical:logtest) (define logbit? logical:logbit?) +(define copy-bit logical:copy-bit) (define ash logical:ash) (define logcount logical:logcount) (define integer-length logical:integer-length) -(define bit-extract logical:bit-extract) +(define bit-field logical:bit-field) +(define bit-extract logical:bit-field) +(define copy-bit-field logical:copy-bit-field) (define ipow-by-squaring logical:ipow-by-squaring) (define integer-expt logical:integer-expt) |