Commit 76887f82 authored by Andrea Bulgarelli's avatar Andrea Bulgarelli
Browse files

merged

parents f9feff52 25b5e3f9
Loading
Loading
Loading
Loading
+102 B (42 KiB)

File changed.

No diff preview for this file type.

+14 −0
Original line number Diff line number Diff line
@@ -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.
+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)