1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- ;;; srfi-60.scm --- Integers as Bits
- ;; Copyright (C) 2005, 2006, 2010 Free Software Foundation, Inc.
- ;;
- ;; This library is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU Lesser General Public
- ;; License as published by the Free Software Foundation; either
- ;; version 3 of the License, or (at your option) any later version.
- ;;
- ;; This library is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ;; Lesser General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU Lesser General Public
- ;; License along with this library; if not, write to the Free Software
- ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- (define-module (srfi srfi-60)
- #:export (bitwise-and
- bitwise-ior
- bitwise-xor
- bitwise-not
- any-bits-set?
- bitwise-if bitwise-merge
- log2-binary-factors first-set-bit
- bit-set?
- copy-bit
- bit-field
- copy-bit-field
- arithmetic-shift
- rotate-bit-field
- reverse-bit-field
- integer->list
- list->integer
- booleans->integer)
- #:replace (bit-count)
- #:re-export (logand
- logior
- logxor
- integer-length
- logtest
- logcount
- logbit?
- ash))
- (load-extension (string-append "libguile-" (effective-version))
- "scm_init_srfi_60")
- (define bitwise-and logand)
- (define bitwise-ior logior)
- (define bitwise-xor logxor)
- (define bitwise-not lognot)
- (define any-bits-set? logtest)
- (define bit-count logcount)
- (define (bitwise-if mask n0 n1)
- (logior (logand mask n0)
- (logand (lognot mask) n1)))
- (define bitwise-merge bitwise-if)
- (define first-set-bit log2-binary-factors)
- (define bit-set? logbit?)
- (define bit-field bit-extract)
- (define (copy-bit-field n newbits start end)
- (logxor n (ash (logxor (bit-extract n start end) ;; cancel old
- (bit-extract newbits 0 (- end start))) ;; insert new
- start)))
- (define arithmetic-shift ash)
- (cond-expand-provide (current-module) '(srfi-60))
|