API Reference
Notes on the C API in case I need to embed this in something else later.
Core functions
#include "packrat.h"
// In-memory
int prt_compress(const uint8_t *input, size_t input_size,
uint8_t *output, size_t *output_size);
int prt_decompress(const uint8_t *input, size_t input_size,
uint8_t *output, size_t *output_size);
// Files
int prt_compress_file(const char *input_path, const char *output_path);
int prt_decompress_file(const char *input_path, const char *output_path);
// Get original size before decompressing (for buffer allocation)
size_t prt_get_original_size(const uint8_t *input, size_t input_size);
Archives
#include "archive.h"
prt_archive_t *prt_archive_create(const char *path);
prt_archive_t *prt_archive_open(const char *path);
void prt_archive_close(prt_archive_t *archive);
int prt_archive_add_dir(prt_archive_t *archive,
const char *dir_path, const char *base_path);
int prt_archive_finalize(prt_archive_t *archive);
int prt_archive_extract_all(prt_archive_t *archive, const char *output_dir);
Solid archives use archive_v3.h - same pattern but prt_solid_archive_* functions.
BWT directly
#include "bwt.h"
uint32_t bwt_encode(const uint8_t *input, uint8_t *output, size_t size);
void bwt_decode(const uint8_t *input, uint8_t *output, size_t size,
uint32_t primary_index);
The encode returns the primary index needed for decode.
Error codes
#define PRT_OK 0
#define PRT_ERR_MEMORY -1
#define PRT_ERR_FORMAT -2
#define PRT_ERR_FILE -3
#define PRT_ERR_CORRUPT -4
Example
// Compress a buffer
uint8_t *input = read_file("data.txt", &input_size);
uint8_t *output = malloc(input_size + 1024); // some headroom
size_t output_size = input_size + 1024;
if (prt_compress(input, input_size, output, &output_size) == PRT_OK) {
write_file("data.prt", output, output_size);
}
All archive functions clean up on _close(). Memory for in-memory ops is caller’s responsibility.