mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-29 23:45:51 +00:00
Rename beast sources for consistency
This commit is contained in:
151
modules/beast_core/streams/MemoryInputStream.cpp
Normal file
151
modules/beast_core/streams/MemoryInputStream.cpp
Normal file
@@ -0,0 +1,151 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
This file is part of Beast: https://github.com/vinniefalco/Beast
|
||||
Copyright 2013, Vinnie Falco <vinnie.falco@gmail.com>
|
||||
|
||||
Portions of this file are from JUCE.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
Please visit http://www.juce.com
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
MemoryInputStream::MemoryInputStream (const void* const sourceData,
|
||||
const size_t sourceDataSize,
|
||||
const bool keepInternalCopy)
|
||||
: data (sourceData),
|
||||
dataSize (sourceDataSize),
|
||||
position (0)
|
||||
{
|
||||
if (keepInternalCopy)
|
||||
createInternalCopy();
|
||||
}
|
||||
|
||||
MemoryInputStream::MemoryInputStream (const MemoryBlock& sourceData,
|
||||
const bool keepInternalCopy)
|
||||
: data (sourceData.getData()),
|
||||
dataSize (sourceData.getSize()),
|
||||
position (0)
|
||||
{
|
||||
if (keepInternalCopy)
|
||||
createInternalCopy();
|
||||
}
|
||||
|
||||
void MemoryInputStream::createInternalCopy()
|
||||
{
|
||||
internalCopy.malloc (dataSize);
|
||||
memcpy (internalCopy, data, dataSize);
|
||||
data = internalCopy;
|
||||
}
|
||||
|
||||
MemoryInputStream::~MemoryInputStream()
|
||||
{
|
||||
}
|
||||
|
||||
int64 MemoryInputStream::getTotalLength()
|
||||
{
|
||||
return dataSize;
|
||||
}
|
||||
|
||||
int MemoryInputStream::read (void* const buffer, const int howMany)
|
||||
{
|
||||
bassert (buffer != nullptr && howMany >= 0);
|
||||
|
||||
const int num = bmin (howMany, (int) (dataSize - position));
|
||||
if (num <= 0)
|
||||
return 0;
|
||||
|
||||
memcpy (buffer, addBytesToPointer (data, position), (size_t) num);
|
||||
position += (unsigned int) num;
|
||||
return num;
|
||||
}
|
||||
|
||||
bool MemoryInputStream::isExhausted()
|
||||
{
|
||||
return position >= dataSize;
|
||||
}
|
||||
|
||||
bool MemoryInputStream::setPosition (const int64 pos)
|
||||
{
|
||||
position = (size_t) blimit ((int64) 0, (int64) dataSize, pos);
|
||||
return true;
|
||||
}
|
||||
|
||||
int64 MemoryInputStream::getPosition()
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
||||
class MemoryStreamTests : public UnitTest
|
||||
{
|
||||
public:
|
||||
MemoryStreamTests() : UnitTest ("MemoryStream", "beast") { }
|
||||
|
||||
void runTest()
|
||||
{
|
||||
beginTestCase ("Basics");
|
||||
Random r;
|
||||
|
||||
int randomInt = r.nextInt();
|
||||
int64 randomInt64 = r.nextInt64();
|
||||
double randomDouble = r.nextDouble();
|
||||
String randomString (createRandomWideCharString());
|
||||
|
||||
MemoryOutputStream mo;
|
||||
mo.writeInt (randomInt);
|
||||
mo.writeIntBigEndian (randomInt);
|
||||
mo.writeCompressedInt (randomInt);
|
||||
mo.writeString (randomString);
|
||||
mo.writeInt64 (randomInt64);
|
||||
mo.writeInt64BigEndian (randomInt64);
|
||||
mo.writeDouble (randomDouble);
|
||||
mo.writeDoubleBigEndian (randomDouble);
|
||||
|
||||
MemoryInputStream mi (mo.getData(), mo.getDataSize(), false);
|
||||
expect (mi.readInt() == randomInt);
|
||||
expect (mi.readIntBigEndian() == randomInt);
|
||||
expect (mi.readCompressedInt() == randomInt);
|
||||
expectEquals (mi.readString(), randomString);
|
||||
expect (mi.readInt64() == randomInt64);
|
||||
expect (mi.readInt64BigEndian() == randomInt64);
|
||||
expect (mi.readDouble() == randomDouble);
|
||||
expect (mi.readDoubleBigEndian() == randomDouble);
|
||||
}
|
||||
|
||||
static String createRandomWideCharString()
|
||||
{
|
||||
beast_wchar buffer [50] = { 0 };
|
||||
Random r;
|
||||
|
||||
for (int i = 0; i < numElementsInArray (buffer) - 1; ++i)
|
||||
{
|
||||
if (r.nextBool())
|
||||
{
|
||||
do
|
||||
{
|
||||
buffer[i] = (beast_wchar) (1 + r.nextInt (0x10ffff - 1));
|
||||
}
|
||||
while (! CharPointer_UTF16::canRepresent (buffer[i]));
|
||||
}
|
||||
else
|
||||
buffer[i] = (beast_wchar) (1 + r.nextInt (0xff));
|
||||
}
|
||||
|
||||
return CharPointer_UTF32 (buffer);
|
||||
}
|
||||
};
|
||||
|
||||
static MemoryStreamTests memoryStreamTests;
|
||||
Reference in New Issue
Block a user