diff options
Diffstat (limited to 'module/srfi/srfi-60.scm')
-rw-r--r-- | module/srfi/srfi-60.scm | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/module/srfi/srfi-60.scm b/module/srfi/srfi-60.scm new file mode 100644 index 000000000..b3ddaada7 --- /dev/null +++ b/module/srfi/srfi-60.scm @@ -0,0 +1,73 @@ +;;; 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)) |