Compiletime Table
D_Learner via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Aug 13 12:50:29 PDT 2015
On Thursday, 13 August 2015 at 19:26:12 UTC, Adam D. Ruppe wrote:
> On Thursday, 13 August 2015 at 19:13:55 UTC, D_Learner wrote:
>> I was wondering how I could change the code below such the
>> `bmBc` is computed at compile time .
>
> It is currently not possible to build an associative array at
> compile time and keep it as a runtime table due to the
> implementation.
>
> However, looking at your code, you don't need a full AA... the
> key is a single char, right?
>
> Do something like this:
>
> int[128] bmBc = calculate(); // ....
>
>
> And then a line like this should work to set it in the
> calculate function:
>
> bmBc[pattern[i]] = i-1;
>
>
>
> Adjust this code to fit you:
>
>
> int[128] a = calc();
> enum string pattern = "abc";
>
> int[128] calc() {
> int[128] a; // local copy to work on as we build
> a[pattern[0]] = 0;
> return a; // return the completed table
> }
>
>
>
>
> This works because individual characters have a numeric value.
> If they are all A-Z, you can easily fit them in a small array
> and access them even faster than an associative array (doesn't
> even have to be full size 128 if the only keys are the letters).
>
> And these can be built at CTFE and stored in the program's data
> segment.
Thanks, the 128 is fine since I was considering the whole ASCII
character set . I was a bit skeptical of writing the code in that
manor though since I have to still compare runtime and
compiletime implementation performance(benchmarks ). That is why
my code seemed to mimic templating . Maybe the question would
then be, how do I force this function to be fully executed at
compiletime and later make it be executed at runntime ?
More information about the Digitalmars-d-learn
mailing list