mirror of
https://github.com/GearsProgress/Poke_Transporter_GB.git
synced 2026-07-15 07:44:11 -05:00
42 lines
1.4 KiB
C++
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 |