Continue png writing.

This commit is contained in:
James Grogan 2022-11-24 16:15:41 +00:00
parent 5400a232dd
commit 8f97e9b7a1
29 changed files with 714 additions and 302 deletions

View 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()
{
}
};

View file

@ -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;

View file

@ -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};
};

View file

@ -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);
}

View file

@ -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;
};