Re: Need help: Return reference slice

2014-10-30 Thread advibm via Digitalmars-d-learn

Thank you very much for your additions.
I am still new to D so I am glad to see solutions from 
experienced D programmers.




Need help: Return reference slice

2014-10-29 Thread advibm via Digitalmars-d-learn

Hello,

I would like to create a D function that returns a slice of a 
string.

This slice shall be a reference to a part of the string argument.
Is this generally possible in D?

This is the function:
auto ref betweenTwoStrings(T)(inout T src, string start, string 
end) {

  long a = src.countUntil(start);
  if (a  0)
return src; // null
  a += start.length;
  long b = src[a..$].countUntil(end);
  if (b  0)
return src; // null
  b += a;
  return src[a..b];
}


I would like to have something like that:

char[] buf; // already filled array
char[] partOfBuf = betweenTwoStrings(buf, START, END);
partOfBuf[0] = 'a'; // THIS should also change the 'buf' variable
assert(buf[0] == 'a');

Thanks for your help


Re: Need help: Return reference slice

2014-10-29 Thread advibm via Digitalmars-d-learn

On Wednesday, 29 October 2014 at 19:54:45 UTC, bearophile wrote:

advibm:


I would like to have something like that:

char[] buf; // already filled array
char[] partOfBuf = betweenTwoStrings(buf, START, END);
partOfBuf[0] = 'a'; // THIS should also change the 'buf' 
variable

assert(buf[0] == 'a');

Thanks for your help


To do this you don't need to return a ref slice. A slice 
suffices. But D strings/wstrings/dstrings are made of immutable 
chars, so you can't modify them. So you need to work with 
char[] or dchar[] or wchar[].


Bye,
bearophile


Thank you for your fast answer.
I am embarrased but my code already works as expected.
I made a mistake when I wanted to change the partOfBuf variable.
I wrote: partOfBuf = replacedArray;
But I had to write partOfBuf[0..$] = replacedArray.