<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
(I mainly write this second e-mail to prevent you from wasting time on the previous e-mail, cause the conversion was already quite successfull with a different tool, read below)<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
The in Delphi written tool CHET was used to convert the C api for UBER H3 library.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<a href="https://github.com/neslib/Chet" id="LPlnkOWALinkPreview_1">https://github.com/neslib/Chet</a><br>
</div>
<div class="_Entity _EType_OWALinkPreview _EId_OWALinkPreview_1 _EReadonly_1">
<div id="LPBorder_GTaHR0cHM6Ly9naXRodWIuY29tL25lc2xpYi9DaGV0" class="LPBorder418045" style="width: 100%; margin-top: 16px; margin-bottom: 16px; position: relative; max-width: 800px; min-width: 424px;">
<table id="LPContainer418045" role="presentation" style="padding: 12px 36px 12px 12px; width: 100%; border-width: 1px; border-style: solid; border-color: rgb(200, 200, 200); border-radius: 2px;">
<tbody>
<tr style="border-spacing: 0px;" valign="top">
<td>
<div id="LPImageContainer418045" style="position: relative; margin-right: 12px; height: 120px; overflow: hidden; width: 240px;">
<a target="_blank" id="LPImageAnchor418045" href="https://github.com/neslib/Chet"><img id="LPThumbnailImageId418045" alt="" style="display: block;" width="240" height="120" src="https://opengraph.githubassets.com/b39cf935c557cba4185d6776c2195f5790769b08f096256d01ca89b5ab57a40c/neslib/Chet"></a></div>
</td>
<td style="width: 100%;">
<div id="LPTitle418045" style="font-size: 21px; font-weight: 300; margin-right: 8px; font-family: "wf_segoe-ui_light", "Segoe UI Light", "Segoe WP Light", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; margin-bottom: 12px;">
<a target="_blank" id="LPUrlAnchor418045" href="https://github.com/neslib/Chet" style="text-decoration: none; color: var(--themePrimary);">GitHub - neslib/Chet: C Header Translator for Delphi</a></div>
<div id="LPDescription418045" style="font-size: 14px; max-height: 100px; color: rgb(102, 102, 102); font-family: "wf_segoe-ui_normal", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; margin-bottom: 12px; margin-right: 8px; overflow: hidden;">
Chet - C Header Translator for Delphi. Chet is a .h-to-.pas translator powered by libclang for Delphi.. Features. Unlike some other header translators, Chet uses the Clang compiler to parse header files, resulting in more accurate translations that require
 fewer manual adjustments.</div>
<div id="LPMetadata418045" style="font-size: 14px; font-weight: 400; color: rgb(166, 166, 166); font-family: "wf_segoe-ui_normal", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif;">
github.com</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<br>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
CHET uses LIBClang for Delphi. Which can be found at: <a href="https://github.com/neslib/Neslib.Clang" id="LPlnkOWALinkPreview">
https://github.com/neslib/Neslib.Clang</a><br>
</div>
<div class="_Entity _EType_OWALinkPreview _EId_OWALinkPreview _EReadonly_1">
<div id="LPBorder_GTaHR0cHM6Ly9naXRodWIuY29tL25lc2xpYi9OZXNsaWIuQ2xhbmc." class="LPBorder979358" style="width: 100%; margin-top: 16px; margin-bottom: 16px; position: relative; max-width: 800px; min-width: 424px;">
<table id="LPContainer979358" role="presentation" style="padding: 12px 36px 12px 12px; width: 100%; border-width: 1px; border-style: solid; border-color: rgb(200, 200, 200); border-radius: 2px;">
<tbody>
<tr style="border-spacing: 0px;" valign="top">
<td>
<div id="LPImageContainer979358" style="position: relative; margin-right: 12px; height: 120px; overflow: hidden; width: 240px;">
<a target="_blank" id="LPImageAnchor979358" href="https://github.com/neslib/Neslib.Clang"><img id="LPThumbnailImageId979358" alt="" style="display: block;" width="240" height="120" src="https://opengraph.githubassets.com/fc65d8cd6fa05f844e7d52fe10a26ddaa1814241a437d1e8c101db34bce19f7b/neslib/Neslib.Clang"></a></div>
</td>
<td style="width: 100%;">
<div id="LPTitle979358" style="font-size: 21px; font-weight: 300; margin-right: 8px; font-family: "wf_segoe-ui_light", "Segoe UI Light", "Segoe WP Light", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; margin-bottom: 12px;">
<a target="_blank" id="LPUrlAnchor979358" href="https://github.com/neslib/Neslib.Clang" style="text-decoration: none; color: var(--themePrimary);">GitHub - neslib/Neslib.Clang: libclang for Delphi</a></div>
<div id="LPDescription979358" style="font-size: 14px; max-height: 100px; color: rgb(102, 102, 102); font-family: "wf_segoe-ui_normal", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; margin-bottom: 12px; margin-right: 8px; overflow: hidden;">
Neslib.Clang - libclang for Delphi. Libclang is the C Interface to Clang's C family of compilers. It provides a relatively small API that exposes facilities for parsing source code into an abstract syntax tree (AST), loading already-parsed ASTs, traversing
 the AST, associating physical source locations with elements within the AST, and other facilities that support Clang-based development tools.</div>
<div id="LPMetadata979358" style="font-size: 14px; font-weight: 400; color: rgb(166, 166, 166); font-family: "wf_segoe-ui_normal", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif;">
github.com</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<br>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
I don't know if LIBClang for Free Pascal Exist.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
But this chet tool in combination with this LibClang was pretty awesome !</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Especially cause this was quite a complex/bitch of an api, with crazy painfull macros, but the tool performed pretty well and did it's best and produced something useable.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
I had to only disable/comments 5 lines of code.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
The api was briefly tested and it seems to work !  <br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Some improvements can be made by using properties to access H3Indexes directly etc.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
This will be done/attempted in the near future.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
For now for what it's worth here is the unit code, ofcourse it kinda sucks to have it in e-mail format.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Maybe later I uploaded it somewhere...<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
unit UBER_H3_API;
<div>{ This unit is automatically generated by Chet:</div>
<div>  https://github.com/neslib/Chet }</div>
<div><br>
</div>
<div>{$MINENUMSIZE 4}</div>
<div><br>
</div>
<div>interface</div>
<div><br>
</div>
<div>const</div>
<div>  {$IF Defined(WIN64)}</div>
<div>  UBER_H3 = 'h3_release_64_bit.dll';</div>
<div>  _PU = '';</div>
<div>  {$ELSE}</div>
<div>    {$MESSAGE Error 'Unsupported platform'}</div>
<div>  {$ENDIF}</div>
<div><br>
</div>
<div>const</div>
<div>  M_PI = 3.14159265358979323846;</div>
<div>  M_PI_2 = 1.5707963267948966;</div>
<div>  M_2PI = 6.28318530717958647692528676655900576839433;</div>
<div>  M_PI_180 = 0.0174532925199432957692369076848861271111;</div>
<div>  M_180_PI = 57.29577951308232087679815481410517033240547;</div>
<div>  EPSILON = 0.0000000000000001;</div>
<div>  M_SQRT3_2 = 0.8660254037844386467637231707529361834714;</div>
<div>  M_SIN60 = M_SQRT3_2;</div>
<div>  M_AP7_ROT_RADS = 0.333473172251832115336090755351601070065900389;</div>
<div>  M_SIN_AP7_ROT = 0.3273268353539885718950318;</div>
<div>  M_COS_AP7_ROT = 0.9449111825230680680167902;</div>
<div>  EARTH_RADIUS_KM = 6371.007180918475;</div>
<div>  RES0_U_GNOMONIC = 0.38196601125010500003;</div>
<div>  MAX_H3_RES = 15;</div>
<div>  NUM_ICOSA_FACES = 20;</div>
<div>  NUM_BASE_CELLS = 122;</div>
<div>  NUM_HEX_VERTS = 6;</div>
<div>  NUM_PENT_VERTS = 5;</div>
<div>  NUM_PENTAGONS = 12;</div>
<div>  H3_CELL_MODE = 1;</div>
<div>  H3_DIRECTEDEDGE_MODE = 2;</div>
<div>  H3_EDGE_MODE = 3;</div>
<div>  H3_VERTEX_MODE = 4;</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_EXPORT ( name ) name *)</div>
<div>  H3_NULL = 0;</div>
<div>  H3_VERSION_MAJOR = 4;</div>
<div>  H3_VERSION_MINOR = 0;</div>
<div>  H3_VERSION_PATCH = 0;</div>
<div>  MAX_CELL_BNDRY_VERTS = 10;</div>
<div>  EPSILON_DEG = 0.000000001;</div>
<div>  EPSILON_RAD = (EPSILON_DEG*M_PI_180);</div>
<div>  NORMALIZATION_SUCCESS = 0;</div>
<div>  NORMALIZATION_ERR_MULTIPLE_POLYGONS = 1;</div>
<div>  NORMALIZATION_ERR_UNASSIGNED_HOLES = 2;</div>
<div>  { TODO : Macro probably uses invalid symbol "currentCoord": }</div>
<div>  (* INIT_ITERATION_LINKED_LOOP LinkedLatLng * currentCoord = NULL ; LinkedLatLng * nextCoord = NULL *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* GET_NEXT_COORD ( loop , coordToCheck ) coordToCheck == NULL ? loop -> first : currentCoord -> next *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* ITERATE_LINKED_LOOP ( loop , vertexA , vertexB ) currentCoord = GET_NEXT_COORD ( loop , currentCoord ) ; if ( currentCoord == NULL ) break ; vertexA = currentCoord -> vertex ; nextCoord = GET_NEXT_COORD ( loop , currentCoord -> next ) ; vertexB =
 nextCoord -> vertex *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* IS_EMPTY_LINKED_LOOP ( loop ) loop -> first == NULL *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_MEMORY ( name ) name *)</div>
<div>  IJ = 1;</div>
<div>  KI = 2;</div>
<div>  JK = 3;</div>
<div>  INVALID_FACE = -1;</div>
<div>  INVALID_BASE_CELL = 127;</div>
<div>  MAX_FACE_COORD = 2;</div>
<div>  INVALID_ROTATIONS = -1;</div>
<div>  H3_NUM_BITS = 64;</div>
<div>  H3_MAX_OFFSET = 63;</div>
<div>  H3_MODE_OFFSET = 59;</div>
<div>  H3_BC_OFFSET = 45;</div>
<div>  H3_RES_OFFSET = 52;</div>
<div>  H3_RESERVED_OFFSET = 56;</div>
<div>  H3_PER_DIGIT_OFFSET = 3;</div>
<div>  { TODO : Macro probably uses invalid symbol "uint64_t": }</div>
<div>  (* H3_HIGH_BIT_MASK ( ( uint64_t ) ( 1 ) << H3_MAX_OFFSET ) *)</div>
<div>  { TODO : Macro uses commented-out symbol "H3_HIGH_BIT_MASK": }</div>
<div>  (* H3_HIGH_BIT_MASK_NEGATIVE ( ~ H3_HIGH_BIT_MASK ) *)</div>
<div>  { TODO : Macro probably uses invalid symbol "uint64_t": }</div>
<div>  (* H3_MODE_MASK ( ( uint64_t ) ( 15 ) << H3_MODE_OFFSET ) *)</div>
<div>  { TODO : Macro uses commented-out symbol "H3_MODE_MASK": }</div>
<div>  (* H3_MODE_MASK_NEGATIVE ( ~ H3_MODE_MASK ) *)</div>
<div>  { TODO : Macro probably uses invalid symbol "uint64_t": }</div>
<div>  (* H3_BC_MASK ( ( uint64_t ) ( 127 ) << H3_BC_OFFSET ) *)</div>
<div>  { TODO : Macro uses commented-out symbol "H3_BC_MASK": }</div>
<div>  (* H3_BC_MASK_NEGATIVE ( ~ H3_BC_MASK ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* UINT64_C ( x ) ( x ## ULL ) *)</div>
<div>  H3_RES_MASK = (UINT64_C(15) shl H3_RES_OFFSET);</div>
<div>  H3_RES_MASK_NEGATIVE = ( not H3_RES_MASK);</div>
<div>  { TODO : Macro probably uses invalid symbol "uint64_t": }</div>
<div>  (* H3_RESERVED_MASK ( ( uint64_t ) ( 7 ) << H3_RESERVED_OFFSET ) *)</div>
<div>  { TODO : Macro uses commented-out symbol "H3_RESERVED_MASK": }</div>
<div>  (* H3_RESERVED_MASK_NEGATIVE ( ~ H3_RESERVED_MASK ) *)</div>
<div>  { TODO : Macro probably uses invalid symbol "uint64_t": }</div>
<div>  (* H3_DIGIT_MASK ( ( uint64_t ) ( 7 ) ) *)</div>
<div>  { TODO : Macro uses commented-out symbol "H3_DIGIT_MASK": }</div>
<div>  (* H3_DIGIT_MASK_NEGATIVE ( ~ H3_DIGIT_MASK ) *)</div>
<div>  { TODO : Macro uses commented-out symbol "UINT64_C": }</div>
<div>  (* H3_INIT ( UINT64_C ( 35184372088831 ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_GET_HIGH_BIT ( h3 ) ( ( int ) ( ( ( ( h3 ) & H3_HIGH_BIT_MASK ) >> H3_MAX_OFFSET ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_SET_HIGH_BIT ( h3 , v ) ( h3 ) = ( ( ( h3 ) & H3_HIGH_BIT_MASK_NEGATIVE ) | ( ( ( uint64_t ) ( v ) ) << H3_MAX_OFFSET ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_GET_MODE ( h3 ) ( ( int ) ( ( ( ( h3 ) & H3_MODE_MASK ) >> H3_MODE_OFFSET ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_SET_MODE ( h3 , v ) ( h3 ) = ( ( ( h3 ) & H3_MODE_MASK_NEGATIVE ) | ( ( ( uint64_t ) ( v ) ) << H3_MODE_OFFSET ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_GET_BASE_CELL ( h3 ) ( ( int ) ( ( ( ( h3 ) & H3_BC_MASK ) >> H3_BC_OFFSET ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_SET_BASE_CELL ( h3 , bc ) ( h3 ) = ( ( ( h3 ) & H3_BC_MASK_NEGATIVE ) | ( ( ( uint64_t ) ( bc ) ) << H3_BC_OFFSET ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_GET_RESOLUTION ( h3 ) ( ( int ) ( ( ( ( h3 ) & H3_RES_MASK ) >> H3_RES_OFFSET ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_SET_RESOLUTION ( h3 , res ) ( h3 ) = ( ( ( h3 ) & H3_RES_MASK_NEGATIVE ) | ( ( ( uint64_t ) ( res ) ) << H3_RES_OFFSET ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_GET_INDEX_DIGIT ( h3 , res ) ( ( Direction ) ( ( ( ( h3 ) >> ( ( MAX_H3_RES - ( res ) ) * H3_PER_DIGIT_OFFSET ) ) & H3_DIGIT_MASK ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_SET_RESERVED_BITS ( h3 , v ) ( h3 ) = ( ( ( h3 ) & H3_RESERVED_MASK_NEGATIVE ) | ( ( ( uint64_t ) ( v ) ) << H3_RESERVED_OFFSET ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_GET_RESERVED_BITS ( h3 ) ( ( int ) ( ( ( ( h3 ) & H3_RESERVED_MASK ) >> H3_RESERVED_OFFSET ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* H3_SET_INDEX_DIGIT ( h3 , res , digit ) ( h3 ) = ( ( ( h3 ) & ~ ( ( H3_DIGIT_MASK << ( ( MAX_H3_RES - ( res ) ) * H3_PER_DIGIT_OFFSET ) ) ) ) | ( ( ( uint64_t ) ( digit ) ) << ( ( MAX_H3_RES - ( res ) ) * H3_PER_DIGIT_OFFSET ) ) ) *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* MAX ( a , b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) *)</div>
<div>  { TODO : Macro probably uses invalid symbol "int": }</div>
<div>  (* INIT_ITERATION_GEOFENCE int loopIndex = - 1 *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* ITERATE_GEOFENCE ( geoloop , vertexA , vertexB ) if ( ++ loopIndex >= geoloop -> numVerts ) break ; vertexA = geoloop -> verts [ loopIndex ] ; vertexB = geoloop -> verts [ ( loopIndex + 1 ) % geoloop -> numVerts ] *)</div>
<div>  { TODO : Unable to convert function-like macro: }</div>
<div>  (* IS_EMPTY_GEOFENCE ( geoloop ) geoloop -> numVerts == 0 *)</div>
<div>  INVALID_VERTEX_NUM = -1;</div>
<div>  MAX_BASE_CELL_FACES = 5;</div>
<div><br>
</div>
<div>type</div>
<div>  // Forward declarations</div>
<div>  PInt64 = ^Int64;</div>
<div>  PLatLng = ^LatLng;</div>
<div>  PCellBoundary = ^CellBoundary;</div>
<div>  PGeoLoop = ^GeoLoop;</div>
<div>  PGeoPolygon = ^GeoPolygon;</div>
<div>  PGeoMultiPolygon = ^GeoMultiPolygon;</div>
<div>  PLinkedLatLng = ^LinkedLatLng;</div>
<div>  PLinkedGeoLoop = ^LinkedGeoLoop;</div>
<div>  PLinkedGeoPolygon = ^LinkedGeoPolygon;</div>
<div>  PCoordIJ = ^CoordIJ;</div>
<div>  PBBox = ^BBox;</div>
<div>  PVec2d = ^Vec2d;</div>
<div>  PCoordIJK = ^CoordIJK;</div>
<div>  PVertexNode = ^VertexNode;</div>
<div>  PPVertexNode = ^PVertexNode;</div>
<div>  PVertexGraph = ^VertexGraph;</div>
<div>  PFaceIJK = ^FaceIJK;</div>
<div>  PFaceOrientIJK = ^FaceOrientIJK;</div>
<div>  PBaseCellData = ^BaseCellData;</div>
<div>  PIterCellsChildren = ^IterCellsChildren;</div>
<div>  PIterCellsResolution = ^IterCellsResolution;</div>
<div>  PVec3d = ^Vec3d;</div>
<div>  PPentagonDirectionFaces = ^PentagonDirectionFaces;</div>
<div><br>
</div>
<div>  (** @brief Identifier for an object (cell, edge, etc) in the H3 system.</div>
<div>   *</div>
<div>   * The H3Index fits within a 64-bit unsigned integer.</div>
<div>   *)</div>
<div>  H3Index = UInt64;</div>
<div>  PH3Index = ^H3Index;</div>
<div>  (** @brief Result code (success or specific error) from an H3 operation *)</div>
<div>  H3Error = UInt32;</div>
<div><br>
</div>
<div>  H3ErrorCodes = (</div>
<div>    E_SUCCESS = 0,</div>
<div>    E_FAILED = 1,</div>
<div>    E_DOMAIN = 2,</div>
<div>    E_LATLNG_DOMAIN = 3,</div>
<div>    E_RES_DOMAIN = 4,</div>
<div>    E_CELL_INVALID = 5,</div>
<div>    E_DIR_EDGE_INVALID = 6,</div>
<div>    E_UNDIR_EDGE_INVALID = 7,</div>
<div>    E_VERTEX_INVALID = 8,</div>
<div>    E_PENTAGON = 9,</div>
<div>    E_DUPLICATE_INPUT = 10,</div>
<div>    E_NOT_NEIGHBORS = 11,</div>
<div>    E_RES_MISMATCH = 12,</div>
<div>    E_MEMORY_ALLOC = 13,</div>
<div>    E_MEMORY_BOUNDS = 14,</div>
<div>    E_OPTION_INVALID = 15);</div>
<div>  PH3ErrorCodes = ^H3ErrorCodes;</div>
<div><br>
</div>
<div>  (** @struct LatLng</div>
<div>      @brief latitude/longitude in radians</div>
<div>   *)</div>
<div>  LatLng = record</div>
<div>    /// latitude in radians</div>
<div>    lat: Double;</div>
<div>    /// longitude in radians</div>
<div>    lng: Double;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct CellBoundary</div>
<div>      @brief cell boundary in latitude/longitude</div>
<div>   *)</div>
<div>  CellBoundary = record</div>
<div>    /// number of vertices</div>
<div>    numVerts: Integer;</div>
<div>    /// vertices in ccw order</div>
<div>    verts: array [0..9] of LatLng;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct GeoLoop</div>
<div>   *  @brief similar to CellBoundary, but requires more alloc work</div>
<div>   *)</div>
<div>  GeoLoop = record</div>
<div>    numVerts: Integer;</div>
<div>    verts: PLatLng;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct GeoPolygon</div>
<div>   *  @brief Simplified core of GeoJSON Polygon coordinates definition</div>
<div>   *)</div>
<div>  GeoPolygon = record</div>
<div>    /// exterior boundary of the polygon</div>
<div>    geoloop: GeoLoop;</div>
<div>    /// number of elements in the array pointed to by holes</div>
<div>    numHoles: Integer;</div>
<div>    /// interior boundaries (holes) in the polygon</div>
<div>    holes: PGeoLoop;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct GeoMultiPolygon</div>
<div>   *  @brief Simplified core of GeoJSON MultiPolygon coordinates definition</div>
<div>   *)</div>
<div>  GeoMultiPolygon = record</div>
<div>    numPolygons: Integer;</div>
<div>    polygons: PGeoPolygon;</div>
<div>  end;</div>
<div><br>
</div>
<div>  LinkedLatLng = record</div>
<div>    vertex: LatLng;</div>
<div>    next: PLinkedLatLng;</div>
<div>  end;</div>
<div><br>
</div>
<div>  LinkedGeoLoop = record</div>
<div>    first: PLinkedLatLng;</div>
<div>    last: PLinkedLatLng;</div>
<div>    next: PLinkedGeoLoop;</div>
<div>  end;</div>
<div><br>
</div>
<div>  LinkedGeoPolygon = record</div>
<div>    first: PLinkedGeoLoop;</div>
<div>    last: PLinkedGeoLoop;</div>
<div>    next: PLinkedGeoPolygon;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct CoordIJ</div>
<div>   * @brief IJ hexagon coordinates</div>
<div>   *</div>
<div>   * Each axis is spaced 120 degrees apart.</div>
<div>   *)</div>
<div>  CoordIJ = record</div>
<div>    /// i component</div>
<div>    i: Integer;</div>
<div>    /// j component</div>
<div>    j: Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct BBox</div>
<div>   *  @brief  Geographic bounding box with coordinates defined in radians</div>
<div>   *)</div>
<div>  BBox = record</div>
<div>    /// north latitude</div>
<div>    north: Double;</div>
<div>    /// south latitude</div>
<div>    south: Double;</div>
<div>    /// east longitude</div>
<div>    east: Double;</div>
<div>    /// west longitude</div>
<div>    west: Double;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct Vec2d</div>
<div>   *  @brief 2D floating-point vector</div>
<div>   *)</div>
<div>  Vec2d = record</div>
<div>    /// x component</div>
<div>    x: Double;</div>
<div>    /// y component</div>
<div>    y: Double;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct CoordIJK</div>
<div>   * @brief IJK hexagon coordinates</div>
<div>   *</div>
<div>   * Each axis is spaced 120 degrees apart.</div>
<div>   *)</div>
<div>  CoordIJK = record</div>
<div>    /// i component</div>
<div>    i: Integer;</div>
<div>    /// j component</div>
<div>    j: Integer;</div>
<div>    /// k component</div>
<div>    k: Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @brief H3 digit representing ijk+ axes direction.</div>
<div>   * Values will be within the lowest 3 bits of an integer.</div>
<div>   *)</div>
<div>  Direction = (</div>
<div>    (** H3 digit in center *)</div>
<div>    CENTER_DIGIT = 0,</div>
<div>    (** H3 digit in k-axes direction *)</div>
<div>    K_AXES_DIGIT = 1,</div>
<div>    (** H3 digit in j-axes direction *)</div>
<div>    J_AXES_DIGIT = 2,</div>
<div>    (** H3 digit in j == k direction *)</div>
<div>    JK_AXES_DIGIT = 3,</div>
<div>    (** H3 digit in i-axes direction *)</div>
<div>    I_AXES_DIGIT = 4,</div>
<div>    (** H3 digit in i == k direction *)</div>
<div>    IK_AXES_DIGIT = 5,</div>
<div>    (** H3 digit in i == j direction *)</div>
<div>    IJ_AXES_DIGIT = 6,</div>
<div>    (** H3 digit in the invalid direction *)</div>
<div>    INVALID_DIGIT = 7,</div>
<div>    (** Valid digits will be less than this value. Same value as INVALID_DIGIT.</div>
<div>     *)</div>
<div>    NUM_DIGITS = 7,</div>
<div>    (** Child digit which is skipped for pentagons *)</div>
<div>    PENTAGON_SKIPPED_DIGIT = 1);</div>
<div>  PDirection = ^Direction;</div>
<div><br>
</div>
<div>  VertexNode = record</div>
<div>    from: LatLng;</div>
<div>    &to: LatLng;</div>
<div>    next: PVertexNode;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct VertexGraph</div>
<div>   *  @brief A data structure to store a graph of vertices</div>
<div>   *)</div>
<div>  VertexGraph = record</div>
<div>    buckets: PPVertexNode;</div>
<div>    numBuckets: Integer;</div>
<div>    size: Integer;</div>
<div>    res: Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct FaceIJK</div>
<div>   * @brief Face number and ijk coordinates on that face-centered coordinate</div>
<div>   * system</div>
<div>   *)</div>
<div>  FaceIJK = record</div>
<div>    /// face number</div>
<div>    face: Integer;</div>
<div>    /// ijk coordinates on that face</div>
<div>    coord: CoordIJK;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct FaceOrientIJK</div>
<div>   * @brief Information to transform into an adjacent face IJK system</div>
<div>   *)</div>
<div>  FaceOrientIJK = record</div>
<div>    /// face number</div>
<div>    face: Integer;</div>
<div>    /// res 0 translation relative to primary face</div>
<div>    translate: CoordIJK;</div>
<div>    /// number of 60 degree ccw rotations relative to primary</div>
<div>    ccwRot60: Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** Digit representing overage type *)</div>
<div>  Overage = (</div>
<div>    (** No overage (on original face) *)</div>
<div>    NO_OVERAGE = 0,</div>
<div>    (** On face edge (only occurs on substrate grids) *)</div>
<div>    FACE_EDGE = 1,</div>
<div>    (** Overage on new face interior *)</div>
<div>    NEW_FACE = 2);</div>
<div>  POverage = ^Overage;</div>
<div><br>
</div>
<div>  (** @struct BaseCellData</div>
<div>   * @brief information on a single base cell</div>
<div>   *)</div>
<div>  BaseCellData = record</div>
<div>    /// "home" face and normalized ijk coordinates on that face</div>
<div>    homeFijk: FaceIJK;</div>
<div>    /// is this base cell a pentagon?</div>
<div>    isPentagon: Integer;</div>
<div>    /// if a pentagon, what are its two clockwise offset</div>
<div>    cwOffsetPent: array [0..1] of Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (**</div>
<div>   * IterCellsChildren: struct for iterating through the descendants of</div>
<div>   * a given cell.</div>
<div>   *</div>
<div>   * Constructors:</div>
<div>   *</div>
<div>   * Initialize with either `iterInitParent` or `iterInitBaseCellNum`.</div>
<div>   * `iterInitParent` sets up an iterator for all the children of a given</div>
<div>   * parent cell at a given resolution.</div>
<div>   *</div>
<div>   * `iterInitBaseCellNum` sets up an iterator for children cells, given</div>
<div>   * a base cell number (0--121).</div>
<div>   *</div>
<div>   * Iteration:</div>
<div>   *</div>
<div>   * Step iterator with `iterStepChild`.</div>
<div>   * During the lifetime of the `IterCellsChildren`, the current iterate</div>
<div>   * is accessed via the `IterCellsChildren.h` member.</div>
<div>   * When the iterator is exhausted or if there was an error in initialization,</div>
<div>   * `IterCellsChildren.h` will be `H3_NULL` even after calling `iterStepChild`.</div>
<div>   *)</div>
<div>  IterCellsChildren = record</div>
<div>    h: H3Index;</div>
<div>    _parentRes: Integer;</div>
<div>    _skipDigit: Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (**</div>
<div>   * IterCellsResolution: struct for iterating through all cells at a given</div>
<div>   * resolution</div>
<div>   *</div>
<div>   * Constructor:</div>
<div>   *</div>
<div>   * Initialize with `IterCellsResolution`.</div>
<div>   *</div>
<div>   * Iteration:</div>
<div>   *</div>
<div>   * Step iterator with `iterStepRes`.</div>
<div>   * During the lifetime of the iterator the current iterate</div>
<div>   * is accessed via the `IterCellsResolution.h` member.</div>
<div>   * When the iterator is exhausted or if there was an error in initialization,</div>
<div>   * `IterCellsResolution.h` will be `H3_NULL` even after calling `iterStepRes`.</div>
<div>   *)</div>
<div>  IterCellsResolution = record</div>
<div>    h: H3Index;</div>
<div>    _baseCellNum: Integer;</div>
<div>    _res: Integer;</div>
<div>    _itC: IterCellsChildren;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct Vec3D</div>
<div>   *  @brief 3D floating point structure</div>
<div>   *)</div>
<div>  Vec3d = record</div>
<div>    /// x component</div>
<div>    x: Double;</div>
<div>    /// y component</div>
<div>    y: Double;</div>
<div>    /// z component</div>
<div>    z: Double;</div>
<div>  end;</div>
<div><br>
</div>
<div>  (** @struct PentagonDirectionFaces</div>
<div>   *  @brief  The faces in each axial direction of a given pentagon base cell</div>
<div>   *)</div>
<div>  PentagonDirectionFaces = record</div>
<div>    /// base cell number</div>
<div>    baseCell: Integer;</div>
<div>    /// face numbers for each axial direction,</div>
<div>    faces: array [0..4] of Integer;</div>
<div>  end;</div>
<div><br>
</div>
<div>const</div>
<div>  (** @brief CoordIJK unit vectors corresponding to the 7 H3 digits.</div>
<div>   *)</div>
<div>  ] : CoordIJK UNIT_VECS [{ TODO : unrecognized type "ConstantArray" }</div>
<div>   = {{0,0,0},// direction 0{0,0,1},// direction 1{0,1,0},// direction 2{0,1,1},// direction 3{1,0,0},// direction 4{1,0,1},// direction 5{1,1,0}// direction 6};</div>
<div><br>
</div>
<div>function latLngToCell(const g: PLatLng; res: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'latLngToCell';</div>
<div><br>
</div>
<div>function cellToLatLng(h3: H3Index; g: PLatLng): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToLatLng';</div>
<div><br>
</div>
<div>function cellToBoundary(h3: H3Index; gp: PCellBoundary): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToBoundary';</div>
<div><br>
</div>
<div>function maxGridDiskSize(k: Integer; &out: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'maxGridDiskSize';</div>
<div><br>
</div>
<div>function gridDiskUnsafe(origin: H3Index; k: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDiskUnsafe';</div>
<div><br>
</div>
<div>function gridDiskDistancesUnsafe(origin: H3Index; k: Integer; &out: PH3Index; distances: PInteger): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDiskDistancesUnsafe';</div>
<div><br>
</div>
<div>function gridDiskDistancesSafe(origin: H3Index; k: Integer; &out: PH3Index; distances: PInteger): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDiskDistancesSafe';</div>
<div><br>
</div>
<div>function gridDisksUnsafe(h3Set: PH3Index; length: Integer; k: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDisksUnsafe';</div>
<div><br>
</div>
<div>function gridDisk(origin: H3Index; k: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDisk';</div>
<div><br>
</div>
<div>function gridDiskDistances(origin: H3Index; k: Integer; &out: PH3Index; distances: PInteger): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDiskDistances';</div>
<div><br>
</div>
<div>function gridRingUnsafe(origin: H3Index; k: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridRingUnsafe';</div>
<div><br>
</div>
<div>function maxPolygonToCellsSize(const geoPolygon: PGeoPolygon; res: Integer; flags: UInt32; &out: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'maxPolygonToCellsSize';</div>
<div><br>
</div>
<div>function polygonToCells(const geoPolygon: PGeoPolygon; res: Integer; flags: UInt32; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'polygonToCells';</div>
<div><br>
</div>
<div>function cellsToLinkedMultiPolygon(const h3Set: PH3Index; const numHexes: Integer; &out: PLinkedGeoPolygon): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellsToLinkedMultiPolygon';</div>
<div><br>
</div>
<div>procedure destroyLinkedMultiPolygon(polygon: PLinkedGeoPolygon); cdecl;</div>
<div>  external UBER_H3 name _PU + 'destroyLinkedMultiPolygon';</div>
<div><br>
</div>
<div>function degsToRads(degrees: Double): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'degsToRads';</div>
<div><br>
</div>
<div>function radsToDegs(radians: Double): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'radsToDegs';</div>
<div><br>
</div>
<div>function greatCircleDistanceRads(const a: PLatLng; const b: PLatLng): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'greatCircleDistanceRads';</div>
<div><br>
</div>
<div>function greatCircleDistanceKm(const a: PLatLng; const b: PLatLng): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'greatCircleDistanceKm';</div>
<div><br>
</div>
<div>function greatCircleDistanceM(const a: PLatLng; const b: PLatLng): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'greatCircleDistanceM';</div>
<div><br>
</div>
<div>function getHexagonAreaAvgKm2(res: Integer; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getHexagonAreaAvgKm2';</div>
<div><br>
</div>
<div>function getHexagonAreaAvgM2(res: Integer; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getHexagonAreaAvgM2';</div>
<div><br>
</div>
<div>function cellAreaRads2(h: H3Index; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellAreaRads2';</div>
<div><br>
</div>
<div>function cellAreaKm2(h: H3Index; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellAreaKm2';</div>
<div><br>
</div>
<div>function cellAreaM2(h: H3Index; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellAreaM2';</div>
<div><br>
</div>
<div>function getHexagonEdgeLengthAvgKm(res: Integer; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getHexagonEdgeLengthAvgKm';</div>
<div><br>
</div>
<div>function getHexagonEdgeLengthAvgM(res: Integer; &out: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getHexagonEdgeLengthAvgM';</div>
<div><br>
</div>
<div>function exactEdgeLengthRads(edge: H3Index; length: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'exactEdgeLengthRads';</div>
<div><br>
</div>
<div>function exactEdgeLengthKm(edge: H3Index; length: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'exactEdgeLengthKm';</div>
<div><br>
</div>
<div>function exactEdgeLengthM(edge: H3Index; length: PDouble): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'exactEdgeLengthM';</div>
<div><br>
</div>
<div>function getNumCells(res: Integer; &out: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getNumCells';</div>
<div><br>
</div>
<div>function res0CellCount(): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'res0CellCount';</div>
<div><br>
</div>
<div>function getRes0Cells(&out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getRes0Cells';</div>
<div><br>
</div>
<div>function pentagonCount(): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'pentagonCount';</div>
<div><br>
</div>
<div>function getPentagons(res: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getPentagons';</div>
<div><br>
</div>
<div>function getResolution(h: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getResolution';</div>
<div><br>
</div>
<div>function getBaseCellNumber(h: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getBaseCellNumber';</div>
<div><br>
</div>
<div>function stringToH3(const str: PUTF8Char; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'stringToH3';</div>
<div><br>
</div>
<div>function h3ToString(h: H3Index; str: PUTF8Char; sz: NativeUInt): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'h3ToString';</div>
<div><br>
</div>
<div>function isValidCell(h: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isValidCell';</div>
<div><br>
</div>
<div>function cellToParent(h: H3Index; parentRes: Integer; parent: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToParent';</div>
<div><br>
</div>
<div>function cellToChildrenSize(h: H3Index; childRes: Integer; &out: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToChildrenSize';</div>
<div><br>
</div>
<div>function cellToChildren(h: H3Index; childRes: Integer; children: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToChildren';</div>
<div><br>
</div>
<div>function cellToCenterChild(h: H3Index; childRes: Integer; child: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToCenterChild';</div>
<div><br>
</div>
<div>function compactCells(const h3Set: PH3Index; compactedSet: PH3Index; const numHexes: Int64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'compactCells';</div>
<div><br>
</div>
<div>function uncompactCellsSize(const compactedSet: PH3Index; const numCompacted: Int64; const res: Integer; &out: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'uncompactCellsSize';</div>
<div><br>
</div>
<div>function uncompactCells(const compactedSet: PH3Index; const numCompacted: Int64; outSet: PH3Index; const numOut: Int64; const res: Integer): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'uncompactCells';</div>
<div><br>
</div>
<div>function isResClassIII(h: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isResClassIII';</div>
<div><br>
</div>
<div>function isPentagon(h: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isPentagon';</div>
<div><br>
</div>
<div>function maxFaceCount(h3: H3Index; &out: PInteger): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'maxFaceCount';</div>
<div><br>
</div>
<div>function getIcosahedronFaces(h3: H3Index; &out: PInteger): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getIcosahedronFaces';</div>
<div><br>
</div>
<div>function areNeighborCells(origin: H3Index; destination: H3Index; &out: PInteger): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'areNeighborCells';</div>
<div><br>
</div>
<div>function cellsToDirectedEdge(origin: H3Index; destination: H3Index; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellsToDirectedEdge';</div>
<div><br>
</div>
<div>function isValidDirectedEdge(edge: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isValidDirectedEdge';</div>
<div><br>
</div>
<div>function getDirectedEdgeOrigin(edge: H3Index; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getDirectedEdgeOrigin';</div>
<div><br>
</div>
<div>function getDirectedEdgeDestination(edge: H3Index; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'getDirectedEdgeDestination';</div>
<div><br>
</div>
<div>function directedEdgeToCells(edge: H3Index; originDestination: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'directedEdgeToCells';</div>
<div><br>
</div>
<div>function originToDirectedEdges(origin: H3Index; edges: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'originToDirectedEdges';</div>
<div><br>
</div>
<div>function directedEdgeToBoundary(edge: H3Index; gb: PCellBoundary): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'directedEdgeToBoundary';</div>
<div><br>
</div>
<div>function cellToVertex(origin: H3Index; vertexNum: Integer; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToVertex';</div>
<div><br>
</div>
<div>function cellToVertexes(origin: H3Index; vertexes: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToVertexes';</div>
<div><br>
</div>
<div>function vertexToLatLng(vertex: H3Index; point: PLatLng): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'vertexToLatLng';</div>
<div><br>
</div>
<div>function isValidVertex(vertex: H3Index): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isValidVertex';</div>
<div><br>
</div>
<div>function gridDistance(origin: H3Index; h3: H3Index; distance: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridDistance';</div>
<div><br>
</div>
<div>function gridPathCellsSize(start: H3Index; &end: H3Index; size: PInt64): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridPathCellsSize';</div>
<div><br>
</div>
<div>function gridPathCells(start: H3Index; &end: H3Index; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'gridPathCells';</div>
<div><br>
</div>
<div>function cellToLocalIj(origin: H3Index; h3: H3Index; mode: UInt32; &out: PCoordIJ): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToLocalIj';</div>
<div><br>
</div>
<div>function localIjToCell(origin: H3Index; const ij: PCoordIJ; mode: UInt32; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'localIjToCell';</div>
<div><br>
</div>
<div>procedure setGeoDegs(p: PLatLng; latDegs: Double; lngDegs: Double); cdecl;</div>
<div>  external UBER_H3 name _PU + 'setGeoDegs';</div>
<div><br>
</div>
<div>function constrainLat(lat: Double): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'constrainLat';</div>
<div><br>
</div>
<div>function constrainLng(lng: Double): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + 'constrainLng';</div>
<div><br>
</div>
<div>function geoAlmostEqual(const p1: PLatLng; const p2: PLatLng): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'geoAlmostEqual';</div>
<div><br>
</div>
<div>function geoAlmostEqualThreshold(const p1: PLatLng; const p2: PLatLng; threshold: Double): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'geoAlmostEqualThreshold';</div>
<div><br>
</div>
<div>function _posAngleRads(rads: Double): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + '_posAngleRads';</div>
<div><br>
</div>
<div>procedure _setGeoRads(p: PLatLng; latRads: Double; lngRads: Double); cdecl;</div>
<div>  external UBER_H3 name _PU + '_setGeoRads';</div>
<div><br>
</div>
<div>function _geoAzimuthRads(const p1: PLatLng; const p2: PLatLng): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + '_geoAzimuthRads';</div>
<div><br>
</div>
<div>procedure _geoAzDistanceRads(const p1: PLatLng; az: Double; distance: Double; p2: PLatLng); cdecl;</div>
<div>  external UBER_H3 name _PU + '_geoAzDistanceRads';</div>
<div><br>
</div>
<div>function bboxIsTransmeridian(const bbox: PBBox): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxIsTransmeridian';</div>
<div><br>
</div>
<div>procedure bboxCenter(const bbox: PBBox; center: PLatLng); cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxCenter';</div>
<div><br>
</div>
<div>function bboxContains(const bbox: PBBox; const point: PLatLng): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxContains';</div>
<div><br>
</div>
<div>function bboxEquals(const b1: PBBox; const b2: PBBox): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxEquals';</div>
<div><br>
</div>
<div>function bboxHexEstimate(const bbox: PBBox; res: Integer): Int64; cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxHexEstimate';</div>
<div><br>
</div>
<div>function lineHexEstimate(const origin: PLatLng; const destination: PLatLng; res: Integer): Int64; cdecl;</div>
<div>  external UBER_H3 name _PU + 'lineHexEstimate';</div>
<div><br>
</div>
<div>function _v2dMag(const v: PVec2d): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + '_v2dMag';</div>
<div><br>
</div>
<div>procedure _v2dIntersect(const p0: PVec2d; const p1: PVec2d; const p2: PVec2d; const p3: PVec2d; inter: PVec2d); cdecl;</div>
<div>  external UBER_H3 name _PU + '_v2dIntersect';</div>
<div><br>
</div>
<div>function _v2dEquals(const p0: PVec2d; const p1: PVec2d): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + '_v2dEquals';</div>
<div><br>
</div>
<div>procedure _setIJK(ijk: PCoordIJK; i: Integer; j: Integer; k: Integer); cdecl;</div>
<div>  external UBER_H3 name _PU + '_setIJK';</div>
<div><br>
</div>
<div>procedure _hex2dToCoordIJK(const v: PVec2d; h: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_hex2dToCoordIJK';</div>
<div><br>
</div>
<div>procedure _ijkToHex2d(const h: PCoordIJK; v: PVec2d); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkToHex2d';</div>
<div><br>
</div>
<div>function _ijkMatches(const c1: PCoordIJK; const c2: PCoordIJK): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkMatches';</div>
<div><br>
</div>
<div>procedure _ijkAdd(const h1: PCoordIJK; const h2: PCoordIJK; sum: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkAdd';</div>
<div><br>
</div>
<div>procedure _ijkSub(const h1: PCoordIJK; const h2: PCoordIJK; diff: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkSub';</div>
<div><br>
</div>
<div>procedure _ijkScale(c: PCoordIJK; factor: Integer); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkScale';</div>
<div><br>
</div>
<div>procedure _ijkNormalize(c: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkNormalize';</div>
<div><br>
</div>
<div>function _unitIjkToDigit(const ijk: PCoordIJK): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + '_unitIjkToDigit';</div>
<div><br>
</div>
<div>procedure _upAp7(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_upAp7';</div>
<div><br>
</div>
<div>procedure _upAp7r(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_upAp7r';</div>
<div><br>
</div>
<div>procedure _downAp7(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_downAp7';</div>
<div><br>
</div>
<div>procedure _downAp7r(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_downAp7r';</div>
<div><br>
</div>
<div>procedure _downAp3(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_downAp3';</div>
<div><br>
</div>
<div>procedure _downAp3r(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_downAp3r';</div>
<div><br>
</div>
<div>procedure _neighbor(ijk: PCoordIJK; digit: Direction); cdecl;</div>
<div>  external UBER_H3 name _PU + '_neighbor';</div>
<div><br>
</div>
<div>procedure _ijkRotate60ccw(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkRotate60ccw';</div>
<div><br>
</div>
<div>procedure _ijkRotate60cw(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_ijkRotate60cw';</div>
<div><br>
</div>
<div>function _rotate60ccw(digit: Direction): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + '_rotate60ccw';</div>
<div><br>
</div>
<div>function _rotate60cw(digit: Direction): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + '_rotate60cw';</div>
<div><br>
</div>
<div>function ijkDistance(const a: PCoordIJK; const b: PCoordIJK): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'ijkDistance';</div>
<div><br>
</div>
<div>procedure ijkToIj(const ijk: PCoordIJK; ij: PCoordIJ); cdecl;</div>
<div>  external UBER_H3 name _PU + 'ijkToIj';</div>
<div><br>
</div>
<div>procedure ijToIjk(const ij: PCoordIJ; ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + 'ijToIjk';</div>
<div><br>
</div>
<div>procedure ijkToCube(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + 'ijkToCube';</div>
<div><br>
</div>
<div>procedure cubeToIjk(ijk: PCoordIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + 'cubeToIjk';</div>
<div><br>
</div>
<div>function normalizeMultiPolygon(root: PLinkedGeoPolygon): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'normalizeMultiPolygon';</div>
<div><br>
</div>
<div>function addNewLinkedPolygon(polygon: PLinkedGeoPolygon): PLinkedGeoPolygon; cdecl;</div>
<div>  external UBER_H3 name _PU + 'addNewLinkedPolygon';</div>
<div><br>
</div>
<div>function addNewLinkedLoop(polygon: PLinkedGeoPolygon): PLinkedGeoLoop; cdecl;</div>
<div>  external UBER_H3 name _PU + 'addNewLinkedLoop';</div>
<div><br>
</div>
<div>function addLinkedLoop(polygon: PLinkedGeoPolygon; loop: PLinkedGeoLoop): PLinkedGeoLoop; cdecl;</div>
<div>  external UBER_H3 name _PU + 'addLinkedLoop';</div>
<div><br>
</div>
<div>function addLinkedCoord(loop: PLinkedGeoLoop; const vertex: PLatLng): PLinkedLatLng; cdecl;</div>
<div>  external UBER_H3 name _PU + 'addLinkedCoord';</div>
<div><br>
</div>
<div>function countLinkedPolygons(polygon: PLinkedGeoPolygon): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'countLinkedPolygons';</div>
<div><br>
</div>
<div>function countLinkedLoops(polygon: PLinkedGeoPolygon): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'countLinkedLoops';</div>
<div><br>
</div>
<div>function countLinkedCoords(loop: PLinkedGeoLoop): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'countLinkedCoords';</div>
<div><br>
</div>
<div>procedure destroyLinkedGeoLoop(loop: PLinkedGeoLoop); cdecl;</div>
<div>  external UBER_H3 name _PU + 'destroyLinkedGeoLoop';</div>
<div><br>
</div>
<div>(**</div>
<div> * Create a bounding box from a LinkedGeoLoop</div>
<div> * @param geoloop Input GeoLoop</div>
<div> * @param bbox     Output bbox</div>
<div> *)</div>
<div>procedure bboxFromLinkedGeoLoop(const loop: PLinkedGeoLoop; bbox: PBBox); cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxFromLinkedGeoLoop';</div>
<div><br>
</div>
<div>(**</div>
<div> * Take a given LinkedGeoLoop data structure and check if it</div>
<div> * contains a given geo coordinate.</div>
<div> * @param loop          The linked loop</div>
<div> * @param bbox          The bbox for the loop</div>
<div> * @param coord         The coordinate to check</div>
<div> * @return              Whether the point is contained</div>
<div> *)</div>
<div>function pointInsideLinkedGeoLoop(const loop: PLinkedGeoLoop; const bbox: PBBox; const coord: PLatLng): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'pointInsideLinkedGeoLoop';</div>
<div><br>
</div>
<div>(**</div>
<div> * Whether the winding order of a given LinkedGeoLoop is clockwise</div>
<div> * @param loop  The loop to check</div>
<div> * @return      Whether the loop is clockwise</div>
<div> *)</div>
<div>function isClockwiseLinkedGeoLoop(const loop: PLinkedGeoLoop): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isClockwiseLinkedGeoLoop';</div>
<div><br>
</div>
<div>procedure initVertexGraph(graph: PVertexGraph; numBuckets: Integer; res: Integer); cdecl;</div>
<div>  external UBER_H3 name _PU + 'initVertexGraph';</div>
<div><br>
</div>
<div>procedure destroyVertexGraph(graph: PVertexGraph); cdecl;</div>
<div>  external UBER_H3 name _PU + 'destroyVertexGraph';</div>
<div><br>
</div>
<div>function addVertexNode(graph: PVertexGraph; const fromVtx: PLatLng; const toVtx: PLatLng): PVertexNode; cdecl;</div>
<div>  external UBER_H3 name _PU + 'addVertexNode';</div>
<div><br>
</div>
<div>function removeVertexNode(graph: PVertexGraph; node: PVertexNode): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'removeVertexNode';</div>
<div><br>
</div>
<div>function findNodeForEdge(const graph: PVertexGraph; const fromVtx: PLatLng; const toVtx: PLatLng): PVertexNode; cdecl;</div>
<div>  external UBER_H3 name _PU + 'findNodeForEdge';</div>
<div><br>
</div>
<div>function findNodeForVertex(const graph: PVertexGraph; const fromVtx: PLatLng): PVertexNode; cdecl;</div>
<div>  external UBER_H3 name _PU + 'findNodeForVertex';</div>
<div><br>
</div>
<div>function firstVertexNode(const graph: PVertexGraph): PVertexNode; cdecl;</div>
<div>  external UBER_H3 name _PU + 'firstVertexNode';</div>
<div><br>
</div>
<div>function _hashVertex(const vertex: PLatLng; res: Integer; numBuckets: Integer): UInt32; cdecl;</div>
<div>  external UBER_H3 name _PU + '_hashVertex';</div>
<div><br>
</div>
<div>procedure _initVertexNode(node: PVertexNode; const fromVtx: PLatLng; const toVtx: PLatLng); cdecl;</div>
<div>  external UBER_H3 name _PU + '_initVertexNode';</div>
<div><br>
</div>
<div>function h3NeighborRotations(origin: H3Index; dir: Direction; rotations: PInteger; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'h3NeighborRotations';</div>
<div><br>
</div>
<div>function directionForNeighbor(origin: H3Index; destination: H3Index): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + 'directionForNeighbor';</div>
<div><br>
</div>
<div>procedure _kRingInternal(origin: H3Index; k: Integer; &out: PH3Index; distances: PInteger; maxIdx: Integer; curK: Integer); cdecl;</div>
<div>  external UBER_H3 name _PU + '_kRingInternal';</div>
<div><br>
</div>
<div>function h3SetToVertexGraph(const h3Set: PH3Index; const numHexes: Integer; &out: PVertexGraph): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'h3SetToVertexGraph';</div>
<div><br>
</div>
<div>procedure _vertexGraphToLinkedGeo(graph: PVertexGraph; &out: PLinkedGeoPolygon); cdecl;</div>
<div>  external UBER_H3 name _PU + '_vertexGraphToLinkedGeo';</div>
<div><br>
</div>
<div>function _getEdgeHexagons(const geoloop: PGeoLoop; numHexagons: Int64; res: Integer; numSearchHexes: PInt64; search: PH3Index; found: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + '_getEdgeHexagons';</div>
<div><br>
</div>
<div>function _gridDiskDistancesInternal(origin: H3Index; k: Integer; &out: PH3Index; distances: PInteger; maxIdx: Int64; curK: Integer): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + '_gridDiskDistancesInternal';</div>
<div><br>
</div>
<div>procedure _geoToFaceIjk(const g: PLatLng; res: Integer; h: PFaceIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_geoToFaceIjk';</div>
<div><br>
</div>
<div>procedure _geoToHex2d(const g: PLatLng; res: Integer; face: PInteger; v: PVec2d); cdecl;</div>
<div>  external UBER_H3 name _PU + '_geoToHex2d';</div>
<div><br>
</div>
<div>procedure _faceIjkToGeo(const h: PFaceIJK; res: Integer; g: PLatLng); cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkToGeo';</div>
<div><br>
</div>
<div>procedure _faceIjkToCellBoundary(const h: PFaceIJK; res: Integer; start: Integer; length: Integer; g: PCellBoundary); cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkToCellBoundary';</div>
<div><br>
</div>
<div>procedure _faceIjkPentToCellBoundary(const h: PFaceIJK; res: Integer; start: Integer; length: Integer; g: PCellBoundary); cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkPentToCellBoundary';</div>
<div><br>
</div>
<div>procedure _faceIjkToVerts(fijk: PFaceIJK; res: PInteger; fijkVerts: PFaceIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkToVerts';</div>
<div><br>
</div>
<div>procedure _faceIjkPentToVerts(fijk: PFaceIJK; res: PInteger; fijkVerts: PFaceIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkPentToVerts';</div>
<div><br>
</div>
<div>procedure _hex2dToGeo(const v: PVec2d; face: Integer; res: Integer; substrate: Integer; g: PLatLng); cdecl;</div>
<div>  external UBER_H3 name _PU + '_hex2dToGeo';</div>
<div><br>
</div>
<div>function _adjustOverageClassII(fijk: PFaceIJK; res: Integer; pentLeading4: Integer; substrate: Integer): Overage; cdecl;</div>
<div>  external UBER_H3 name _PU + '_adjustOverageClassII';</div>
<div><br>
</div>
<div>function _adjustPentVertOverage(fijk: PFaceIJK; res: Integer): Overage; cdecl;</div>
<div>  external UBER_H3 name _PU + '_adjustPentVertOverage';</div>
<div><br>
</div>
<div>procedure _geoToClosestFace(const g: PLatLng; face: PInteger; sqd: PDouble); cdecl;</div>
<div>  external UBER_H3 name _PU + '_geoToClosestFace';</div>
<div><br>
</div>
<div>function _isBaseCellPentagon(baseCell: Integer): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_isBaseCellPentagon';</div>
<div><br>
</div>
<div>function _isBaseCellPolarPentagon(baseCell: Integer): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + '_isBaseCellPolarPentagon';</div>
<div><br>
</div>
<div>function _faceIjkToBaseCell(const h: PFaceIJK): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkToBaseCell';</div>
<div><br>
</div>
<div>function _faceIjkToBaseCellCCWrot60(const h: PFaceIJK): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkToBaseCellCCWrot60';</div>
<div><br>
</div>
<div>function _baseCellToCCWrot60(baseCell: Integer; face: Integer): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_baseCellToCCWrot60';</div>
<div><br>
</div>
<div>procedure _baseCellToFaceIjk(baseCell: Integer; h: PFaceIJK); cdecl;</div>
<div>  external UBER_H3 name _PU + '_baseCellToFaceIjk';</div>
<div><br>
</div>
<div>function _baseCellIsCwOffset(baseCell: Integer; testFace: Integer): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + '_baseCellIsCwOffset';</div>
<div><br>
</div>
<div>function _getBaseCellNeighbor(baseCell: Integer; dir: Direction): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_getBaseCellNeighbor';</div>
<div><br>
</div>
<div>function _getBaseCellDirection(originBaseCell: Integer; destinationBaseCell: Integer): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + '_getBaseCellDirection';</div>
<div><br>
</div>
<div>procedure setH3Index(h: PH3Index; res: Integer; baseCell: Integer; initDigit: Direction); cdecl;</div>
<div>  external UBER_H3 name _PU + 'setH3Index';</div>
<div><br>
</div>
<div>function isResolutionClassIII(r: Integer): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isResolutionClassIII';</div>
<div><br>
</div>
<div>function _h3ToFaceIjkWithInitializedFijk(h: H3Index; fijk: PFaceIJK): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3ToFaceIjkWithInitializedFijk';</div>
<div><br>
</div>
<div>function _h3ToFaceIjk(h: H3Index; fijk: PFaceIJK): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3ToFaceIjk';</div>
<div><br>
</div>
<div>function _faceIjkToH3(const fijk: PFaceIJK; res: Integer): H3Index; cdecl;</div>
<div>  external UBER_H3 name _PU + '_faceIjkToH3';</div>
<div><br>
</div>
<div>function _h3LeadingNonZeroDigit(h: H3Index): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3LeadingNonZeroDigit';</div>
<div><br>
</div>
<div>function _h3RotatePent60ccw(h: H3Index): H3Index; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3RotatePent60ccw';</div>
<div><br>
</div>
<div>function _h3RotatePent60cw(h: H3Index): H3Index; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3RotatePent60cw';</div>
<div><br>
</div>
<div>function _h3Rotate60ccw(h: H3Index): H3Index; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3Rotate60ccw';</div>
<div><br>
</div>
<div>function _h3Rotate60cw(h: H3Index): H3Index; cdecl;</div>
<div>  external UBER_H3 name _PU + '_h3Rotate60cw';</div>
<div><br>
</div>
<div>function _zeroIndexDigits(h: H3Index; start: Integer; &end: Integer): H3Index; cdecl;</div>
<div>  external UBER_H3 name _PU + '_zeroIndexDigits';</div>
<div><br>
</div>
<div>function iterInitParent(h: H3Index; childRes: Integer): IterCellsChildren; cdecl;</div>
<div>  external UBER_H3 name _PU + 'iterInitParent';</div>
<div><br>
</div>
<div>function iterInitBaseCellNum(baseCellNum: Integer; childRes: Integer): IterCellsChildren; cdecl;</div>
<div>  external UBER_H3 name _PU + 'iterInitBaseCellNum';</div>
<div><br>
</div>
<div>procedure iterStepChild(iter: PIterCellsChildren); cdecl;</div>
<div>  external UBER_H3 name _PU + 'iterStepChild';</div>
<div><br>
</div>
<div>function iterInitRes(res: Integer): IterCellsResolution; cdecl;</div>
<div>  external UBER_H3 name _PU + 'iterInitRes';</div>
<div><br>
</div>
<div>procedure iterStepRes(iter: PIterCellsResolution); cdecl;</div>
<div>  external UBER_H3 name _PU + 'iterStepRes';</div>
<div><br>
</div>
<div>function cellToLocalIjk(origin: H3Index; h3: H3Index; &out: PCoordIJK): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'cellToLocalIjk';</div>
<div><br>
</div>
<div>function localIjkToCell(origin: H3Index; const ijk: PCoordIJK; &out: PH3Index): H3Error; cdecl;</div>
<div>  external UBER_H3 name _PU + 'localIjkToCell';</div>
<div><br>
</div>
<div>function _ipow(base: Int64; exp: Int64): Int64; cdecl;</div>
<div>  external UBER_H3 name _PU + '_ipow';</div>
<div><br>
</div>
<div>procedure bboxesFromGeoPolygon(const polygon: PGeoPolygon; bboxes: PBBox); cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxesFromGeoPolygon';</div>
<div><br>
</div>
<div>function pointInsidePolygon(const geoPolygon: PGeoPolygon; const bboxes: PBBox; const coord: PLatLng): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'pointInsidePolygon';</div>
<div><br>
</div>
<div>(**</div>
<div> * Create a bounding box from a GeoLoop</div>
<div> * @param geoloop Input GeoLoop</div>
<div> * @param bbox     Output bbox</div>
<div> *)</div>
<div>procedure bboxFromGeoLoop(const loop: PGeoLoop; bbox: PBBox); cdecl;</div>
<div>  external UBER_H3 name _PU + 'bboxFromGeoLoop';</div>
<div><br>
</div>
<div>(**</div>
<div> * Take a given GeoLoop data structure and check if it</div>
<div> * contains a given geo coordinate.</div>
<div> * @param loop          The geoloop</div>
<div> * @param bbox          The bbox for the loop</div>
<div> * @param coord         The coordinate to check</div>
<div> * @return              Whether the point is contained</div>
<div> *)</div>
<div>function pointInsideGeoLoop(const loop: PGeoLoop; const bbox: PBBox; const coord: PLatLng): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'pointInsideGeoLoop';</div>
<div><br>
</div>
<div>(**</div>
<div> * Whether the winding order of a given GeoLoop is clockwise</div>
<div> * @param loop  The loop to check</div>
<div> * @return      Whether the loop is clockwise</div>
<div> *)</div>
<div>function isClockwiseGeoLoop(const geoloop: PGeoLoop): Boolean; cdecl;</div>
<div>  external UBER_H3 name _PU + 'isClockwiseGeoLoop';</div>
<div><br>
</div>
<div>procedure _geoToVec3d(const geo: PLatLng; point: PVec3d); cdecl;</div>
<div>  external UBER_H3 name _PU + '_geoToVec3d';</div>
<div><br>
</div>
<div>function _pointSquareDist(const p1: PVec3d; const p2: PVec3d): Double; cdecl;</div>
<div>  external UBER_H3 name _PU + '_pointSquareDist';</div>
<div><br>
</div>
<div>function vertexNumForDirection(const origin: H3Index; const direction: Direction): Integer; cdecl;</div>
<div>  external UBER_H3 name _PU + 'vertexNumForDirection';</div>
<div><br>
</div>
<div>function directionForVertexNum(const origin: H3Index; const vertexNum: Integer): Direction; cdecl;</div>
<div>  external UBER_H3 name _PU + 'directionForVertexNum';</div>
<div><br>
</div>
<div>implementation</div>
<div><br>
</div>
end.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Bye for now,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
  Skybuck.<br>
</div>
</body>
</html>