rngqueue.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // C++ Implementation: rngqueue
  3. //
  4. // Description:
  5. //
  6. //
  7. // Author: Frank Michler,,, <frank@pc13365>, (C) 2010
  8. //
  9. // Copyright: See COPYING file that comes with this distribution
  10. //
  11. //
  12. #include <vector>
  13. #include "rngqueue.hpp"
  14. using namespace std;
  15. /** @brief Constructor
  16. *
  17. */
  18. RngQueue::RngQueue(IRngQueuePool* _RngPool, vector<double>* _FreshRandomNumbers)
  19. : mRngQueuePool(_RngPool), mRngNumberVector(_FreshRandomNumbers)
  20. {
  21. mVectorEnd = mRngNumberVector->end();
  22. mVectorIter = mRngNumberVector->begin();
  23. }
  24. RngQueue::~RngQueue()
  25. {
  26. mRngQueuePool->releaseRngQueue(this);
  27. }
  28. /** @brief provides a fresh random number. Not reentrant!! Call this member of the same object instance from only one thread!
  29. *
  30. * @return random number
  31. */
  32. double RngQueue::getRandomNumber()
  33. {
  34. if (mVectorIter == mVectorEnd) {
  35. getFreshNumbers();
  36. }
  37. double RandomValue = (*mVectorIter);
  38. ++mVectorIter;
  39. return RandomValue;
  40. }
  41. void RngQueue::getFreshNumbers()
  42. {
  43. mRngNumberVector = mRngQueuePool->getRandomNumberVector(this);
  44. mVectorEnd = mRngNumberVector->end();
  45. mVectorIter = mRngNumberVector->begin();
  46. }