Commit 25b5e3f9 authored by Andrea Zoli's avatar Andrea Zoli
Browse files

Add ByteStream functions getPaddedCopy() and getUnpaddedCopy().

parent 98f2ff57
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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.
+36 −0
Original line number Diff line number Diff line
@@ -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)