Loading include/ByteStream.h +14 −0 Original line number Diff line number Diff line Loading @@ -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. Loading src/ByteStream.cpp +36 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
include/ByteStream.h +14 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
src/ByteStream.cpp +36 −0 Original line number Diff line number Diff line Loading @@ -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) Loading