[gambit-list] Help with starting bitset library
Bradley Lucier
lucier at math.purdue.edu
Thu Feb 26 18:11:08 EST 2015
Marc:
I started writing a bitset library to leverage the bitwise-* operations.
I need some help in working with type macros, etc.
Can you look at the simple code below and tell me how to express it in
the right way?
Also, your define-prim-nary implements a fold operation, which is much,
much slower for bitwise operations than just
1. Making sure all arguments are exact ints.
2. Determining the size of the resulting bignum (to be possibly
normalized to a fixnum later) from the sizes and signs of the arguments.
3. Allocating the final bignum and destructively modifying it based on
the arguments.
Should I look into that a bit?
Brad
The start of bitsets.scm follows.
(##include "../lib/header.scm")
;; accessors and constructors are not inlined unless I add
;; the following declaration.
;; Is that why you write constructors and accessors as macros?
(declare (inlining-limit 300))
(define-structure ##bitset body)
(define-prim (##bitset-union bs1 bs2)
(##define-macro (type-error-on-x) `'(1))
(##define-macro (type-error-on-y) `'(2))
(if (##bitset? x)
(if (##bitset? y)
(make-##bitset (##bitwise-ior (##bitset-body x)
(##bitset-body y)))
(type-error-on-y))
(type-error-on-x)))
(define-prim-nary (bitset-union x y)
(make-##bitset 0)
(if (##bitset? x) x '(1))
(##bitset-union x y)
macro-force-vars
macro-no-check
(##pair? ##fail-check-bitset))
More information about the Gambit-list
mailing list