Boost logo

Boost Users :

Subject: Re: [Boost-users] [random] Singleton engine
From: Diederick C. Niehorster (dcnieho_at_[hidden])
Date: 2009-08-17 05:44:33


Thank Kevin,

Agreed, syntax doesn't change much, but your implementation is more lightweight.

It doesn't add only two symbols though, it adds:
generator_
grng_setGenerator()
grng_generator()
grng_randomVariable()

or do you put those in their own namespace?

Thanks again, I've been enlightened.
Best,
Diederick

On Mon, Aug 17, 2009 at 3:25 PM, Kevin Martin<kev82_at_[hidden]> wrote:
>
> On 17 Aug 2009, at 04:51, Diederick C. Niehorster wrote:
>
>> I have decided to try to do without the whole singleton (although I
>> don't really see what the point is of avoiding a singleton if we still
>> have a global pointer, its almost the same thing) as an exercise and
>> try out Kevin's implementation.
>
> A singleton is extra code and extra work to maintain. Why create yourself
> more classes, more namespace pollution,   and a more complex system when it
> is not necessary.
>
> I think I am just anti singleton. I believe it is far too overused, and
> apart from in a few niche cases provides nothing but additional complexity.
>
>> Hmm, i have tried so, but the syntax to actually extract the random
>> numbers becomes very complicated now (I think i am missing a point
>> here, i am new to boost.function).
>
>
> Your method 2 is the one I use (except I use =) I wouldn't say it is a lot
> of typing, or particularly complicated, most editors will let you
> autocomplete the grng_function and the distribution name, so it's only about
> 15 keystrokes. In fact it is no different to
>
> CRandom<boost::uniform_int<int>> Cr(1,100);
>
> If you really wanted you could define a macro to make the function call for
> you, kind of equivalent to your typedef. I think that would make it harder
> to read though and not easier, as you would need a macro for each
> distribution.
>
> The reason I like it because I find it very readable and it only adds two
> symbols to the namespace. Take this code for example, if you had a separate
> wrapper class for the two distributions, would it be easier to read?
>
> (Note I use the old syntax for boost::function because I don't like the new
> one)
>
> boost::shared_ptr<boost::multi_array<int, 2> > vals =
>  fbc_extractCellValues(board);
> MatrixSwap ms(*vals);
>
> boost::function0<bool> RVswapRow = grng_randomVariable(
>  boost::bernoulli_distribution<>());
> boost::function0<int> RVindex = grng_randomVariable(
>  boost::uniform_smallint<>(0, board.boardSize()-1));
>
> for(int i=0;i!=10000;++i) {
>    int idx1 = 0, idx2 = 0;
>    while(idx1 == idx2) {
>        idx1 = RVindex();
>        idx2 = RVindex();
>    }
>    if(RVswapRow()) {
>        ms.swapRows(idx1, idx2);
>    } else {
>        ms.swapCols(idx1, idx2);
>    }
> }
>
> Thanks,
> Kevin Martin
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net