Multidimensional slice
Rafael
rfkadyrov at gmail.com
Wed Dec 19 08:19:22 PST 2012
On Wednesday, 19 December 2012 at 15:19:01 UTC, Nekroze wrote:
> On Wednesday, 19 December 2012 at 14:08:25 UTC, Rafael wrote:
>> On Wednesday, 19 December 2012 at 13:28:24 UTC, Nekroze wrote:
>>> On Wednesday, 19 December 2012 at 12:27:32 UTC, Rafael wrote:
>>>> 1) It is possible to implement multiindex access using
>>>> opIndex* methods, moreover this is the simplest way to
>>>> multiindex access realization. So, we have [i, j, k]
>>>> notation. Next step after it - slices implementation and it
>>>> looks logical to save the same notation for it: [i1..i2,
>>>> j1..j2, k]. But it impossible, if I understand correctly.
>>>>
>>>> 2) On the other hand. Syntax via [i][j] leads to some
>>>> overhead: first index access [i] must return some light
>>>> accessor object (like range (or iterator)) which supports
>>>> the index access operation. But using this approach it is
>>>> possible to implement multidimensional slices. And this
>>>> means, that opIndex* methods with multiindex are not needed.
>>>
>>> Well if you are looking at operator overloading you can
>>> overload opSlice as described here
>>> http://dlang.org/operatoroverloading.html#Slice however i am
>>> not sure if you can defined multiple slices delimited by
>>> commas in the same [] block but it is worth a try.
>>
>> ...and we return to my initial question :)
>> The answer is: no, D is not support multidimension slices.
>> Possible way to solve it is to define some auxiliary structure
>> Slice, and use multiindex by following way:
>> S [ Slice(0, $), 2] = A [ Slice(0, $), 2];
>
> Instead of defining a struct for that why not allow index to
> take a uint array defining the lower and upper bounds of the
> slice. You may have to make the opSlice or opIndex a template
> however but I believe you should be able to take a uint[2] as
> an argument.
>
> Atleast this way you dont have to add more structs to the mix
> and you can just do:
> S[[0, S.length], 2] = A [[0, A.length], 2];
> or some such, there may be a way of preserving the $ symbol but
> you would have to deal with that anyway if you made it an
> argument to a struct. perhaps a string mixin?
Yes, it is good solution, thank you! But anyway it means not so
nice and laconic syntax..
P.S. yes, I am killjoy :)
More information about the Digitalmars-d-learn
mailing list