On Tuesday, 19 November 2013 at 06:11:26 UTC, Ali Çehreli wrote:
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

Yes that is what i want. whyu not to use a piece of code from std.string.representation ?

auto CharEncodingType(Char)(Char[] s) pure nothrow
    if(isSomeChar!Char)
{
    // Get representation type
    alias TypeTuple!(ubyte, ushort, uint)U;

    // const and immutable storage classes
    static if (is(Char == immutable)) alias immutable(U) T;
    else static if (is(Char == const)) alias const(U) T;
    else alias U T;

    // shared storage class (because shared(const(T)) is possible)
    static if (is(Char == shared)) alias shared(T) ST;
    else alias T ST;

    return cast(ST) s;
}

Reply via email to