From: Nathan F. <fr...@gm...> - 2011-12-29 19:41:57
|
Great work! On Thu, Dec 29, 2011 at 1:41 PM, Nikodemus Siivola <de...@us...> wrote: > diff --git a/src/code/bit-bash.lisp b/src/code/bit-bash.lisp > index 7c7e539..909db1f 100644 > --- a/src/code/bit-bash.lisp > +++ b/src/code/bit-bash.lisp > @@ -594,3 +594,102 @@ > (declare (type system-area-pointer sap)) > (declare (type fixnum offset)) > (copy-ub8-to-system-area bv 0 sap offset (length bv))) > + > + > +;;;; Bashing-Style search for bits > +;;;; > +;;;; Similar search would work well for base-strings as well. > +;;;; (Technically for all unboxed sequences of sub-word size elements, > +;;;; but somehow I doubt other eg. octet vectors get POSIION or FIND POSIION? Typo. > + (with-pinned-objects (vector) > + (if from-end > + ;; Back to front > + (let* ((sap (vector-sap vector)) > + (word-offset last-word) > + (word (logand end-mask (get-word sap word-offset)))) Is there a reason you're not using plain VECTOR-RAW-BITS here? I think it has the same effects, but you don't have to do all the shifting and whatnot in GET-WORD. And you wouldn't have to spuriously pin things. Depending on representation selection, I suppose you could do slightly worse with arithmetic on WORD-OFFSET, though. -Nathan |