Poke_Transporter_GB/tools/make-file-container/include/FileContainerChunkWriter.h
2026-05-18 12:44:35 +02:00

42 lines
1.4 KiB
C++

#ifndef _FILECONTAINERCHUNKWITER_H
#define _FILECONTAINERCHUNKWITER_H
#include "utils.h"
/**
* @brief This class is responsible for divvying up the data into chunks and writing them to separate files.
* This is necessary to avoid having to load the entire container into memory at once, which could be a problem for large containers.
*
*/
class FileContainerChunkWriter
{
public:
FileContainerChunkWriter(const char* outPath, const char* filenameBase, uint16_t chunkSize);
~FileContainerChunkWriter();
// Delete copy and move constructors and assignment operators
FileContainerChunkWriter(const FileContainerChunkWriter&) = delete;
FileContainerChunkWriter(FileContainerChunkWriter&&) = delete;
FileContainerChunkWriter& operator=(const FileContainerChunkWriter&) = delete;
FileContainerChunkWriter& operator=(FileContainerChunkWriter&&) = delete;
void write(const uint8_t* buffer, uint32_t bytesToWrite);
void writeUint8(uint8_t value);
void writeUint16(uint16_t value, Endianness fieldEndianness = Endianness::LITTLE);
void writeUint32(uint32_t value, Endianness fieldEndianness = Endianness::LITTLE);
protected:
private:
uint16_t getBytesRemainingInCurrentChunk() const;
bool startChunk();
uint8_t numChunks_;
uint16_t currentChunkSize_;
FILE *currentFile_;
const char* outPath_;
const char* filenameBase_;
const uint16_t chunkSize_;
};
#endif