12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //
- // C++ Implementation: rngqueue
- //
- // Description:
- //
- //
- // Author: Frank Michler,,, <frank@pc13365>, (C) 2010
- //
- // Copyright: See COPYING file that comes with this distribution
- //
- //
- #include <vector>
- #include "rngqueue.hpp"
- using namespace std;
- /** @brief Constructor
- *
- */
- RngQueue::RngQueue(IRngQueuePool* _RngPool, vector<double>* _FreshRandomNumbers)
- : mRngQueuePool(_RngPool), mRngNumberVector(_FreshRandomNumbers)
- {
- mVectorEnd = mRngNumberVector->end();
- mVectorIter = mRngNumberVector->begin();
- }
- RngQueue::~RngQueue()
- {
- mRngQueuePool->releaseRngQueue(this);
- }
- /** @brief provides a fresh random number. Not reentrant!! Call this member of the same object instance from only one thread!
- *
- * @return random number
- */
- double RngQueue::getRandomNumber()
- {
- if (mVectorIter == mVectorEnd) {
- getFreshNumbers();
- }
- double RandomValue = (*mVectorIter);
- ++mVectorIter;
- return RandomValue;
- }
- void RngQueue::getFreshNumbers()
- {
- mRngNumberVector = mRngQueuePool->getRandomNumberVector(this);
- mVectorEnd = mRngNumberVector->end();
- mVectorIter = mRngNumberVector->begin();
- }
|