Continue png writing.
This commit is contained in:
parent
5400a232dd
commit
8f97e9b7a1
29 changed files with 714 additions and 302 deletions
16
src/core/streams/AbstractChecksumCalculator.h
Normal file
16
src/core/streams/AbstractChecksumCalculator.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
class AbstractChecksumCalculator
|
||||
{
|
||||
public:
|
||||
virtual ~AbstractChecksumCalculator() = default;
|
||||
|
||||
virtual void addValue(unsigned char val) = 0;
|
||||
virtual uint32_t getChecksum() const = 0;
|
||||
|
||||
virtual void reset()
|
||||
{
|
||||
}
|
||||
};
|
|
@ -28,6 +28,15 @@ void BitStream::write(uint32_t data)
|
|||
}
|
||||
}
|
||||
|
||||
void BitStream::writeWord(uint16_t data)
|
||||
{
|
||||
unsigned num_bytes = sizeof(uint16_t);
|
||||
for(unsigned idx=0; idx<num_bytes;idx++)
|
||||
{
|
||||
writeByte(ByteUtils::getByteN(data, idx));
|
||||
}
|
||||
}
|
||||
|
||||
int BitStream::getCurrentByteOffset() const
|
||||
{
|
||||
return mByteOffset;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "AbstractChecksumCalculator.h"
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
|
@ -29,11 +31,39 @@ public:
|
|||
|
||||
void write(uint32_t data);
|
||||
|
||||
void writeWord(uint16_t data);
|
||||
|
||||
virtual void writeBytes(const std::vector<unsigned char> data) = 0;
|
||||
|
||||
void resetOffsets()
|
||||
{
|
||||
mByteOffset = -1;
|
||||
mBitOffset = 0;
|
||||
}
|
||||
|
||||
virtual void reset()
|
||||
{
|
||||
resetOffsets();
|
||||
mCurrentByte = 0;
|
||||
}
|
||||
|
||||
void setChecksumCalculator(AbstractChecksumCalculator* calc)
|
||||
{
|
||||
mChecksumCalculator = calc;
|
||||
}
|
||||
|
||||
void clearChecksumCalculator()
|
||||
{
|
||||
mChecksumCalculator = nullptr;
|
||||
}
|
||||
|
||||
//unsigned getSize() = 0;
|
||||
|
||||
protected:
|
||||
int mByteOffset{0};
|
||||
int mByteOffset{-1};
|
||||
unsigned mBitOffset{0};
|
||||
|
||||
unsigned char mCurrentByte{0};
|
||||
|
||||
AbstractChecksumCalculator* mChecksumCalculator{nullptr};
|
||||
};
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#include "BufferBitStream.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
bool BufferBitStream::isFinished() const
|
||||
{
|
||||
return mByteOffset == mBuffer.size();
|
||||
return mByteOffset == mBuffer.size() - 1;
|
||||
}
|
||||
|
||||
std::vector<unsigned char> BufferBitStream::peekNextNBytes(unsigned n) const
|
||||
|
@ -43,6 +45,10 @@ void BufferBitStream::setBuffer(const std::vector<unsigned char>& data)
|
|||
|
||||
void BufferBitStream::writeByte(unsigned char data)
|
||||
{
|
||||
if (mChecksumCalculator)
|
||||
{
|
||||
mChecksumCalculator->addValue(data);
|
||||
}
|
||||
mBuffer.push_back(data);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,12 +27,13 @@ public:
|
|||
return mBuffer;
|
||||
}
|
||||
|
||||
void resetOffsets()
|
||||
void reset() override
|
||||
{
|
||||
mByteOffset = 0;
|
||||
mBitOffset = 0;
|
||||
BitStream::reset();
|
||||
mBuffer.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned mBufferSize{0};
|
||||
std::vector<unsigned char> mBuffer;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue