File: vector.rkt

package info (click to toggle)
racket 7.9%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 178,684 kB
  • sloc: ansic: 282,112; lisp: 234,887; pascal: 70,954; sh: 27,112; asm: 16,268; makefile: 4,613; cpp: 2,715; ada: 1,681; javascript: 1,244; cs: 879; exp: 499; csh: 422; python: 274; xml: 106; perl: 104
file content (29 lines) | stat: -rw-r--r-- 911 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#lang typed/racket/base

(require racket/fixnum
         racket/performance-hint
         "../unsafe.rkt")

(provide for/vector: for*/vector: vector-ref!)

(begin-encourage-inline
  
  (: vector-ref!
     (All (A B) (case-> ((Vectorof (U A False)) Integer (-> A) -> A)
                        ((Vectorof (U A B)) Integer (-> A) (Any -> Boolean : B) -> A))))
  (define vector-ref!
    (case-lambda
      [(vs i thnk)  (vector-ref! vs i thnk not)]
      [(vs i thnk nothing?)
       (define n (vector-length vs))
       (cond [(and (fixnum? i) (i . fx>= . 0) (i . fx< . n))
              (define v (unsafe-vector-ref vs i))
              (if (nothing? v)
                  (let ([v  (thnk)])
                    (unsafe-vector-set! vs i v)
                    v)
                  v)]
             [else
              (raise-range-error 'vector-ref! "Vector" "" i vs 0 n #f)])]))
  
  )  ; begin-encourage-inline