mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Add Random::fillBitsRandomly
This commit is contained in:
@@ -103,23 +103,6 @@ double Random::nextDouble() noexcept
|
||||
return static_cast <uint32> (nextInt()) / (double) 0xffffffff;
|
||||
}
|
||||
|
||||
void Random::nextBlob (void* buffer, size_t bytes)
|
||||
{
|
||||
int const remainder = bytes % sizeof (int64);
|
||||
|
||||
{
|
||||
int64* dest = static_cast <int64*> (buffer);
|
||||
for (int i = bytes / sizeof (int64); i > 0; --i)
|
||||
*dest++ = nextInt64 ();
|
||||
buffer = dest;
|
||||
}
|
||||
|
||||
{
|
||||
int64 const val = nextInt64 ();
|
||||
memcpy (buffer, &val, remainder);
|
||||
}
|
||||
}
|
||||
|
||||
BigInteger Random::nextLargeNumber (const BigInteger& maximumValue)
|
||||
{
|
||||
BigInteger n;
|
||||
@@ -133,6 +116,20 @@ BigInteger Random::nextLargeNumber (const BigInteger& maximumValue)
|
||||
return n;
|
||||
}
|
||||
|
||||
void Random::fillBitsRandomly (void* const buffer, size_t bytes)
|
||||
{
|
||||
int* d = static_cast<int*> (buffer);
|
||||
|
||||
for (; bytes >= sizeof (int); bytes -= sizeof (int))
|
||||
*d++ = nextInt();
|
||||
|
||||
if (bytes > 0)
|
||||
{
|
||||
const int lastBytes = nextInt();
|
||||
memcpy (d, &lastBytes, bytes);
|
||||
}
|
||||
}
|
||||
|
||||
void Random::fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits)
|
||||
{
|
||||
arrayToChange.setBit (startBit + numBits - 1, true); // to force the array to pre-allocate space
|
||||
|
||||
@@ -89,16 +89,15 @@ public:
|
||||
*/
|
||||
bool nextBool() noexcept;
|
||||
|
||||
/** Fills a piece of memory with random data.
|
||||
*/
|
||||
void nextBlob (void* buffer, size_t bytes);
|
||||
|
||||
/** Returns a BigInteger containing a random number.
|
||||
|
||||
@returns a random value in the range 0 to (maximumValue - 1).
|
||||
*/
|
||||
BigInteger nextLargeNumber (const BigInteger& maximumValue);
|
||||
|
||||
/** Fills a block of memory with random values. */
|
||||
void fillBitsRandomly (void* bufferToFill, size_t sizeInBytes);
|
||||
|
||||
/** Sets a range of bits in a BigInteger to random values. */
|
||||
void fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user