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;
|
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 Random::nextLargeNumber (const BigInteger& maximumValue)
|
||||||
{
|
{
|
||||||
BigInteger n;
|
BigInteger n;
|
||||||
@@ -133,6 +116,20 @@ BigInteger Random::nextLargeNumber (const BigInteger& maximumValue)
|
|||||||
return n;
|
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)
|
void Random::fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits)
|
||||||
{
|
{
|
||||||
arrayToChange.setBit (startBit + numBits - 1, true); // to force the array to pre-allocate space
|
arrayToChange.setBit (startBit + numBits - 1, true); // to force the array to pre-allocate space
|
||||||
|
|||||||
@@ -89,16 +89,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool nextBool() noexcept;
|
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 BigInteger containing a random number.
|
||||||
|
|
||||||
@returns a random value in the range 0 to (maximumValue - 1).
|
@returns a random value in the range 0 to (maximumValue - 1).
|
||||||
*/
|
*/
|
||||||
BigInteger nextLargeNumber (const BigInteger& maximumValue);
|
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. */
|
/** Sets a range of bits in a BigInteger to random values. */
|
||||||
void fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits);
|
void fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user