about std.string.representation
Ali Çehreli
acehreli at yahoo.com
Mon Nov 18 22:11:25 PST 2013
On 11/18/2013 07:48 PM, bioinfornatics wrote:
> On Thursday, 14 November 2013 at 12:01:04 UTC, Ali Çehreli wrote:
>> On 11/13/2013 04:32 PM, bioinfornatics wrote:
>>> Hi,
>>> I try to understand which type char, dchar, wchar will give
>>> ubyte,ushort,uint…
>>
>> And for templates, there is std.range.ElementEncodingType:
>>
>> import std.stdio;
>> import std.range;
>>
>> void foo(R)(R range)
>> {
>> // In contrast, ElementType!R for strings is always dchar
>> writeln(typeid(ElementEncodingType!R));
>> }
>>
>> void main()
>> {
>> string t = "test";
>> char[] c = "test".dup;
>> dchar[] dc = "test"d.dup;
>> wchar[] wc = "test"w.dup;
>>
>> foo(t);
>> foo(c);
>> foo(dc);
>> foo(wc);
>> }
>>
>> Prints:
>>
>> immutable(char)
>> char
>> dchar
>> wchar
>>
>> Ali
>
> Thanks Ali that is interesting too …
>
> In same way i would like to know if they are a function wich return
> ubyte, ushort, uint instead of:
>
> - char, dchar, wchar from std.range.ElementEncodingType
> - ubyte[], ushort[], uint[] from std.string.representation
>
>
> maybe:
>
> foo(T)( string s ){
> alias T typeof(s.representation[0]);
> …
> …
> …
> }
I don't know an existing function but I think the following is what you
are looking for:
import std.range;
template NonUtfElementEncodingType(S)
{
alias ET = ElementEncodingType!S;
static if (is (ET == char)) {
alias NonUtfElementEncodingType = ubyte;
} else static if (is (ET == wchar)) {
alias NonUtfElementEncodingType = ushort;
} else static if (is (ET == dchar)) {
alias NonUtfElementEncodingType = uint;
} else {
alias NonUtfElementEncodingType = ET;
}
}
void main()
{
alias Foo = NonUtfElementEncodingType!string;
Foo[] myByteArray;
}
Ali
More information about the Digitalmars-d-learn
mailing list