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;
}