CLIM mail archive


CLIM 1.1 erase-output-record ?

      Date: Thu, 30 Jun 1994 10:31 CDT
      From: John Aspinall <>

	 Date: Thu, 30 Jun 1994 10:51:35 -0400
	 From: Jeff Morrill <jmorrill@BBN.COM>

	 This is indeed a FAQ.  You are getting bitten by the bug in
	 coordinate sorted sets.  I don't know if there are any other
	 types of output records in clim 1.

      But it's not the same bug as Marilyn Bunzo's bug.  In Everett's
      case, he's looking up a known-to-be-present output-record.  There
      *is* a fix for Everett's bug - I was still at 'Bolics when Scott and
      I put it in, and it's in the CLIM 2 sources.

Thanks to David Gadbois, I have the CLIM 1 method in front of me.  I'm
surprised this wasn't a patch in the 1991-2 timeframe, but perhaps not.
In any case, try this:

;;; -*- Mode: LISP; Syntax: Common-lisp; Package: CLIM; Base: 10; Lowercase: Yes -*-

(defmethod delete-output-record-element
    ((record coordinate-sorted-set-output-record) element &optional (errorp t))
  (with-slots (coordinate-sorted-set fill-pointer tallest-box-height) record
    (let ((index (or (coordinate-sorted-set-position 
			element coordinate-sorted-set fill-pointer)
		     (position element coordinate-sorted-set))))
       (cond (index
	     (let ((new-fp (the fixnum (1- fill-pointer)))
		   (vector coordinate-sorted-set))
	       (declare (type simple-vector vector) #+Genera (sys:array-register vector))
	       (unless (= index new-fp)
		 ;; Shift the whole vector downward
		 (do ((i index (1+ i)))
		     ((= i new-fp))
		   (declare (fixnum i index new-fp)
			    (optimize (speed 3) (safety 0)))
		   (setf (svref vector i) (svref vector (1+ i)))))
	       (setf fill-pointer new-fp)
	     (error "The element ~S was not found in ~S" element record))))))

Main Index | Thread Index