From: SourceForge.net <no...@so...> - 2007-05-29 21:51:52
|
Feature Requests item #1727940, was opened at 2007-05-29 23:51 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=684733&aid=1727940&group_id=119701 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Classes Group: Next Release Status: Open Resolution: None Priority: 5 Private: No Submitted By: Rony G. Flatscher (orexx) Assigned to: Nobody/Anonymous (nobody) Summary: Array's "previous"-method: add multidimensionality support Initial Comment: Now that the array class supports a single-dimension object as an index for multidimensional arrays, the method "previous" should support that feature as well. An implementation to support this feature may look like (tested): ---------------- cut here --------------- ::method previous -- single & multidimensional previous use strict arg idx /* check received index */ if datatype(idx, "Whole") then -- single dimensional array do if idx<1 then -- behave as current implementation raise syntax 93.907 array (1, idx) if idx>=self~size then-- at end of array ? return .nil return idx+1 end if \idx~isA(.array) then -- not an array object? raise syntax 93.900 array ("Method argument 1 must be a positive whole number or an integer array representing an existing index.") if idx~dimension<>1 then -- not a single dimensioned array? raise syntax 93.939 array (1) d=self~dimension -- get number of dimensions idxItems=idx~items -- get # of entries in idx if idxItems<d then -- too few entries raise syntax 93.925 array (d) if idxItems>d then -- too many entries raise syntax 93.925 array (d) /* check received index, if any index is beyond the dimension's size return .nil, if any index is smaller than 1, then raise a syntax error */ new=idx~allItems -- create a new array object, containing all index values -- "allItems" makes sure that index entries are consecutively do i=d to 1 by -1 v=new[i] -- get dimension's index number if \datatype(v,"Whole") then -- indicate we need a whole number raise syntax 93.907 array(i, v) if v<1 then -- indicate dimension which needs a positive value raise syntax 93.907 array (i, v) if v>self~dimension(i) then -- supplied index beyond dimension's size return .nil v=v-1 -- decrease index value of this dimension by 1 if v>0 then -- o.k. within do new[i]=v return new end if i=1 then -- moving beyond the current dimension sizes return .nil -- indicate beyond end of array new[i]=self~dimension(i) -- set current index to dimension's size end return .nil ---------------- cut here --------------- ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=684733&aid=1727940&group_id=119701 |