##############
BEdgeBreaker.h
##############

.. default-domain:: cpp

Macro Definitions
=================

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

Types
=====

=== ==========================================
..  :doc:`structET__Bounding__TAG`            
..  :doc:`structeb__compress__configs__TAG`   
..  :doc:`structeb__decompress__configs__TAG` 
..  :doc:`structedgebreaker__header0`         
..  :doc:`structedgebreaker__header1`         
..  :doc:`structEDGEBREAKER__HEADER__TAG`     
..  :doc:`structmtable__info`                 
..  :doc:`structHALF__EDGE__TAG`              
..  :doc:`structhalf__edge__array`            
..  :doc:`structint__stack`                   
..  :doc:`structvarstream`                    
..  :doc:`structloop__table`                  
=== ==========================================

Type Aliases
============

================================================= ===================================
struct :doc:`structET__Bounding__TAG`             :cpp:type:`~ET_Bounding`           
struct :doc:`structeb__compress__configs__TAG`    :cpp:type:`~eb_compress_configs`   
struct :doc:`structeb__decompress__configs__TAG`  :cpp:type:`~eb_decompress_configs` 
struct :doc:`structEDGEBREAKER__HEADER__TAG`      :cpp:type:`~edgebreaker_header`    
struct :doc:`structHALF__EDGE__TAG`               :cpp:type:`~half_edge`             
short                                             :cpp:type:`~INT16`                 
int                                               :cpp:type:`~INT32`                 
================================================= ===================================

Functions
=========

======= =============================================================================================================================================================================================================================================================================
int     :cpp:func:`show_edgebreaker_compress_size <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     :cpp:func:`edgebreaker_compress <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     :cpp:func:`show_edgebreaker_decompress_size <int show_edgebreaker_decompress_size(int stream_len, void const *stream, int *pcount_out, int *normal_count_out, int *flen_out)>`                                                                                               
int     :cpp:func:`edgebreaker_decompress <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    :cpp:func:`mtable_info_init <void mtable_info_init(mtable_info *m)>`                                                                                                                                                                                                         
void    :cpp:func:`mtable_info_free <void mtable_info_free(mtable_info *m)>`                                                                                                                                                                                                         
int     :cpp:func:`lookup_vertex <int lookup_vertex(const struct vhash_s *proxy_hash, int v)>`                                                                                                                                                                                       
void    :cpp:func:`predict <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     :cpp:func:`old_predict <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     :cpp:func:`old_pack_points <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     :cpp:func:`old_unpack_points <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     :cpp:func:`old_unpack_normals <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     :cpp:func:`int_stack_init <int int_stack_init(int_stack *s)>`                                                                                                                                                                                                                
int     :cpp:func:`int_stack_expand <int int_stack_expand(int_stack *s)>`                                                                                                                                                                                                            
void    :cpp:func:`int_stack_free <void int_stack_free(int_stack *s)>`                                                                                                                                                                                                               
int     :cpp:func:`int_stack_pop <int int_stack_pop(int_stack *s)>`                                                                                                                                                                                                                  
int     :cpp:func:`int_stack_pop_internal <int int_stack_pop_internal(int_stack *s, int offset, int *out)>`                                                                                                                                                                          
void    :cpp:func:`int_stack_push <void int_stack_push(int_stack *s, int n)>`                                                                                                                                                                                                        
void    :cpp:func:`int_stack_push_if_unique <void int_stack_push_if_unique(int_stack *s, int n)>`                                                                                                                                                                                    
int     :cpp:func:`validate_associations <int validate_associations(int const *associations, int pointcount)>`                                                                                                                                                                       
int     :cpp:func:`half_edge_array_init <int half_edge_array_init(half_edge_array *ea, int initial_size)>`                                                                                                                                                                           
void    :cpp:func:`half_edge_array_free <void half_edge_array_free(half_edge_array *ea)>`                                                                                                                                                                                            
int     :cpp:func:`half_edge_array_expand <int half_edge_array_expand(half_edge_array *ea)>`                                                                                                                                                                                         
int     :cpp:func:`half_edge_array_append <int half_edge_array_append(half_edge_array *ea, half_edge **out)>`                                                                                                                                                                        
int     :cpp:func:`validate_edge <int validate_edge(half_edge_array const *ea, half_edge const *a, loop_table const *loops)>`                                                                                                                                                        
void *  :cpp:func:`default_malloc <void * default_malloc(size_t size, void *user_data)>`                                                                                                                                                                                             
void    :cpp:func:`default_free <void default_free(void *ptr, void *user_data)>`                                                                                                                                                                                                     
void    :cpp:func:`default_new_vertex <void default_new_vertex(int a, int b, int c, void *user_data)>`                                                                                                                                                                               
void    :cpp:func:`vsinit_write <void vsinit_write(varstream *vs, int size, void *pointer)>`                                                                                                                                                                                         
void    :cpp:func:`vsinit_read <void vsinit_read(varstream *vs, int size, void *pointer)>`                                                                                                                                                                                           
void    :cpp:func:`vsfree <void vsfree(varstream *vs)>`                                                                                                                                                                                                                              
void    :cpp:func:`vsswap <void vsswap(varstream *vs)>`                                                                                                                                                                                                                              
void    :cpp:func:`vsput <void vsput(varstream *vs, const int *numbits_array, int val)>`                                                                                                                                                                                             
int     :cpp:func:`vsget <int vsget(varstream *vs, const int *numbits_array)>`                                                                                                                                                                                                       
======= =============================================================================================================================================================================================================================================================================

Detailed Description
====================

.. doxygenfile:: BEdgeBreaker.h
   :project: 3dgs_stream
   :sections: detaileddescription

Macro Definition
================

.. doxygendefine:: EB_DEFAULT
   :project: 3dgs_stream

.. doxygendefine:: HINT_ONE_PIECE
   :project: 3dgs_stream

.. doxygendefine:: HINT_WATERTIGHT
   :project: 3dgs_stream

.. doxygendefine:: HINT_MANIFOLD
   :project: 3dgs_stream

.. doxygendefine:: HINT_NO_HANDLES
   :project: 3dgs_stream

.. doxygendefine:: HINT_NO_BACKWARDS_OR_HOLES
   :project: 3dgs_stream

.. doxygendefine:: HINT_INPUT_BY_TRISTRIPS
   :project: 3dgs_stream

.. doxygendefine:: STATUS_ERROR
   :project: 3dgs_stream

.. doxygendefine:: STATUS_NORMAL
   :project: 3dgs_stream

.. doxygendefine:: STATUS_COMPLETE
   :project: 3dgs_stream

.. doxygendefine:: STATUS_WATERTIGHT
   :project: 3dgs_stream

.. doxygendefine:: STATUS_TRY_AGAIN
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_LENGTHS
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_M2STACKOFFSETS
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_M2GATEOFFSETS
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_DUMMIES
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_PATCHES
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_BOUNDING
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_QUANTIZATION
   :project: 3dgs_stream

.. doxygendefine:: MTABLE_HAS_QUANTIZATION_NORMALS
   :project: 3dgs_stream

.. doxygendefine:: CASE_C
   :project: 3dgs_stream

.. doxygendefine:: CASE_L
   :project: 3dgs_stream

.. doxygendefine:: CASE_E
   :project: 3dgs_stream

.. doxygendefine:: CASE_R
   :project: 3dgs_stream

.. doxygendefine:: CASE_S
   :project: 3dgs_stream

.. doxygendefine:: CASE_M
   :project: 3dgs_stream

.. doxygendefine:: CASE_M2
   :project: 3dgs_stream

.. doxygendefine:: TONEXT4
   :project: 3dgs_stream

.. doxygendefine:: MAXVAL
   :project: 3dgs_stream

.. doxygendefine:: BIG_FLOAT
   :project: 3dgs_stream

.. doxygendefine:: DEFAULT_QUANTIZATION
   :project: 3dgs_stream

.. doxygendefine:: DEFAULT_POINT_FACTOR
   :project: 3dgs_stream

.. doxygendefine:: DEFAULT_HINTS
   :project: 3dgs_stream

.. doxygendefine:: POINTSIZE
   :project: 3dgs_stream

.. doxygendefine:: GARBAGE_VERTEX
   :project: 3dgs_stream

.. doxygendefine:: DUMMY_VERTEX
   :project: 3dgs_stream

.. doxygendefine:: GARBAGE
   :project: 3dgs_stream

.. doxygendefine:: VERTEX_SPECIAL
   :project: 3dgs_stream

.. doxygendefine:: INVALIDATE_VERTEX
   :project: 3dgs_stream

.. doxygendefine:: EA_VERTEX_INDEX
   :project: 3dgs_stream

.. doxygendefine:: PROXY_VERTEX_INDEX
   :project: 3dgs_stream

.. doxygendefine:: GARBAGE_EDGE
   :project: 3dgs_stream

.. doxygendefine:: MULTIPLE_EDGE
   :project: 3dgs_stream

.. doxygendefine:: EDGE_SPECIAL
   :project: 3dgs_stream

.. doxygendefine:: EDGE_INVALID
   :project: 3dgs_stream

.. doxygendefine:: INVALIDATE_EDGE
   :project: 3dgs_stream

.. doxygendefine:: REAL_EDGE_INDEX
   :project: 3dgs_stream

.. doxygendefine:: I2V
   :project: 3dgs_stream

.. doxygendefine:: V2I
   :project: 3dgs_stream

.. doxygendefine:: HALF_EDGE_INIT
   :project: 3dgs_stream

.. doxygendefine:: HNEXT
   :project: 3dgs_stream

.. doxygendefine:: HPREV
   :project: 3dgs_stream

Type Alias Documentation
========================

.. doxygentypedef:: ET_Bounding
   :project: 3dgs_stream

.. doxygentypedef:: eb_compress_configs
   :project: 3dgs_stream

.. doxygentypedef:: eb_decompress_configs
   :project: 3dgs_stream

.. doxygentypedef:: edgebreaker_header
   :project: 3dgs_stream

.. doxygentypedef:: half_edge
   :project: 3dgs_stream

.. doxygentypedef:: INT16
   :project: 3dgs_stream

.. doxygentypedef:: INT32
   :project: 3dgs_stream

Function Documentation
======================

.. doxygenfunction:: show_edgebreaker_compress_size
   :project: 3dgs_stream

.. doxygenfunction:: edgebreaker_compress
   :project: 3dgs_stream

.. doxygenfunction:: show_edgebreaker_decompress_size
   :project: 3dgs_stream

.. doxygenfunction:: edgebreaker_decompress
   :project: 3dgs_stream

.. doxygenfunction:: mtable_info_init
   :project: 3dgs_stream

.. doxygenfunction:: mtable_info_free
   :project: 3dgs_stream

.. doxygenfunction:: lookup_vertex
   :project: 3dgs_stream

.. doxygenfunction:: predict
   :project: 3dgs_stream

.. doxygenfunction:: old_predict
   :project: 3dgs_stream

.. doxygenfunction:: old_pack_points
   :project: 3dgs_stream

.. doxygenfunction:: old_unpack_points
   :project: 3dgs_stream

.. doxygenfunction:: old_unpack_normals
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_init
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_expand
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_free
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_pop
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_pop_internal
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_push
   :project: 3dgs_stream

.. doxygenfunction:: int_stack_push_if_unique
   :project: 3dgs_stream

.. doxygenfunction:: validate_associations
   :project: 3dgs_stream

.. doxygenfunction:: half_edge_array_init
   :project: 3dgs_stream

.. doxygenfunction:: half_edge_array_free
   :project: 3dgs_stream

.. doxygenfunction:: half_edge_array_expand
   :project: 3dgs_stream

.. doxygenfunction:: half_edge_array_append
   :project: 3dgs_stream

.. doxygenfunction:: validate_edge
   :project: 3dgs_stream

.. doxygenfunction:: default_malloc
   :project: 3dgs_stream

.. doxygenfunction:: default_free
   :project: 3dgs_stream

.. doxygenfunction:: default_new_vertex
   :project: 3dgs_stream

.. doxygenfunction:: vsinit_write
   :project: 3dgs_stream

.. doxygenfunction:: vsinit_read
   :project: 3dgs_stream

.. doxygenfunction:: vsfree
   :project: 3dgs_stream

.. doxygenfunction:: vsswap
   :project: 3dgs_stream

.. doxygenfunction:: vsput
   :project: 3dgs_stream

.. doxygenfunction:: vsget
   :project: 3dgs_stream


.. toctree::
   :titlesonly:
   :maxdepth: 1
   :hidden:

   structET__Bounding__TAG
   structeb__compress__configs__TAG
   structeb__decompress__configs__TAG
   structedgebreaker__header0
   structedgebreaker__header1
   structEDGEBREAKER__HEADER__TAG
   structmtable__info
   structHALF__EDGE__TAG
   structhalf__edge__array
   structint__stack
   structvarstream
   structloop__table

