Update of /project/gsharp/cvsroot/gsharp/Flexichain
In directory common-lisp.net:/tmp/cvs-serv7097
Modified Files:
flexichain-package.lisp flexichain.lisp
Log Message:
added an "insert-vector*" function.
Date: Tue Dec 28 07:57:00 2004
Author: rstrandh
Index: gsharp/Flexichain/flexichain-package.lisp
diff -u gsharp/Flexichain/flexichain-package.lisp:1.1 gsharp/Flexichain/flexichain-package.lisp:1.2
--- gsharp/Flexichain/flexichain-package.lisp:1.1 Mon Aug 16 10:12:45 2004
+++ gsharp/Flexichain/flexichain-package.lisp Tue Dec 28 07:57:00 2004
@@ -25,7 +25,7 @@
#:flexi-error #:flexi-initialization-error
#:flexi-position-error #:flexi-incompatible-type-error
#:nb-elements #:flexi-empty-p
- #:insert* #:element* #:delete*
+ #:insert* #:insert-vector* #:element* #:delete*
#:push-start #:pop-start #:push-end #:pop-end #:rotate
#:cursorchain #:standard-cursorchain
#:flexicursor #:standard-flexicursor
Index: gsharp/Flexichain/flexichain.lisp
diff -u gsharp/Flexichain/flexichain.lisp:1.5 gsharp/Flexichain/flexichain.lisp:1.6
--- gsharp/Flexichain/flexichain.lisp:1.5 Mon Sep 6 13:23:16 2004
+++ gsharp/Flexichain/flexichain.lisp Tue Dec 28 07:57:00 2004
@@ -245,6 +245,20 @@
(when (= gap-start (length buffer))
(setf gap-start 0))))
+(defmethod insert-vector* ((chain standard-flexichain) position vector)
+ (with-slots (element-type buffer gap-start) chain
+ (assert (<= 0 position (nb-elements chain)) ()
+ 'flexi-position-error :chain chain :position position)
+ (assert (typep (array-element-type vector) element-type) ()
+ 'flexi-incompatible-type-error :element vector :chain chain)
+ (ensure-gap-position chain position)
+ (ensure-room chain (+ (nb-elements chain) (length vector)))
+ (loop for elem across vector
+ do (setf (aref buffer gap-start) elem)
+ (incf gap-start)
+ (when (= gap-start (length buffer))
+ (setf gap-start 0)))))
+
(defmethod delete* ((chain standard-flexichain) position)
(with-slots (buffer expand-factor min-size fill-element gap-end) chain
(assert (< -1 position (nb-elements chain)) ()