Skip to content
Snippets Groups Projects
Commit 25b5e3f9 authored by Andrea Zoli's avatar Andrea Zoli
Browse files

Add ByteStream functions getPaddedCopy() and getUnpaddedCopy().

parent 98f2ff57
No related branches found
No related tags found
No related merge requests found
......@@ -107,6 +107,20 @@ public:
/// Gets the dimension of the stream
dword size();
/// Create a copy of the stream with some additional padding. The stream is divided into chunks
/// with numberOfChunks = size() / chunkSize.
/// \param chunkSize the size of a chunk without padding.
/// \param padSize Size of the padding.
/// \return The padded copy of this byte stream.
ByteStreamPtr getPaddedCopy(dword chunkSize, dword padSize);
/// Create a copy of the stream removing some padding. The stream is divided into chunks
/// with numberOfChunks = size() / chunkSize.
/// \param chunkSize the size of a chunk with padding.
/// \param padSize Size of the padding.
/// \return The unpadded copy of this byte stream.
ByteStreamPtr getUnpaddedCopy(dword chunkSize, dword padSize);
char* printStreamInHexadecimal();
/// Get type of allocations.
......
......@@ -496,6 +496,42 @@ void PacketLib::ByteStream::deleteStreamMemory()
delete[] stream;
}
ByteStreamPtr PacketLib::ByteStream::getPaddedCopy(dword chunkSize, dword padSize)
{
if(byteInTheStream % chunkSize != 0)
throw new PacketException("getPadCopy() error. Chunk size must be a divisor of ByteStream::size().");
dword nChunks = byteInTheStream / chunkSize;
dword newChunkSize = chunkSize + padSize;
ByteStreamPtr sPtr = ByteStreamPtr(new ByteStream(nChunks*(newChunkSize), bigendian));
byte* raw = sPtr->getStream();
for(dword i=0; i<nChunks; i++)
memcpy(raw+i*newChunkSize, stream+i*chunkSize, chunkSize);
return sPtr;
}
ByteStreamPtr PacketLib::ByteStream::getUnpaddedCopy(dword chunkSize, dword padSize)
{
if(byteInTheStream % chunkSize != 0)
throw new PacketException("getUnpadCopy() error. Chunk size must be a divisor of ByteStream::size().");
if(chunkSize - padSize <= 0)
throw new PacketException("getUnpadCopy() error. Chunk size - pad size gives a value <= 0.");
dword nChunks = byteInTheStream / chunkSize;
dword newChunkSize = chunkSize - padSize;
ByteStreamPtr sPtr = ByteStreamPtr(new ByteStream(nChunks*(newChunkSize), bigendian));
byte* raw = sPtr->getStream();
for(dword i=0; i<nChunks; i++)
memcpy(raw+i*newChunkSize, stream+i*chunkSize, newChunkSize);
return sPtr;
}
void PacketLib::ByteStream::swapWord() {
dword dim = byteInTheStream;
for(dword i = 0; i< dim; i+=2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment