On 12/04/12 21:54, bearophile wrote:
     sampling_test_simple!(VitterA!Random,Random)(100,5,urng);

Currently your code doesn't work if you want to use a Xorshift generator.

Ahhh, I see what you mean now -- the sampler classes are fine, but the way the main() function is written means you can't just tweak the RNG.

The original code I tried writing was something like,

    sampling_test_simple!(VitterA, Random)(100, 5, urng);

... with the sampler object being created in the function with,

    auto s = new SamplerType!UniformRNG(records, samples, urng);

... but the compiler objected to that with the error,

    sampled.d:216: Error: template instance
    sampling_test_simple!(VitterA,XorshiftEngine!(uint,128,11,8,19))
    does not match template declaration
    sampling_test_simple(SamplerType,UniformRNG)

Here's the complete (wrong) function:

void sampling_test_simple(SamplerType, UniformRNG)
                         (size_t records, size_t samples, ref UniformRNG urng)
{
      auto s = new SamplerType!UniformRNG(records,samples,urng);
      while(s.sampleRemaining > 0) {
            write("\trecord selected: ", s.select(urng), ".");
            write("\trecords remaining: ", s.recordsRemaining, ".");
            writeln("\tstill to sample: ", s.sampleRemaining, ".");
      }
}

It's not clear to me why this fails or what I can do that would equate to this.

Reply via email to