#include "global.h"
#include <stdint.h>
#include <string.h>
#ifndef __cplusplus
#include <stdbool.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
enum bpserror {
bps_ok,
bps_to_output, bps_not_this, bps_broken, bps_io,
bps_identical, bps_too_big, bps_out_of_mem, bps_canceled,
bps_shut_up_gcc};
enum bpserror bps_apply(struct mem patch, struct mem in, struct mem * out, struct mem * metadata, bool accept_wrong_input);
enum bpserror bps_create_linear(struct mem source, struct mem target, struct mem metadata, struct mem * patch);
#ifdef __cplusplus enum bpserror bps_create_delta(file* source, file* target, struct mem metadata, struct mem * patch,
bool (*progress)(void* userdata, size_t done, size_t total), void* userdata,
bool moremem);
#endif
enum bpserror bps_create_delta_inmem(struct mem source, struct mem target, struct mem metadata, struct mem * patch,
bool (*progress)(void* userdata, size_t done, size_t total), void* userdata,
bool moremem);
void bps_free(struct mem mem);
#ifdef __cplusplus
struct bpsinfo {
enum bpserror error;
size_t size_in;
size_t size_out;
uint32_t crc_in;
uint32_t crc_out;
uint32_t crc_patch;
size_t meta_start;
size_t meta_size;
size_t change_num;
size_t change_denom;
};
struct bpsinfo bps_get_info(file* patch, bool changefrac);
#endif
#ifdef __cplusplus
}
#endif