-
-
Save matthewbauer/e137cdffbb0de0cc1d48ab5765a0d470 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Generated by Molecule 0.5.0 | |
#define MOLECULEC_VERSION 5000 | |
#define MOLECULE_API_VERSION_MIN 5000 | |
#include "molecule_reader.h" | |
#include "molecule_builder.h" | |
#ifndef CC_H | |
#define CC_H | |
#ifdef __cplusplus | |
#define _CPP_BEGIN extern "C" { | |
#define _CPP_END } | |
_CPP_BEGIN | |
#endif /* __cplusplus */ | |
#ifndef MOLECULE_API_DECORATOR | |
#define __DEFINE_MOLECULE_API_DECORATOR_CC | |
#define MOLECULE_API_DECORATOR | |
#endif /* MOLECULE_API_DECORATOR */ | |
#include "../../a/a.h" | |
#include "../../b/b.h" | |
#include "../../b/bb/bb.h" | |
#include "../../b/bc/bc.h" | |
#include "../c.h" | |
/* | |
* Reader APIs | |
*/ | |
MOLECULE_API_DECORATOR mol_errno MolReader_CC_verify (const mol_seg_t*, bool); | |
#define MolReader_CC_actual_field_count(s) mol_table_actual_field_count(s) | |
#define MolReader_CC_has_extra_fields(s) mol_table_has_extra_fields(s, 5) | |
#define MolReader_CC_get_a(s) mol_table_slice_by_index(s, 0) | |
#define MolReader_CC_get_b(s) mol_table_slice_by_index(s, 1) | |
#define MolReader_CC_get_c(s) mol_table_slice_by_index(s, 2) | |
#define MolReader_CC_get_bb(s) mol_table_slice_by_index(s, 3) | |
#define MolReader_CC_get_bc(s) mol_table_slice_by_index(s, 4) | |
/* | |
* Builder APIs | |
*/ | |
#define MolBuilder_CC_init(b) mol_table_builder_initialize(b, 1024, 5) | |
#define MolBuilder_CC_set_a(b, p, l) mol_table_builder_add(b, 0, p, l) | |
#define MolBuilder_CC_set_b(b, p, l) mol_table_builder_add(b, 1, p, l) | |
#define MolBuilder_CC_set_c(b, p, l) mol_table_builder_add(b, 2, p, l) | |
#define MolBuilder_CC_set_bb(b, p, l) mol_table_builder_add(b, 3, p, l) | |
#define MolBuilder_CC_set_bc(b, p, l) mol_table_builder_add(b, 4, p, l) | |
MOLECULE_API_DECORATOR mol_seg_res_t MolBuilder_CC_build (mol_builder_t); | |
#define MolBuilder_CC_clear(b) mol_builder_discard(b) | |
/* | |
* Default Value | |
*/ | |
#define ____ 0x00 | |
MOLECULE_API_DECORATOR const uint8_t MolDefault_CC[188] = { | |
0xbc, ____, ____, ____, 0x18, ____, ____, ____, 0x1c, ____, ____, ____, | |
0x28, ____, ____, ____, 0x44, ____, ____, ____, 0x60, ____, ____, ____, | |
0x04, ____, ____, ____, 0x0c, ____, ____, ____, 0x08, ____, ____, ____, | |
0x04, ____, ____, ____, 0x1c, ____, ____, ____, 0x0c, ____, ____, ____, | |
0x10, ____, ____, ____, 0x04, ____, ____, ____, 0x0c, ____, ____, ____, | |
0x08, ____, ____, ____, 0x04, ____, ____, ____, 0x1c, ____, ____, ____, | |
0x0c, ____, ____, ____, 0x10, ____, ____, ____, 0x04, ____, ____, ____, | |
0x0c, ____, ____, ____, 0x08, ____, ____, ____, 0x04, ____, ____, ____, | |
0x5c, ____, ____, ____, 0x14, ____, ____, ____, 0x18, ____, ____, ____, | |
0x24, ____, ____, ____, 0x40, ____, ____, ____, 0x04, ____, ____, ____, | |
0x0c, ____, ____, ____, 0x08, ____, ____, ____, 0x04, ____, ____, ____, | |
0x1c, ____, ____, ____, 0x0c, ____, ____, ____, 0x10, ____, ____, ____, | |
0x04, ____, ____, ____, 0x0c, ____, ____, ____, 0x08, ____, ____, ____, | |
0x04, ____, ____, ____, 0x1c, ____, ____, ____, 0x0c, ____, ____, ____, | |
0x10, ____, ____, ____, 0x04, ____, ____, ____, 0x0c, ____, ____, ____, | |
0x08, ____, ____, ____, 0x04, ____, ____, ____, | |
}; | |
#undef ____ | |
/* | |
* Reader Functions | |
*/ | |
MOLECULE_API_DECORATOR mol_errno MolReader_CC_verify (const mol_seg_t *input, bool compatible) { | |
if (input->size < MOL_NUM_T_SIZE) { | |
return MOL_ERR_HEADER; | |
} | |
uint8_t *ptr = input->ptr; | |
mol_num_t total_size = mol_unpack_number(ptr); | |
if (input->size != total_size) { | |
return MOL_ERR_TOTAL_SIZE; | |
} | |
if (input->size < MOL_NUM_T_SIZE * 2) { | |
return MOL_ERR_HEADER; | |
} | |
ptr += MOL_NUM_T_SIZE; | |
mol_num_t offset = mol_unpack_number(ptr); | |
if (offset % 4 > 0 || offset < MOL_NUM_T_SIZE*2) { | |
return MOL_ERR_OFFSET; | |
} | |
mol_num_t field_count = offset / 4 - 1; | |
if (field_count < 5) { | |
return MOL_ERR_FIELD_COUNT; | |
} else if (!compatible && field_count > 5) { | |
return MOL_ERR_FIELD_COUNT; | |
} | |
if (input->size < MOL_NUM_T_SIZE*(field_count+1)){ | |
return MOL_ERR_HEADER; | |
} | |
mol_num_t offsets[field_count+1]; | |
offsets[0] = offset; | |
for (mol_num_t i=1; i<field_count; i++) { | |
ptr += MOL_NUM_T_SIZE; | |
offsets[i] = mol_unpack_number(ptr); | |
if (offsets[i-1] > offsets[i]) { | |
return MOL_ERR_OFFSET; | |
} | |
} | |
if (offsets[field_count-1] > total_size) { | |
return MOL_ERR_OFFSET; | |
} | |
offsets[field_count] = total_size; | |
mol_seg_t inner; | |
mol_errno errno; | |
inner.ptr = input->ptr + offsets[0]; | |
inner.size = offsets[1] - offsets[0]; | |
errno = MolReader_A_verify(&inner, compatible); | |
if (errno != MOL_OK) { | |
return MOL_ERR_DATA; | |
} | |
inner.ptr = input->ptr + offsets[1]; | |
inner.size = offsets[2] - offsets[1]; | |
errno = MolReader_B_verify(&inner, compatible); | |
if (errno != MOL_OK) { | |
return MOL_ERR_DATA; | |
} | |
inner.ptr = input->ptr + offsets[2]; | |
inner.size = offsets[3] - offsets[2]; | |
errno = MolReader_C_verify(&inner, compatible); | |
if (errno != MOL_OK) { | |
return MOL_ERR_DATA; | |
} | |
inner.ptr = input->ptr + offsets[3]; | |
inner.size = offsets[4] - offsets[3]; | |
errno = MolReader_BB_verify(&inner, compatible); | |
if (errno != MOL_OK) { | |
return MOL_ERR_DATA; | |
} | |
inner.ptr = input->ptr + offsets[4]; | |
inner.size = offsets[5] - offsets[4]; | |
errno = MolReader_BC_verify(&inner, compatible); | |
if (errno != MOL_OK) { | |
return MOL_ERR_DATA; | |
} | |
return MOL_OK; | |
} | |
/* | |
* Builder Functions | |
*/ | |
MOLECULE_API_DECORATOR mol_seg_res_t MolBuilder_CC_build (mol_builder_t builder) { | |
mol_seg_res_t res; | |
res.errno = MOL_OK; | |
mol_num_t offset = 24; | |
mol_num_t len; | |
res.seg.size = offset; | |
len = builder.number_ptr[1]; | |
res.seg.size += len == 0 ? 4 : len; | |
len = builder.number_ptr[3]; | |
res.seg.size += len == 0 ? 12 : len; | |
len = builder.number_ptr[5]; | |
res.seg.size += len == 0 ? 28 : len; | |
len = builder.number_ptr[7]; | |
res.seg.size += len == 0 ? 28 : len; | |
len = builder.number_ptr[9]; | |
res.seg.size += len == 0 ? 92 : len; | |
res.seg.ptr = (uint8_t*)malloc(res.seg.size); | |
uint8_t *dst = res.seg.ptr; | |
mol_pack_number(dst, &res.seg.size); | |
dst += MOL_NUM_T_SIZE; | |
mol_pack_number(dst, &offset); | |
dst += MOL_NUM_T_SIZE; | |
len = builder.number_ptr[1]; | |
offset += len == 0 ? 4 : len; | |
mol_pack_number(dst, &offset); | |
dst += MOL_NUM_T_SIZE; | |
len = builder.number_ptr[3]; | |
offset += len == 0 ? 12 : len; | |
mol_pack_number(dst, &offset); | |
dst += MOL_NUM_T_SIZE; | |
len = builder.number_ptr[5]; | |
offset += len == 0 ? 28 : len; | |
mol_pack_number(dst, &offset); | |
dst += MOL_NUM_T_SIZE; | |
len = builder.number_ptr[7]; | |
offset += len == 0 ? 28 : len; | |
mol_pack_number(dst, &offset); | |
dst += MOL_NUM_T_SIZE; | |
len = builder.number_ptr[9]; | |
offset += len == 0 ? 92 : len; | |
uint8_t *src = builder.data_ptr; | |
len = builder.number_ptr[1]; | |
if (len == 0) { | |
len = 4; | |
memcpy(dst, &MolDefault_A, len); | |
} else { | |
mol_num_t of = builder.number_ptr[0]; | |
memcpy(dst, src+of, len); | |
} | |
dst += len; | |
len = builder.number_ptr[3]; | |
if (len == 0) { | |
len = 12; | |
memcpy(dst, &MolDefault_B, len); | |
} else { | |
mol_num_t of = builder.number_ptr[2]; | |
memcpy(dst, src+of, len); | |
} | |
dst += len; | |
len = builder.number_ptr[5]; | |
if (len == 0) { | |
len = 28; | |
memcpy(dst, &MolDefault_C, len); | |
} else { | |
mol_num_t of = builder.number_ptr[4]; | |
memcpy(dst, src+of, len); | |
} | |
dst += len; | |
len = builder.number_ptr[7]; | |
if (len == 0) { | |
len = 28; | |
memcpy(dst, &MolDefault_BB, len); | |
} else { | |
mol_num_t of = builder.number_ptr[6]; | |
memcpy(dst, src+of, len); | |
} | |
dst += len; | |
len = builder.number_ptr[9]; | |
if (len == 0) { | |
len = 92; | |
memcpy(dst, &MolDefault_BC, len); | |
} else { | |
mol_num_t of = builder.number_ptr[8]; | |
memcpy(dst, src+of, len); | |
} | |
dst += len; | |
mol_builder_discard(builder); | |
return res; | |
} | |
#ifdef __DEFINE_MOLECULE_API_DECORATOR_CC | |
#undef MOLECULE_API_DECORATOR | |
#undef __DEFINE_MOLECULE_API_DECORATOR_CC | |
#endif /* __DEFINE_MOLECULE_API_DECORATOR_CC */ | |
#ifdef __cplusplus | |
_CPP_END | |
#undef _CPP_BEGIN | |
#undef _CPP_END | |
#endif /* __cplusplus */ | |
#endif /* CC_H */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment