On Saturday, 15 August 2015 at 18:04:30 UTC, D_Learner wrote:
    memcpy(&skip[0], &skip[0]+shift, (m-shift)*(int.sizeof));
    memset(&skip[0]+(m-shift),0, shift*(int.sizeof))

I was thinking conversion would be :-

skip[0 .. size-1] = skip[shift .. size-1 ]; //For the memcpy();

Those two slices have different lengths (when shift != 0). They must have equal lengths, and they must not overlap.

    skip[0 .. size-1] = 0;    //For memset()

But this doesn't seem to work for me as dmd(v2.066.1) gives the "error slice [8..7] exceeds array bounds [0..8]" .Sure am missing something.

You can just do mechanical translations.
  memcpy(dst, src, n * T.sizeof);
becomes
  dst[0 .. n] = src[0 .. n];
Then simplify.

Original:
  memcpy(&skip[0], &skip[0]+shift, (m-shift)*(int.sizeof));
Identify the pieces:
  dst = &skip[0]
  src = &skip[0]+shift
  n = m-shift
Substitute:
  (&skip[0])[0 .. m-shift] = (&skip[0]+shift)[0 .. m-shift];
Simplify:
  skip[0 .. m-shift] = skip[shift .. $][0 .. m-shift];
  skip[0 .. m-shift] = skip[shift .. shift + m-shift];
  skip[0 .. m-shift] = skip[shift .. m];

I sure hope I didn't mess anyting up.

memset is very similar.
  memset(dst, val, n * T.sizeof);
becomes
  dst[0 .. n] = val;
Then simplify.

Reply via email to