#include "cmp.h"
#include <fontconfig/fontconfig.h>
FcStrSet *decodeStrSet(cmp_ctx_t *bytes);
FcStrSet *decodeFileSet(cmp_ctx_t *bytes);
bool encodeStrSet(cmp_ctx_t *bytes, FcStrSet *data);
uint8_t *testStrSet(uint8_t *in, size_t in_length, size_t *length);
FcCharSet *decodeCharSet(cmp_ctx_t *bytes);
bool encodeStrList(cmp_ctx_t *bytes, const FcStrList *data);
bool encodeCharSet(cmp_ctx_t *bytes, const FcCharSet *data);
uint8_t *testCharSet(uint8_t *in, size_t in_length, size_t *length);
FcLangSet *decodeLangSet(cmp_ctx_t *bytes);
bool encodeLangSet(cmp_ctx_t *bytes, const FcLangSet *data);
uint8_t *testLangSet(uint8_t *in, size_t in_length, size_t *length);
FcObjectSet *decodeObjectSet(cmp_ctx_t *bytes);
FcRange *decodeRange(cmp_ctx_t *bytes);
bool encodeRange(cmp_ctx_t *bytes, const FcRange *data);
uint8_t *testRange(uint8_t *in, size_t in_length, size_t *length);
FcMatrix *decodeMatrix(cmp_ctx_t *bytes);
bool encodeMatrix(cmp_ctx_t *bytes, const FcMatrix *data);
uint8_t *testMatrix(uint8_t *in, size_t in_length, size_t *length);
bool decodeValue(cmp_ctx_t *bytes, FcValue *out);
bool encodeValue(cmp_ctx_t *bytes, FcValue *data);
uint8_t *testValue(uint8_t *in, size_t in_length, size_t *length);
FcPattern *decodePattern(cmp_ctx_t *bytes);
bool encodePattern(cmp_ctx_t *bytes, FcPattern *data);
uint8_t *testPattern(uint8_t *in, size_t in_length, size_t *length);
FcFontSet *decodeFontSet(cmp_ctx_t *bytes);
FcFontSet **decodeFontSets(cmp_ctx_t *bytes, size_t *nsets);
bool encodeFontSet(cmp_ctx_t *bytes, FcFontSet *data);
uint8_t *testFontSet(uint8_t *in, size_t in_length, size_t *length);
bool encodeRenderableFontSet(cmp_ctx_t *bytes, FcFontSet *data);
bool encodeResult(cmp_ctx_t *bytes, FcResult res);
bool cmp_bytes_init(cmp_ctx_t *ctx, uint8_t *buf, size_t length);
bool cmp_bytes_alloc(cmp_ctx_t *ctx, size_t length);
void cmp_bytes_free(cmp_ctx_t *ctx);
uint8_t *cmp_bytes_take(cmp_ctx_t *ctx, size_t *length);