Defining a static array with values in a range

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 22 10:26:17 PST 2015


On Thursday, 22 January 2015 at 18:23:00 UTC, Meta wrote:
Whoops, I forgot to make it a template to force CTFE.

import std.stdio;

template charRange(string spec)
{
     static processInput(string spec)
     {
         import std.algorithm;
         import std.ascii;
         import std.conv;
         import std.range;
         import std.string;

         return spec.split(',').map!((s)
         {
             s = s.strip;
             auto start = s[1..$].front;
             auto end = s[0..$-1].back;

             return iota(start, end + 1).map!(c => 
cast(char)c).array;
         }).array.join;
     }

     enum charRange = processInput(spec);
}


void main(string[] argv)
{
     auto t = charRange!q{ 'a'..'z', 'A'..'Z', '0'..'9' };
     writeln(t);

     readln();
}


More information about the Digitalmars-d-learn mailing list