VLERange: a range in between BidirectionalRange and RandomAccessRange

Michel Fortin michel.fortin at michelf.com
Sat Jan 15 08:46:25 PST 2011


On 2011-01-15 10:59:52 -0500, foobar <foo at bar.com> said:

> Ok, I guess I missed the "byDchar()" method.
> I envisioned the same algorithm looking like this:
> 
> // original string
> string str = "...";
> 
> // create normalized decomposed string as a lazy range of dchar (NFD)
> // Note: explicitly specify code points range:
> auto decomposed = decompose(str.codePoints);
> 
> // filter to remove your favorite combining code point
> auto filtered = filter!"a != 0xFABA"(decomposed);
> 
> // turn it back in composed form (NFC), optional
> auto recomposed = compose(filtered);
> 
> // convert back to a string
> // Note: a string type can be constructed from a range of code points
> string result = string(recomposed);
> 
> The difference is that a string type is distinct from the intermediate 
> code point ranges (This happens in your design too albeit in a less 
> obvious way to the user). There is string specific code. Why not 
> encapsulate it in a string type instead of forcing the user to use 
> complex APIs with templates everywhere?

What I don't understand is in what way using a string type would make 
the API less complex and use less templates?

More generally, in what way would your string type behave differently 
than char[], wchar[], and dchar[]? I think we need to clarify what how 
you expect your string type to behave before I can answer anything. I 
mean, beside cosmetic changes such as having a codePoint property 
instead of by!dchar or byDchar, what is your string type doing 
differently?

The above algorithm is already possible with strings as they are, 
provided you implement the 'decompose' and the 'compose' function 
returning a range. In fact, you only changed two things in it: by!dchar 
became codePoints, and array() became string(). Surely you're expecting 
more benefits than that.

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/



More information about the Digitalmars-d mailing list