#ifndef _BINARYDATA_H
#define _BINARYDATA_H
#include <stdio.h>
enum REB_BINARYDATA_ERROR_CODE {
REB_BINARYDATA_WARNING_NONE = 0,
REB_BINARYDATA_ERROR_NOFILE = 1,
REB_BINARYDATA_WARNING_VERSION = 2,
REB_BINARYDATA_WARNING_POINTERS = 4,
REB_BINARYDATA_WARNING_PARTICLES = 8,
REB_BINARYDATA_ERROR_FILENOTOPEN = 16,
REB_BINARYDATA_ERROR_OUTOFRANGE = 32,
REB_BINARYDATA_ERROR_SEEK = 64,
REB_BINARYDATA_WARNING_FIELD_UNKNOWN = 128,
REB_BINARYDATA_ERROR_INTEGRATOR = 256,
REB_BINARYDATA_WARNING_CORRUPTFILE = 512,
REB_BINARYDATA_ERROR_OLD = 1024,
REB_BINARYDATA_WARNING_CUSTOM_INTEGRATOR = 2048,
};
enum REB_BINARYDATA_OUTPUT {
REB_BINARYDATA_OUTPUT_NONE = 0,
REB_BINARYDATA_OUTPUT_PRINT = 1,
REB_BINARYDATA_OUTPUT_STREAM = 2,
REB_BINARYDATA_OUTPUT_BUFFER = 3
};
int reb_binarydata_diff(char* buf1, size_t size1, char* buf2, size_t size2, char** bufp, size_t* sizep, enum REB_BINARYDATA_OUTPUT output_option);
void reb_binarydata_input_fields(struct reb_simulation* r, FILE* inf, enum REB_BINARYDATA_ERROR_CODE* warnings);
struct reb_simulation* reb_binarydata_process_warnings(struct reb_simulation* r, enum REB_BINARYDATA_ERROR_CODE warnings);
REB_API void reb_binarydata_simulation_to_stream(struct reb_simulation* r, char** bufp, size_t* sizep);
#define REB_AS_STRUCT_MEMBER(prefix, value, name) {value, #name},
#define REB_GENERATE_ENUM_DESCRIPTORS(LIST) \
(struct reb_binarydata_enum_descriptor[]){ \
LIST(REB_AS_STRUCT_MEMBER, LIST)\
{0} \
}
struct reb_binarydata_field {
uint64_t size_name; uint64_t size_data; };
REB_API extern const struct reb_binarydata_field_descriptor reb_binarydata_field_descriptor_list[];
REB_API extern const uint64_t reb_binarydata_header;
REB_API struct reb_binarydata_field_descriptor reb_binarydata_field_descriptor_for_name(const struct reb_simulation * const r, const char* name);
#endif