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

merged

parents f9feff52 25b5e3f9
Branches
No related tags found
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 to comment