www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - slice based on base and width

reply =?UTF-8?B?IsOYaXZpbmQi?= <oivind.loe gmail.com> writes:
I find myself writing the following a lot:

   a[base..base+width]

to get the slice starting at 'base' of width 'width'. In verilog, 
we select members of a vector/array in three ways

   a[c :  d]   //D: a[c   .. d+1]
   a[c +: d]   //D: a[c   .. c+d]
   a[c -: d]   //D: a[c-d .. c]

Borrowing a bit from verilog, could we make two new operators, 
maybe +.. and -.. that allow us to do the same?

I could then write e.g.

   a[base+..width]

instead of the more verbose

   a[base..base+width]
Sep 08 2013
next sibling parent reply =?UTF-8?B?IsOYaXZpbmQi?= <oivind.loe gmail.com> writes:
   a[c -: d]   //D: a[c-d .. c]

I think this should be a[c -: d] //D: a[c-d+1 .. c+1], e.g. a[5 -: 2] == [a[4], a[5]]
Sep 08 2013
parent Walter Bright <newshound2 digitalmars.com> writes:
On 9/8/2013 6:03 AM, "Øivind" wrote:
 That throws safety out the window for one. If you want safety and
 no new language features, this should work:

   a[base..$][0..width]

Thanks Still a little verbose, but at least you don't have to type the same things twice. I guess the double slice will be optimized into a single one at least for release mode, so there should be no performance degredation?

Try it and see. If it isn't, feel free to file an enhancement request for the optimizer!
Sep 08 2013
prev sibling next sibling parent "Chang Long" <changlon gmail.com> writes:
On Sunday, 8 September 2013 at 10:53:23 UTC, Øivind wrote:
  a[c -: d]   //D: a[c-d .. c]

I think this should be a[c -: d] //D: a[c-d+1 .. c+1], e.g. a[5 -: 2] == [a[4], a[5]]

try &a[base][0..width]
Sep 08 2013
prev sibling next sibling parent "Simen Kjaeraas" <simen.kjaras gmail.com> writes:
On 2013-09-08, 14:02, Chang Long wrote:

 On Sunday, 8 September 2013 at 10:53:23 UTC, =C3=98ivind wrote:
  a[c -: d]   //D: a[c-d .. c]

I think this should be a[c -: d] //D: a[c-d+1 .. c+1], e.g. a[5 -: 2] =3D=3D [a[4], a[5]]=


 try &a[base][0..width]

That throws safety out the window for one. If you want safety and no new language features, this should work: a[base..$][0..width] -- = Simen
Sep 08 2013
prev sibling parent =?UTF-8?B?IsOYaXZpbmQi?= <oivind.loe gmail.com> writes:
On Sunday, 8 September 2013 at 12:08:50 UTC, Simen Kjaeraas wrote:
 On 2013-09-08, 14:02, Chang Long wrote:

 On Sunday, 8 September 2013 at 10:53:23 UTC, Øivind wrote:
 a[c -: d]   //D: a[c-d .. c]

I think this should be a[c -: d] //D: a[c-d+1 .. c+1], e.g. a[5 -: 2] == [a[4], a[5]]

try &a[base][0..width]

That throws safety out the window for one. If you want safety and no new language features, this should work: a[base..$][0..width]

Thanks Still a little verbose, but at least you don't have to type the same things twice. I guess the double slice will be optimized into a single one at least for release mode, so there should be no performance degredation?
Sep 08 2013