The dyn-vector library is an implementation of a dynamically-growing vector, based on SRFI-43. An attempt to set the i'th element of a dynvector of underlying size n causes the dynvector to grow to size 2n, i+1, or 16, whichever is greatest. The semantics of this library follow SRFI-43 closely, with the exception of the following procedures:
if the index i is greater than the current size of the vector, this procedure returns the default value specified when the dynamic vector was created
if the index i is greater than the current size of the vector, the vector size is increased to max(2*N,i+1) and the new element is then inserted in the vector
this procedure removes all elements from the dynamic vector, and sets the size of the vector to n
this procedure explicitly resizes the dynamic vector to the specified size
if the optional argument dflt is specified, it is used as default value, otherwise the first element in the vector is used as default value
if the optional argument dflt is specified, it is used as default value, otherwise the first element in the list is used as default value
returns #t if x is a dynamic vector, #f otherwise
creates a new dynamic vector of length len and iterates across each index, applying f at each iteration to the current index; if the optional argument dflt is specified, it is used as default value, otherwise the first element in the vector is used as default value
creates a dynamic vector with the elements of the given list; if the optional argument dflt is specified, it is used as default value, otherwise the first element in the vector is used as default value
creates a dynamic vector of length n and fills it with value default
removes all elements from the given dynamic vector, and sets the size of the vector to n
returns the length of the given dynamic vector
returns the element at index iof the given dynamic vectorx
updates the element at index iof the given dynamic vectorx; if the index i is greater than the current size of the vector, the vector size is increased to max(2*N,i+1) and the new element is then inserted in the vector
expand the size of the dynamic vector to the given size n
dynamic vector iterator: applies fto each index in the range [0, k), where k is the length of the smallest dynamic vector argument passed, and the respective list of parallel elements from x1 ... at that index.
constructs a new dynamic vector of the shortest size of the given dynamic vector; each element at index i of the new dynamic vector is mapped from the old vectors by f i (dynvector-ref x1 i) ...
creates a copy of the given dynamic vector
left-to-right dynamic vector iterator with state. f is iterated over each index in all of the vectors, stopping at the end of the shortest; f is applied as (f i state (dynvector-ref x1 i) ...) where state is the current state value, which begins with initial and becomes whatever freturns at the respective iteration; i is the current index
right-to-left dynamic vector iterator with state. f is iterated over each index in all of the vectors, stopping at the end of the shortest; f is applied as (f i state (dynvector-ref x1 i) ...) where state is the current state value, which begins with initial and becomes whatever freturns at the respective iteration; i is the current index
finds and returns the index of the first elements in x1 ... that satisfy pred?; if no matching element is found by the end of the shortest vector, #f is returned
finds the first set of elements in x1 ... for which pred? returns a true value. If such a parallel set of elements exists, this procedure returns the value that pred?returned for that set of elements
if, for every index i between 0 and the length of the shortest vector argument, the set of elements (dynvector-ref x1 i) ... satisfies pred?, this procedure returns the value that pred?returned for the last set of elements
returns a list containing all the elements in the given dynamic vector
csi> (require-extension dyn-vector) csi> (define dv (make-dynvector 1 0)) csi> (dynvector-ref dv 6) 0 csi> (dynvector-set! dv 6 18) csi> (dynvector-ref dv 6) 18 csi> (define dv2 (list->dynvector '(1 2 3))) csi> dv2 #(dynvector 1 2 3) csi> (dynvector-ref dv2 4) 1 csi> (dynvector-clear! dv2 5) csi> (dynvector-for-each (lambda (i x) (print i " = " x)) dv2) 0 = 1 1 = 1 2 = 1 3 = 1 4 = 1 csi> (dynvector-map (lambda (i x) (+ x i)) dv2) #(dynvector 1 2 3 4 5) csi> (dynvector-fold (lambda (i state v) (+ state v)) 0 dv2) 5
Parts of this documentation are taken from SRFI-43. The rest was created by Ivan Raikov. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A full copy of the GPL license can be found at <http://www.gnu.org/licenses/>.