Redefine #'copy so that it has one required argument (source) and one optional argument (destination). For marrays, create a destination using make-marray, if one was not given, and then use the memcpy functions to fill the values. For all other mobjects, copy will copy objects by calling one of two generic functions, #'copy-to-destination and #'copy-making-destination, depending on whether a destination was supplied. The former is defined if a GSL _memcpy function exists. The latter will look for a GSL _clone function, then make a CL instance with the pointer returned as mpointer. If there is no clone function, it will attempt to make a new object using make-load-form, so will fail if that method has not been defined. Added a check to defmfun that signals an error if a variable is used in the C arguments other than top-level that is not used in the CL arglist. This should not happen and is usually an indication of a typo.
Showing with 255 additions and 345 deletions