From my reading of the CLHS it seems portable to create
an adjustable array (with a fill pointer) and expect:
1) I can add elements to the array with vector-push-extend
2) delete elements with a simple call to DELETE.
3) the array will always be adjustable and have a fill-pointer.
Is this correct?
Example:
BPROTO 21 > (setf arr (make-array 16 :fill-pointer 0 :adjustable t))
#()
BPROTO 22 > (vector-push-extend 10 arr)
0
BPROTO 23 > (vector-push-extend 20 arr)
1
BPROTO 24 > (vector-push-extend 30 arr)
2
BPROTO 25 > (vector-push-extend 40 arr)
3
BPROTO 26 > arr
#(10 20 30 40)
BPROTO 27 > (delete 30 arr)
#(10 20 40)
BPROTO 28 > (fill-pointer arr)
3
BPROTO 29 > (delete 10 arr)
#(20 40)
BPROTO 30 > (vector-push-extend 10 arr)
2
BPROTO 31 > arr
#(20 40 10)
In this case no matter how many calls to vector-push-extend and delete, arr will
always remain an adjustable array with a fill-pointer. From my
reading of the CLHS I should expect this and it will be portable across
implementations. Yeah!
Wade