about std.string.representation
bioinfornatics
bioinfornatics at fedoraproject.org
Tue Nov 19 15:53:32 PST 2013
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;
}
More information about the Digitalmars-d-learn
mailing list