# BEdgeBreaker.h

## Macro Definitions

| `EB_DEFAULT`
| `HINT_ONE_PIECE`
| `HINT_WATERTIGHT`
| `HINT_MANIFOLD`
| `HINT_NO_HANDLES`
| `HINT_NO_BACKWARDS_OR_HOLES`
| `HINT_INPUT_BY_TRISTRIPS`
| `STATUS_ERROR`
| `STATUS_NORMAL`
| `STATUS_COMPLETE`
| `STATUS_WATERTIGHT`
| `STATUS_TRY_AGAIN`
| `MTABLE_HAS_LENGTHS`
| `MTABLE_HAS_M2STACKOFFSETS`
| `MTABLE_HAS_M2GATEOFFSETS`
| `MTABLE_HAS_DUMMIES`
| `MTABLE_HAS_PATCHES`
| `MTABLE_HAS_BOUNDING`
| `MTABLE_HAS_QUANTIZATION`
| `MTABLE_HAS_QUANTIZATION_NORMALS`
| `CASE_C`
| `CASE_L`
| `CASE_E`
| `CASE_R`
| `CASE_S`
| `CASE_M`
| `CASE_M2`
| `TONEXT4`
| `MAXVAL`
| `BIG_FLOAT`
| `DEFAULT_QUANTIZATION`
| `DEFAULT_POINT_FACTOR`
| `DEFAULT_HINTS`
| `POINTSIZE`
| `GARBAGE_VERTEX`
| `DUMMY_VERTEX`
| `GARBAGE`
| `VERTEX_SPECIAL`
| `INVALIDATE_VERTEX`
| `EA_VERTEX_INDEX`
| `PROXY_VERTEX_INDEX`
| `GARBAGE_EDGE`
| `MULTIPLE_EDGE`
| `EDGE_SPECIAL`
| `EDGE_INVALID`
| `INVALIDATE_EDGE`
| `REAL_EDGE_INDEX`
| `I2V`
| `V2I`
| `HALF_EDGE_INIT`
| `HNEXT`
| `HPREV`

## Types

| ET_Bounding_TAG
| eb_compress_configs_TAG
| eb_decompress_configs_TAG
| edgebreaker_header0
| edgebreaker_header1
| EDGEBREAKER_HEADER_TAG
| mtable_info
| HALF_EDGE_TAG
| half_edge_array
| int_stack
| varstream
| loop_table

## Type Aliases

struct ET_Bounding_TAG | `ET_Bounding`
struct eb_compress_configs_TAG | `eb_compress_configs`
struct eb_decompress_configs_TAG | `eb_decompress_configs`
struct EDGEBREAKER_HEADER_TAG | `edgebreaker_header`
struct HALF_EDGE_TAG | `half_edge`
short | `INT16`
int | `INT32`

## Functions

int | `show_edgebreaker_compress_size`
int | `edgebreaker_compress`
int | `show_edgebreaker_decompress_size`
int | `edgebreaker_decompress`
void | `mtable_info_init`
void | `mtable_info_free`
int | `lookup_vertex`
void | `predict`
int | `old_predict`
int | `old_pack_points`
int | `old_unpack_points`
int | `old_unpack_normals`
int | `int_stack_init`
int | `int_stack_expand`
void | `int_stack_free`
int | `int_stack_pop`
int | `int_stack_pop_internal`
void | `int_stack_push`
void | `int_stack_push_if_unique`
int | `validate_associations`
int | `half_edge_array_init`
void | `half_edge_array_free`
int | `half_edge_array_expand`
int | `half_edge_array_append`
int | `validate_edge`
void * | `default_malloc`
void | `default_free`
void | `default_new_vertex`
void | `vsinit_write`
void | `vsinit_read`
void | `vsfree`
void | `vsswap`
void | `vsput`
int | `vsget`

## Detailed Description

## Macro Definition

EB_DEFAULT

HINT_ONE_PIECE

HINT_WATERTIGHT

HINT_MANIFOLD

HINT_NO_HANDLES

HINT_NO_BACKWARDS_OR_HOLES

HINT_INPUT_BY_TRISTRIPS

STATUS_ERROR

STATUS_NORMAL

STATUS_COMPLETE

STATUS_WATERTIGHT

STATUS_TRY_AGAIN

MTABLE_HAS_LENGTHS

MTABLE_HAS_M2STACKOFFSETS

MTABLE_HAS_M2GATEOFFSETS

MTABLE_HAS_DUMMIES

MTABLE_HAS_PATCHES

MTABLE_HAS_BOUNDING

MTABLE_HAS_QUANTIZATION

MTABLE_HAS_QUANTIZATION_NORMALS

CASE_C

CASE_L

CASE_E

CASE_R

CASE_S

CASE_M

CASE_M2

TONEXT4(i)

MAXVAL(bits)

BIG_FLOAT

DEFAULT_QUANTIZATION

DEFAULT_POINT_FACTOR

DEFAULT_HINTS

POINTSIZE

GARBAGE_VERTEX

DUMMY_VERTEX

GARBAGE

VERTEX_SPECIAL(x)

INVALIDATE_VERTEX(x)

EA_VERTEX_INDEX(x)

PROXY_VERTEX_INDEX(proxy_hash, v)

GARBAGE_EDGE

MULTIPLE_EDGE

EDGE_SPECIAL(x)

EDGE_INVALID(x)

INVALIDATE_EDGE(x)

REAL_EDGE_INDEX(x)

I2V(x)

V2I(x)

HALF_EDGE_INIT(h)

HNEXT(i)

HPREV(i)

## Type Alias Documentation

typedef struct ET_Bounding_TAG ET_Bounding

typedef struct eb_compress_configs_TAG eb_compress_configs

typedef struct eb_decompress_configs_TAG eb_decompress_configs

typedef struct EDGEBREAKER_HEADER_TAG edgebreaker_header

typedef struct HALF_EDGE_TAG half_edge

typedef short INT16

typedef int INT32

## Function Documentation

int show_edgebreaker_compress_size(int pcount, int flen, int const *face_data, int *stream_len_out, int *pointmap_count_out, eb_compress_configs const *configs)

int edgebreaker_compress(int pcount, float const *points, float const *normals, int flen, int const *fdata_in, int *stream_len_in_out, void *stream_out, int *pointmap_len_in_out, int *pointmap_out, eb_compress_configs const *configs)

int show_edgebreaker_decompress_size(int stream_len, void const *stream, int *pcount_out, int *normal_count_out, int *flen_out)

int edgebreaker_decompress(int stream_len, void const *stream, int *pcount_in_out, float *points_out, float *normals_out, bool *by_tristrips_out, int *flen_in_out, int *faces_out, eb_decompress_configs const *configs)

void mtable_info_init(mtable_info *m)

void mtable_info_free(mtable_info *m)

int lookup_vertex(const struct vhash_s *proxy_hash, int v)

void predict(half_edge_array const *ea, int ei, int third_vertex_unknown, char const *touched, struct vhash_s const *proxy_hash, int const *quantized_points, int *prediction_out)

int old_predict(int const *associations, int const *points, ET_Bounding const *bounding, int x_quantization, int y_quantization, int z_quantization, int *out)

int old_pack_points(mtable_info *mtable, int *associations, edgebreaker_header *hptr, int original_pointcount, int const *pointmap, float const *points, int buffsize, void *buffer_out, eb_compress_configs const *configs)

int old_unpack_points(int const *associations, edgebreaker_header const *hptr, void const *diffs_in, float *points_out, ET_Bounding const *bounding, int x_quantization, int y_quantization, int z_quantization)

int old_unpack_normals(int const *associations, edgebreaker_header const *hptr, void const *diffs_in, float *normals_out, int x_quantization_normals, int y_quantization_normals, int z_quantization_normals)

int int_stack_init(int_stack *s)

int int_stack_expand(int_stack *s)

void int_stack_free(int_stack *s)

int int_stack_pop(int_stack *s)

int int_stack_pop_internal(int_stack *s, int offset, int *out)

void int_stack_push(int_stack *s, int n)

void int_stack_push_if_unique(int_stack *s, int n)

int validate_associations(int const *associations, int pointcount)

int half_edge_array_init(half_edge_array *ea, int initial_size)

void half_edge_array_free(half_edge_array *ea)

int half_edge_array_expand(half_edge_array *ea)

int half_edge_array_append(half_edge_array *ea, half_edge **out)

int validate_edge(half_edge_array const *ea, half_edge const *a, loop_table const *loops)

void *default_malloc(size_t size, void *user_data)

void default_free(void *ptr, void *user_data)

void default_new_vertex(int a, int b, int c, void *user_data)

void vsinit_write(varstream *vs, int size, void *pointer)

void vsinit_read(varstream *vs, int size, void *pointer)

void vsfree(varstream *vs)

void vsswap(varstream *vs)

void vsput(varstream *vs, const int *numbits_array, int val)

int vsget(varstream *vs, const int *numbits_array)