Skip to content
Snippets Groups Projects
Commit 76887f82 authored by Andrea Bulgarelli's avatar Andrea Bulgarelli
Browse files

merged

parents f9feff52 25b5e3f9
Branches
Tags
No related merge requests found
......@@ -119,6 +119,20 @@ public:
/// \param dim number of byte (1 or 2)
long getValue(dword start, word dim);
/// 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