close Warning: Can't synchronize with repository "(default)" (The repository directory has changed, you should resynchronize the repository with: trac-admin $ENV repository resync '(default)'). Look in the Trac log for more information.

Changeset 2868


Ignore:
Timestamp:
2015-06-21T11:25:07-07:00 (10 years ago)
Author:
Marek Rychlik
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/f4grobner/ring.lisp

    r2867 r2868  
    199199(defgeneric append-item (self item))
    200200
     201;; Source: http://stackoverflow.com/questions/11067899/is-there-a-generic-method-for-cloning-clos-objects
     202(defgeneric copy-instance (object &rest initargs &key &allow-other-keys)
     203  (:documentation "Makes and returns a shallow copy of OBJECT.
     204
     205  An uninitialized object of the same class as OBJECT is allocated by
     206  calling ALLOCATE-INSTANCE.  For all slots returned by
     207  CLASS-SLOTS, the returned object has the
     208  same slot values and slot-unbound status as OBJECT.
     209
     210  REINITIALIZE-INSTANCE is called to update the copy with INITARGS.")
     211  (:method ((object standard-object) &rest initargs &key &allow-other-keys)
     212    (let* ((class (class-of object))
     213           (copy (allocate-instance class)))
     214      (dolist (slot-name (mapcar #'sb-mop:slot-definition-name (sb-mop:class-slots class)))
     215    (when (slot-boundp object slot-name)
     216      (setf (slot-value copy slot-name)
     217        (slot-value object slot-name))))
     218      (apply #'reinitialize-instance copy initargs))))
Note: See TracChangeset for help on using the changeset viewer.