Module: internal Author: Jonathan Bachrach Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND define limited-array (fill: 0); define limited-array-minus-selector () (fill: 0); define limited-array-minus-selector () (fill: 0); define limited-array-minus-constructor (, ) (fill: #f); define sealed domain element-type (); define sealed method make (class == , #key dimensions = unsupplied(), element-type, fill = #f) => (array :: ) let (dimensions, size) = compute-array-dimensions-and-size(dimensions); unless (size = 0) check-type(fill, element-type); end unless; next-method(class, element-type: element-type, dimensions: dimensions, size: size, fill: fill) end method; define method concrete-limited-array-class (of :: ) => (res :: ) end method; define sealed inline method element-setter (new-value, array :: , index :: ) => (object) check-type(new-value, element-type(array)); if (index >= 0 & index < array.size) row-major-element-type-array-element(array, index) := new-value else element-range-error(array, index) end if end method element-setter; define sealed inline method type-for-copy (array :: ) => (type :: ) limited-array(element-type(array), #f) end method type-for-copy; /// REALLY NEED SUBTYPE SPECIALIZERS TO GET THIS TO HAPPEN IN MACRO define method concrete-limited-array-class (of :: ) => (res :: ) select (of by subtype?) => ; => ; otherwise => ; end select; end method; define limited-array (fill: as(, 0)); define limited-array (fill: 0.0); define limited-array (fill: as(, 0.0)); // eof