adding gvector-remove-last!
This commit is contained in:
parent
ef846caaa1
commit
bbab60545e
|
@ -28,6 +28,11 @@
|
|||
"")
|
||||
index)))
|
||||
|
||||
(define (check-nonempty who n)
|
||||
(unless (> n 0)
|
||||
(error who "empty")))
|
||||
|
||||
|
||||
(define ((bad-index-error who index))
|
||||
(raise-mismatch-error who "index out of range" index))
|
||||
|
||||
|
@ -67,6 +72,16 @@
|
|||
(vector-copy! v index v (add1 index) n)
|
||||
(vector-set! v (sub1 n) #f)])))
|
||||
|
||||
(define (gvector-remove-last! gv)
|
||||
(let ([n (gvector-n gv)]
|
||||
[v (gvector-vec gv)])
|
||||
(check-nonempty 'gvector-remove-last! n)
|
||||
(define last-val (vector-ref v (sub1 n)))
|
||||
(set-gvector-n! gv (sub1 n))
|
||||
(vector-set! v (sub1 n) #f)
|
||||
last-val))
|
||||
|
||||
|
||||
(define (gvector-count gv)
|
||||
(gvector-n gv))
|
||||
|
||||
|
@ -213,6 +228,8 @@
|
|||
(->* (gvector?) () #:rest any/c any)]
|
||||
[gvector-remove!
|
||||
(-> gvector? exact-nonnegative-integer? any)]
|
||||
[gvector-remove-last!
|
||||
(-> gvector? any)]
|
||||
[gvector-count
|
||||
(-> gvector? any)]
|
||||
[gvector->vector
|
||||
|
|
|
@ -83,6 +83,12 @@ down. Takes time proportional to @racket[(- (gvector-count gv)
|
|||
index)].
|
||||
}
|
||||
|
||||
@defproc[(gvector-remove-last! [gv gvector?])
|
||||
any/c]{
|
||||
Removes the element at the end and returns it. Takes constant time.
|
||||
}
|
||||
|
||||
|
||||
@defproc[(gvector-count [gv gvector?])
|
||||
exact-nonnegative-integer?]{
|
||||
|
||||
|
|
|
@ -53,6 +53,25 @@
|
|||
(gvector->vector gv))
|
||||
'#(2 3))
|
||||
|
||||
(test-equal? "gvector-remove-last!"
|
||||
(let ([gv (gvector 1 2 3)])
|
||||
(check-equal? (gvector-remove-last! gv) 3)
|
||||
(check-equal? (gvector-remove-last! gv) 2)
|
||||
(check-equal? (gvector-remove-last! gv) 1)
|
||||
(gvector->vector gv))
|
||||
'#())
|
||||
|
||||
(test-equal? "gvector-add and gvector-remove-last!"
|
||||
(let ([gv (gvector)])
|
||||
(gvector-add! gv 'rock)
|
||||
(gvector-add! gv 'paper)
|
||||
(check-equal? (gvector-remove-last! gv) 'paper)
|
||||
(gvector-add! gv 'scissor)
|
||||
(check-equal? (gvector-remove-last! gv) 'scissor)
|
||||
(check-equal? (gvector-remove-last! gv) 'rock)
|
||||
(gvector->vector gv))
|
||||
'#())
|
||||
|
||||
(test-equal? "gvector-count"
|
||||
(gvector-count (gvector 1 2 3))
|
||||
3)
|
||||
|
|
Loading…
Reference in New Issue
Block a user