#lang scribble/manual @(require scribble/eval (for-label data/bit-vector racket/contract racket/dict racket/base) data/bit-vector) @title[#:tag "bit-vector"]{Bit Vectors} @(define the-eval (make-base-eval)) @(the-eval '(require data/bit-vector)) @(the-eval '(require racket/dict)) @defmodule[data/bit-vector] @author[@author+email["Jens Axel Søgaard" "soegaard@racket-lang.org"]] A @deftech{bit vector} is a mutable sequence whose elements are booleans. A bit vector also acts as a dictionary (@racket[dict?] from @racketmodname[racket/dict]), where the keys are zero-based indexes and the values are the elements of the bit-vector. A bit-vector has a fixed size. Two bit-vectors are @racket[equal?] if they contain the same number of elements and if they contain equal elements at each index. @defproc[(make-bit-vector [size exact-integer?] [fill boolean? #f]) bit-vector?]{ Creates a new bit-vector of size @racket[size]. All elements are initialized to @racket[fill]. @examples[#:eval the-eval (define bv (make-bit-vector 3)) (bit-vector-ref bv 1)] } @defproc[(bit-vector [elem boolean?] ...) bit-vector?]{ Creates a new bit-vector containing each @racket[elem] in order. @examples[#:eval the-eval (define bv (bit-vector #f #t #f)) (bit-vector-ref bv 1)] } @defproc[(bit-vector? [v any/c]) boolean?]{ Returns @racket[#t] if @racket[v] is a bit-vector, @racket[#f] otherwise. } @defproc[(bit-vector-ref [bv bit-vector?] [index exact-nonnegative-integer?] [default any/c (error ....)]) any/c]{ Returns the element at index @racket[index], if @racket[index] is less than @racket[(bit-vector-length gv)]. Otherwise, @racket[default] is invoked if it is a procedure, returned otherwise. } @defproc[(bit-vector-set! [bv bit-vector?] [index (and/c exact-nonnegative-integer? (