You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2026/10/08 19:21:23 UTC
(datasketches-cpp) branch docs-5.3.0 updated (8ce6f35f -> f22aff67)
This is an automated email from the ASF dual-hosted git repository.
leerho pushed a change to branch docs-5.3.0
in repository https://gitbox.apache.org/repos/asf/datasketches-cpp.git
discard 8ce6f35f Add Doxygen documentation for the 5.3.0 release
new f22aff67 Add Doxygen documentation for the 5.3.0 release
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (8ce6f35f)
\
N -- N -- N refs/heads/docs-5.3.0 (f22aff67)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../_aux_hash_map-internal_8hpp_source.html} | 71 +++++++++++------
.../_aux_hash_map_8hpp_source.html} | 71 +++++++++++------
...nterpolation_x_table-internal_8hpp_source.html} | 73 ++++++++++-------
...mposite_interpolation_x_table_8hpp_source.html} | 41 +++++-----
.../_coupon_hash_set-internal_8hpp_source.html} | 75 +++++++++++-------
.../_coupon_hash_set_8hpp_source.html} | 71 +++++++++++------
.../_coupon_list-internal_8hpp_source.html} | 90 +++++++++++++--------
.../_coupon_list_8hpp_source.html} | 74 ++++++++++-------
..._cubic_interpolation-internal_8hpp_source.html} | 73 ++++++++++-------
.../_cubic_interpolation_8hpp_source.html} | 71 +++++++++++------
.../_harmonic_numbers-internal_8hpp_source.html} | 71 +++++++++++------
.../_harmonic_numbers_8hpp_source.html} | 71 +++++++++++------
.../_hll4_array-internal_8hpp_source.html} | 73 ++++++++++-------
.../_hll4_array_8hpp_source.html} | 71 +++++++++++------
.../_hll6_array-internal_8hpp_source.html} | 71 +++++++++++------
.../_hll6_array_8hpp_source.html} | 71 +++++++++++------
.../_hll8_array-internal_8hpp_source.html} | 71 +++++++++++------
.../_hll8_array_8hpp_source.html} | 71 +++++++++++------
.../_hll_array-internal_8hpp_source.html} | 86 ++++++++++++--------
.../_hll_array_8hpp_source.html} | 74 ++++++++++-------
.../_hll_sketch-internal_8hpp_source.html} | 76 +++++++++++-------
.../_hll_sketch_impl-internal_8hpp_source.html} | 71 +++++++++++------
.../_hll_sketch_impl_8hpp_source.html} | 88 +++++++++++++--------
.../_hll_sketch_impl_factory_8hpp_source.html} | 78 +++++++++++-------
.../_hll_union-internal_8hpp_source.html} | 92 +++++++++++++---------
.../_hll_util_8hpp_source.html} | 73 ++++++++++-------
.../_murmur_hash3_8h_source.html} | 71 +++++++++++------
...elative_error_tables-internal_8hpp_source.html} | 71 +++++++++++------
.../_relative_error_tables_8hpp_source.html} | 71 +++++++++++------
29 files changed, 1333 insertions(+), 798 deletions(-)
copy docs/{5.2.0/AuxHashMap-internal_8hpp_source.html => 5.3.0/_aux_hash_map-internal_8hpp_source.html} (96%)
copy docs/{5.2.0/AuxHashMap_8hpp_source.html => 5.3.0/_aux_hash_map_8hpp_source.html} (89%)
copy docs/{5.2.0/CompositeInterpolationXTable-internal_8hpp_source.html => 5.3.0/_composite_interpolation_x_table-internal_8hpp_source.html} (98%)
copy docs/5.3.0/{ceiling__power__of__2_8hpp_source.html => _composite_interpolation_x_table_8hpp_source.html} (83%)
copy docs/{master/CouponHashSet-internal_8hpp_source.html => 5.3.0/_coupon_hash_set-internal_8hpp_source.html} (95%)
copy docs/{5.2.0/CouponHashSet_8hpp_source.html => 5.3.0/_coupon_hash_set_8hpp_source.html} (87%)
copy docs/{master/CouponList-internal_8hpp_source.html => 5.3.0/_coupon_list-internal_8hpp_source.html} (95%)
copy docs/{master/CouponList_8hpp_source.html => 5.3.0/_coupon_list_8hpp_source.html} (88%)
copy docs/{master/CubicInterpolation-internal_8hpp_source.html => 5.3.0/_cubic_interpolation-internal_8hpp_source.html} (95%)
copy docs/{master/CubicInterpolation_8hpp_source.html => 5.3.0/_cubic_interpolation_8hpp_source.html} (84%)
copy docs/{master/HarmonicNumbers-internal_8hpp_source.html => 5.3.0/_harmonic_numbers-internal_8hpp_source.html} (90%)
copy docs/{5.2.0/HarmonicNumbers_8hpp_source.html => 5.3.0/_harmonic_numbers_8hpp_source.html} (83%)
copy docs/{master/Hll4Array-internal_8hpp_source.html => 5.3.0/_hll4_array-internal_8hpp_source.html} (96%)
copy docs/{master/Hll4Array_8hpp_source.html => 5.3.0/_hll4_array_8hpp_source.html} (88%)
copy docs/{master/Hll6Array-internal_8hpp_source.html => 5.3.0/_hll6_array-internal_8hpp_source.html} (92%)
copy docs/{master/Hll6Array_8hpp_source.html => 5.3.0/_hll6_array_8hpp_source.html} (86%)
copy docs/{master/Hll8Array-internal_8hpp_source.html => 5.3.0/_hll8_array-internal_8hpp_source.html} (95%)
copy docs/{master/Hll8Array_8hpp_source.html => 5.3.0/_hll8_array_8hpp_source.html} (86%)
copy docs/{master/HllArray-internal_8hpp_source.html => 5.3.0/_hll_array-internal_8hpp_source.html} (97%)
copy docs/{master/HllArray_8hpp_source.html => 5.3.0/_hll_array_8hpp_source.html} (92%)
copy docs/{master/HllSketch-internal_8hpp_source.html => 5.3.0/_hll_sketch-internal_8hpp_source.html} (96%)
copy docs/{master/HllSketchImpl-internal_8hpp_source.html => 5.3.0/_hll_sketch_impl-internal_8hpp_source.html} (93%)
copy docs/{master/HllSketchImpl_8hpp_source.html => 5.3.0/_hll_sketch_impl_8hpp_source.html} (82%)
copy docs/{master/HllSketchImplFactory_8hpp_source.html => 5.3.0/_hll_sketch_impl_factory_8hpp_source.html} (91%)
copy docs/{master/HllUnion-internal_8hpp_source.html => 5.3.0/_hll_union-internal_8hpp_source.html} (93%)
copy docs/{master/HllUtil_8hpp_source.html => 5.3.0/_hll_util_8hpp_source.html} (95%)
copy docs/{master/MurmurHash3_8h_source.html => 5.3.0/_murmur_hash3_8h_source.html} (94%)
copy docs/{5.2.0/RelativeErrorTables-internal_8hpp_source.html => 5.3.0/_relative_error_tables-internal_8hpp_source.html} (92%)
copy docs/{master/RelativeErrorTables_8hpp_source.html => 5.3.0/_relative_error_tables_8hpp_source.html} (82%)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org
(datasketches-cpp) 01/01: Add Doxygen documentation for the 5.3.0 release
Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
leerho pushed a commit to branch docs-5.3.0
in repository https://gitbox.apache.org/repos/asf/datasketches-cpp.git
commit f22aff67db9ad34a3dd095eb316d0590b47dfad8
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Thu Oct 8 12:21:02 2026 -0700
Add Doxygen documentation for the 5.3.0 release
Generated with Doxygen 1.18.0 from the root Doxyfile at tag 5.3.0
(5b5524f55d121225a7909c2851271327684585d7).
Co-Authored-By: Claude Opus 5.5 <no...@anthropic.com>
---
docs/5.3.0/_aux_hash_map-internal_8hpp_source.html | 387 ++
docs/5.3.0/_aux_hash_map_8hpp_source.html | 194 +
...interpolation_x_table-internal_8hpp_source.html | 919 +++
...omposite_interpolation_x_table_8hpp_source.html | 150 +
.../_coupon_hash_set-internal_8hpp_source.html | 385 ++
docs/5.3.0/_coupon_hash_set_8hpp_source.html | 170 +
docs/5.3.0/_coupon_list-internal_8hpp_source.html | 509 ++
docs/5.3.0/_coupon_list_8hpp_source.html | 204 +
.../_cubic_interpolation-internal_8hpp_source.html | 332 +
docs/5.3.0/_cubic_interpolation_8hpp_source.html | 153 +
.../_harmonic_numbers-internal_8hpp_source.html | 201 +
docs/5.3.0/_harmonic_numbers_8hpp_source.html | 151 +
docs/5.3.0/_hll4_array-internal_8hpp_source.html | 460 ++
docs/5.3.0/_hll4_array_8hpp_source.html | 176 +
docs/5.3.0/_hll6_array-internal_8hpp_source.html | 237 +
docs/5.3.0/_hll6_array_8hpp_source.html | 164 +
docs/5.3.0/_hll8_array-internal_8hpp_source.html | 318 +
docs/5.3.0/_hll8_array_8hpp_source.html | 167 +
docs/5.3.0/_hll_array-internal_8hpp_source.html | 819 +++
docs/5.3.0/_hll_array_8hpp_source.html | 260 +
docs/5.3.0/_hll_sketch-internal_8hpp_source.html | 572 ++
.../_hll_sketch_impl-internal_8hpp_source.html | 259 +
docs/5.3.0/_hll_sketch_impl_8hpp_source.html | 199 +
.../_hll_sketch_impl_factory_8hpp_source.html | 273 +
docs/5.3.0/_hll_union-internal_8hpp_source.html | 454 ++
docs/5.3.0/_hll_util_8hpp_source.html | 343 ++
docs/5.3.0/_murmur_hash3_8h_source.html | 290 +
...relative_error_tables-internal_8hpp_source.html | 222 +
docs/5.3.0/_relative_error_tables_8hpp_source.html | 148 +
docs/5.3.0/annotated.html | 162 +
.../array__of__doubles__sketch_8hpp_source.html | 170 +
.../5.3.0/array__tuple__a__not__b_8hpp_source.html | 163 +
.../array__tuple__a__not__b__impl_8hpp_source.html | 149 +
.../array__tuple__intersection_8hpp_source.html | 168 +
...ray__tuple__intersection__impl_8hpp_source.html | 148 +
docs/5.3.0/array__tuple__sketch_8hpp_source.html | 350 ++
.../array__tuple__sketch__impl_8hpp_source.html | 368 ++
docs/5.3.0/array__tuple__union_8hpp_source.html | 198 +
.../array__tuple__union__impl_8hpp_source.html | 153 +
docs/5.3.0/binomial__bounds_8hpp_source.html | 571 ++
docs/5.3.0/bit__packing_8hpp_source.html | 6389 ++++++++++++++++++++
.../bounds__binomial__proportions_8hpp_source.html | 295 +
..._on__ratios__in__sampled__sets_8hpp_source.html | 214 +
...ios__in__theta__sketched__sets_8hpp_source.html | 223 +
docs/5.3.0/ceiling__power__of__2_8hpp_source.html | 151 +
docs/5.3.0/class_x_x_hash64-members.html | 112 +
docs/5.3.0/class_x_x_hash64.html | 284 +
...ssdatasketches_1_1_hll_sketch_impl-members.html | 111 +
.../classdatasketches_1_1_hll_sketch_impl.html | 128 +
...ketches_1_1array__tuple__a__not__b-members.html | 114 +
...assdatasketches_1_1array__tuple__a__not__b.html | 225 +
...lassdatasketches_1_1array__tuple__a__not__b.png | Bin 0 -> 1133 bytes
...ches_1_1array__tuple__intersection-members.html | 116 +
...datasketches_1_1array__tuple__intersection.html | 224 +
...sdatasketches_1_1array__tuple__intersection.png | Bin 0 -> 1333 bytes
...atasketches_1_1array__tuple__union-members.html | 114 +
.../classdatasketches_1_1array__tuple__union.html | 145 +
.../classdatasketches_1_1array__tuple__union.png | Bin 0 -> 1583 bytes
...ches_1_1base__theta__sketch__alloc-members.html | 124 +
...datasketches_1_1base__theta__sketch__alloc.html | 490 ++
...sdatasketches_1_1base__theta__sketch__alloc.png | Bin 0 -> 2906 bytes
...s_1_1bounds__binomial__proportions-members.html | 117 +
...asketches_1_1bounds__binomial__proportions.html | 392 ++
...nds__on__ratios__in__sampled__sets-members.html | 117 +
...s_1_1bounds__on__ratios__in__sampled__sets.html | 354 ++
..._ratios__in__theta__sketched__sets-members.html | 115 +
...nds__on__ratios__in__theta__sketched__sets.html | 279 +
...s_1_1compact__array__tuple__sketch-members.html | 135 +
...asketches_1_1compact__array__tuple__sketch.html | 382 ++
...tasketches_1_1compact__array__tuple__sketch.png | Bin 0 -> 1919 bytes
...s_1_1compact__theta__sketch__alloc-members.html | 141 +
...asketches_1_1compact__theta__sketch__alloc.html | 950 +++
...tasketches_1_1compact__theta__sketch__alloc.png | Bin 0 -> 1645 bytes
...sketches_1_1compact__tuple__sketch-members.html | 144 +
...lassdatasketches_1_1compact__tuple__sketch.html | 1055 ++++
...classdatasketches_1_1compact__tuple__sketch.png | Bin 0 -> 1707 bytes
...datasketches_1_1count__min__sketch-members.html | 146 +
.../classdatasketches_1_1count__min__sketch.html | 1177 ++++
...datasketches_1_1cpc__sketch__alloc-members.html | 137 +
.../classdatasketches_1_1cpc__sketch__alloc.html | 910 +++
...sdatasketches_1_1cpc__union__alloc-members.html | 120 +
.../classdatasketches_1_1cpc__union__alloc.html | 396 ++
...ault__array__tuple__update__policy-members.html | 111 +
...s_1_1default__array__tuple__update__policy.html | 122 +
...assdatasketches_1_1density__sketch-members.html | 130 +
.../classdatasketches_1_1density__sketch.html | 683 +++
...classdatasketches_1_1ebpps__sketch-members.html | 134 +
docs/5.3.0/classdatasketches_1_1ebpps__sketch.html | 819 +++
...ketches_1_1frequent__items__sketch-members.html | 136 +
...assdatasketches_1_1frequent__items__sketch.html | 962 +++
..._1_1frequent__items__sketch_1_1row-members.html | 116 +
...sketches_1_1frequent__items__sketch_1_1row.html | 244 +
...sdatasketches_1_1hll__union__alloc-members.html | 137 +
.../classdatasketches_1_1hll__union__alloc.html | 883 +++
...tches_1_1jaccard__similarity__base-members.html | 116 +
...sdatasketches_1_1jaccard__similarity__base.html | 352 ++
.../classdatasketches_1_1kll__sketch-members.html | 146 +
docs/5.3.0/classdatasketches_1_1kll__sketch.html | 1345 ++++
...atasketches_1_1kolmogorov__smirnov-members.html | 115 +
.../classdatasketches_1_1kolmogorov__smirnov.html | 272 +
...sdatasketches_1_1quantiles__sketch-members.html | 145 +
.../classdatasketches_1_1quantiles__sketch.html | 1316 ++++
...ketches_1_1quantiles__sorted__view-members.html | 121 +
...assdatasketches_1_1quantiles__sorted__view.html | 383 ++
.../classdatasketches_1_1req__sketch-members.html | 148 +
docs/5.3.0/classdatasketches_1_1req__sketch.html | 1371 +++++
...ketches_1_1theta__a__not__b__alloc-members.html | 114 +
...assdatasketches_1_1theta__a__not__b__alloc.html | 217 +
...tasketches_1_1theta__base__builder-members.html | 117 +
.../classdatasketches_1_1theta__base__builder.html | 288 +
.../classdatasketches_1_1theta__base__builder.png | Bin 0 -> 1109 bytes
...ches_1_1theta__intersection__alloc-members.html | 116 +
...datasketches_1_1theta__intersection__alloc.html | 259 +
...tasketches_1_1theta__sketch__alloc-members.html | 128 +
.../classdatasketches_1_1theta__sketch__alloc.html | 292 +
.../classdatasketches_1_1theta__sketch__alloc.png | Bin 0 -> 2172 bytes
...atasketches_1_1theta__union__alloc-members.html | 115 +
.../classdatasketches_1_1theta__union__alloc.html | 201 +
..._1_1theta__union__alloc_1_1builder-members.html | 118 +
...sketches_1_1theta__union__alloc_1_1builder.html | 173 +
...asketches_1_1theta__union__alloc_1_1builder.png | Bin 0 -> 637 bytes
...ssdatasketches_1_1tuple__a__not__b-members.html | 114 +
.../classdatasketches_1_1tuple__a__not__b.html | 225 +
.../classdatasketches_1_1tuple__a__not__b.png | Bin 0 -> 876 bytes
...tasketches_1_1tuple__base__builder-members.html | 117 +
.../classdatasketches_1_1tuple__base__builder.html | 147 +
.../classdatasketches_1_1tuple__base__builder.png | Bin 0 -> 1111 bytes
...atasketches_1_1tuple__intersection-members.html | 116 +
.../classdatasketches_1_1tuple__intersection.html | 274 +
.../classdatasketches_1_1tuple__intersection.png | Bin 0 -> 1165 bytes
...classdatasketches_1_1tuple__sketch-members.html | 130 +
docs/5.3.0/classdatasketches_1_1tuple__sketch.html | 691 +++
docs/5.3.0/classdatasketches_1_1tuple__sketch.png | Bin 0 -> 3893 bytes
.../classdatasketches_1_1tuple__union-members.html | 115 +
docs/5.3.0/classdatasketches_1_1tuple__union.html | 210 +
docs/5.3.0/classdatasketches_1_1tuple__union.png | Bin 0 -> 1095 bytes
...ketches_1_1tuple__union_1_1builder-members.html | 119 +
...assdatasketches_1_1tuple__union_1_1builder.html | 209 +
...lassdatasketches_1_1tuple__union_1_1builder.png | Bin 0 -> 1006 bytes
...es_1_1update__array__tuple__sketch-members.html | 148 +
...tasketches_1_1update__array__tuple__sketch.html | 245 +
...atasketches_1_1update__array__tuple__sketch.png | Bin 0 -> 2464 bytes
...e__array__tuple__sketch_1_1builder-members.html | 119 +
...1_1update__array__tuple__sketch_1_1builder.html | 206 +
..._1_1update__array__tuple__sketch_1_1builder.png | Bin 0 -> 1323 bytes
...es_1_1update__theta__sketch__alloc-members.html | 149 +
...tasketches_1_1update__theta__sketch__alloc.html | 1065 ++++
...atasketches_1_1update__theta__sketch__alloc.png | Bin 0 -> 1635 bytes
...e__theta__sketch__alloc_1_1builder-members.html | 119 +
...1_1update__theta__sketch__alloc_1_1builder.html | 200 +
..._1_1update__theta__sketch__alloc_1_1builder.png | Bin 0 -> 682 bytes
...asketches_1_1update__tuple__sketch-members.html | 148 +
...classdatasketches_1_1update__tuple__sketch.html | 1131 ++++
.../classdatasketches_1_1update__tuple__sketch.png | Bin 0 -> 1911 bytes
..._1update__tuple__sketch_1_1builder-members.html | 119 +
...etches_1_1update__tuple__sketch_1_1builder.html | 209 +
...ketches_1_1update__tuple__sketch_1_1builder.png | Bin 0 -> 1006 bytes
...ssdatasketches_1_1var__opt__sketch-members.html | 135 +
.../classdatasketches_1_1var__opt__sketch.html | 905 +++
...assdatasketches_1_1var__opt__union-members.html | 122 +
.../classdatasketches_1_1var__opt__union.html | 464 ++
...ped__compact__theta__sketch__alloc-members.html | 127 +
..._1_1wrapped__compact__theta__sketch__alloc.html | 442 ++
...s_1_1wrapped__compact__theta__sketch__alloc.png | Bin 0 -> 1164 bytes
docs/5.3.0/classes.html | 159 +
docs/5.3.0/clipboard.js | 61 +
docs/5.3.0/codefolding.js | 143 +
docs/5.3.0/common__defs_8hpp_source.html | 233 +
...compact__theta__sketch__parser_8hpp_source.html | 185 +
...t__theta__sketch__parser__impl_8hpp_source.html | 285 +
docs/5.3.0/compression__data_8hpp_source.html | 6134 +++++++++++++++++++
.../conditional__back__inserter_8hpp_source.html | 178 +
docs/5.3.0/conditional__forward_8hpp_source.html | 192 +
docs/5.3.0/cookie.js | 58 +
docs/5.3.0/count__min_8hpp_source.html | 328 +
docs/5.3.0/count__min__impl_8hpp_source.html | 659 ++
docs/5.3.0/count__zeros_8hpp_source.html | 233 +
.../coupon__iterator-internal_8hpp_source.html | 166 +
docs/5.3.0/coupon__iterator_8hpp_source.html | 162 +
docs/5.3.0/cpc__common_8hpp_source.html | 178 +
docs/5.3.0/cpc__compressor_8hpp_source.html | 267 +
docs/5.3.0/cpc__compressor__impl_8hpp_source.html | 885 +++
docs/5.3.0/cpc__confidence_8hpp_source.html | 279 +
docs/5.3.0/cpc__sketch_8hpp_source.html | 320 +
docs/5.3.0/cpc__sketch__impl_8hpp_source.html | 1049 ++++
docs/5.3.0/cpc__union_8hpp_source.html | 207 +
docs/5.3.0/cpc__union__impl_8hpp_source.html | 484 ++
docs/5.3.0/cpc__util_8hpp_source.html | 249 +
docs/5.3.0/density__sketch_8hpp_source.html | 285 +
docs/5.3.0/density__sketch__impl_8hpp_source.html | 724 +++
.../dir_00b03cb5ae954e8a2b89b347e34477b0.html | 114 +
.../dir_0449671fe79755ed26e25ef166543162.html | 114 +
.../dir_0bcb9827d33186afae8dcf178a314956.html | 131 +
.../dir_0c72de7c01a0490d64173f294d65fe37.html | 115 +
.../dir_10f6c93aee96669dfb32574207aeb69c.html | 114 +
.../dir_11a63523d45f2cb33b1e510397fbe77e.html | 115 +
.../dir_11fbc4217d50ab21044e5ad6614aede5.html | 131 +
.../dir_135820457b1e8e8dc5343e26fb29c1f8.html | 114 +
.../dir_14b95f261231c5f650b9b0a09b57a6c5.html | 114 +
.../dir_2629d1132294f29f2b0f1e3bcedeca02.html | 114 +
.../dir_33f2f37c686242631bbdb651f95cf35d.html | 118 +
.../dir_3f8742d40c9573c3b90638004faf146b.html | 139 +
.../dir_577378e109fcef5e822b70d599376114.html | 121 +
.../dir_70f016e26945e18c18bc29cf7b499574.html | 117 +
.../dir_82f3a10095a8f2296c0cf5c491a57b02.html | 114 +
.../dir_aa059cbaaa7f4410839cee554e9ff9ba.html | 145 +
.../dir_bc45e258c7269dbde5716543a4c54103.html | 114 +
.../dir_bdd9a5d540de89e9fe90efdfc6973a4f.html | 114 +
.../dir_cd6dde39990e390e8133ccee011656ea.html | 114 +
.../dir_cf88e39abd5376065d05109bb16db9ef.html | 117 +
.../dir_e0b5a940fd5435f299127cc9babd5c8d.html | 115 +
.../dir_e96b5dfe115c13cdeb36484e37aec42e.html | 114 +
.../dir_f1edaa446c592ba78db5fad06a956381.html | 114 +
.../dir_fabb7854c43508dcbf81254d1daad42f.html | 127 +
docs/5.3.0/doxygen.css | 2607 ++++++++
docs/5.3.0/doxygen.svg | Bin 0 -> 15461 bytes
docs/5.3.0/doxygen_crawl.html | 921 +++
docs/5.3.0/ebpps__sample_8hpp_source.html | 263 +
docs/5.3.0/ebpps__sample__impl_8hpp_source.html | 655 ++
docs/5.3.0/ebpps__sketch_8hpp_source.html | 279 +
docs/5.3.0/ebpps__sketch__impl_8hpp_source.html | 699 +++
docs/5.3.0/fdlibm__log_8hpp_source.html | 210 +
docs/5.3.0/files.html | 268 +
.../5.3.0/frequent__items__sketch_8hpp_source.html | 314 +
.../frequent__items__sketch__impl_8hpp_source.html | 686 +++
docs/5.3.0/functions.html | 113 +
docs/5.3.0/functions_b.html | 111 +
docs/5.3.0/functions_c.html | 116 +
docs/5.3.0/functions_d.html | 112 +
docs/5.3.0/functions_e.html | 118 +
docs/5.3.0/functions_f.html | 110 +
docs/5.3.0/functions_func.html | 113 +
docs/5.3.0/functions_func_b.html | 111 +
docs/5.3.0/functions_func_c.html | 116 +
docs/5.3.0/functions_func_d.html | 112 +
docs/5.3.0/functions_func_e.html | 117 +
docs/5.3.0/functions_func_f.html | 110 +
docs/5.3.0/functions_func_g.html | 157 +
docs/5.3.0/functions_func_h.html | 111 +
docs/5.3.0/functions_func_i.html | 113 +
docs/5.3.0/functions_func_j.html | 109 +
docs/5.3.0/functions_func_k.html | 109 +
docs/5.3.0/functions_func_l.html | 109 +
docs/5.3.0/functions_func_m.html | 109 +
docs/5.3.0/functions_func_n.html | 109 +
docs/5.3.0/functions_func_o.html | 109 +
docs/5.3.0/functions_func_q.html | 109 +
docs/5.3.0/functions_func_r.html | 110 +
docs/5.3.0/functions_func_s.html | 118 +
docs/5.3.0/functions_func_t.html | 117 +
docs/5.3.0/functions_func_u.html | 111 +
docs/5.3.0/functions_func_v.html | 109 +
docs/5.3.0/functions_func_w.html | 109 +
docs/5.3.0/functions_func_x.html | 109 +
docs/5.3.0/functions_g.html | 157 +
docs/5.3.0/functions_h.html | 111 +
docs/5.3.0/functions_i.html | 113 +
docs/5.3.0/functions_j.html | 109 +
docs/5.3.0/functions_k.html | 109 +
docs/5.3.0/functions_l.html | 109 +
docs/5.3.0/functions_m.html | 109 +
docs/5.3.0/functions_n.html | 109 +
docs/5.3.0/functions_o.html | 109 +
docs/5.3.0/functions_q.html | 110 +
docs/5.3.0/functions_r.html | 110 +
docs/5.3.0/functions_s.html | 118 +
docs/5.3.0/functions_t.html | 117 +
docs/5.3.0/functions_type.html | 108 +
docs/5.3.0/functions_u.html | 111 +
docs/5.3.0/functions_v.html | 109 +
docs/5.3.0/functions_w.html | 109 +
docs/5.3.0/functions_x.html | 109 +
docs/5.3.0/hierarchy.html | 187 +
docs/5.3.0/hll_8hpp_source.html | 380 ++
docs/5.3.0/hll_8private_8hpp_source.html | 160 +
docs/5.3.0/icon__estimator_8hpp_source.html | 384 ++
docs/5.3.0/index.html | 173 +
docs/5.3.0/inv__pow2__table_8hpp_source.html | 217 +
docs/5.3.0/kll__helper_8hpp_source.html | 224 +
docs/5.3.0/kll__helper__impl_8hpp_source.html | 434 ++
docs/5.3.0/kll__sketch_8hpp_source.html | 429 ++
docs/5.3.0/kll__sketch__impl_8hpp_source.html | 1258 ++++
docs/5.3.0/kolmogorov__smirnov_8hpp_source.html | 157 +
.../kolmogorov__smirnov__impl_8hpp_source.html | 194 +
docs/5.3.0/kxp__byte__lookup_8hpp_source.html | 191 +
docs/5.3.0/memory__operations_8hpp_source.html | 181 +
docs/5.3.0/menu.js | 589 ++
docs/5.3.0/menudata.js | 103 +
docs/5.3.0/namespacedatasketches.html | 390 ++
.../namespacedatasketches_1_1cpc__constants.html | 129 +
.../namespacedatasketches_1_1ebpps__constants.html | 123 +
.../namespacedatasketches_1_1kll__constants.html | 129 +
...espacedatasketches_1_1quantiles__constants.html | 129 +
.../namespacedatasketches_1_1req__constants.html | 129 +
.../namespacedatasketches_1_1theta__constants.html | 145 +
...mespacedatasketches_1_1var__opt__constants.html | 126 +
docs/5.3.0/namespacemembers.html | 188 +
docs/5.3.0/namespacemembers_enum.html | 106 +
docs/5.3.0/namespacemembers_eval.html | 109 +
docs/5.3.0/namespacemembers_func.html | 105 +
docs/5.3.0/namespacemembers_type.html | 123 +
docs/5.3.0/namespacemembers_vars.html | 115 +
docs/5.3.0/namespaces.html | 117 +
docs/5.3.0/navtree.css | 329 +
docs/5.3.0/optional_8hpp_source.html | 258 +
docs/5.3.0/quantiles__sketch_8hpp_source.html | 429 ++
.../5.3.0/quantiles__sketch__impl_8hpp_source.html | 1502 +++++
.../5.3.0/quantiles__sorted__view_8hpp_source.html | 284 +
.../quantiles__sorted__view__impl_8hpp_source.html | 264 +
docs/5.3.0/req__common_8hpp_source.html | 154 +
docs/5.3.0/req__compactor_8hpp_source.html | 249 +
docs/5.3.0/req__compactor__impl_8hpp_source.html | 642 ++
docs/5.3.0/req__sketch_8hpp_source.html | 372 ++
docs/5.3.0/req__sketch__impl_8hpp_source.html | 1014 ++++
.../reverse__purge__hash__map_8hpp_source.html | 245 +
...everse__purge__hash__map__impl_8hpp_source.html | 483 ++
docs/5.3.0/search/all_0.js | 16 +
docs/5.3.0/search/all_1.js | 11 +
docs/5.3.0/search/all_10.js | 7 +
docs/5.3.0/search/all_11.js | 16 +
docs/5.3.0/search/all_12.js | 40 +
docs/5.3.0/search/all_13.js | 14 +
docs/5.3.0/search/all_14.js | 8 +
docs/5.3.0/search/all_15.js | 7 +
docs/5.3.0/search/all_16.js | 4 +
docs/5.3.0/search/all_2.js | 28 +
docs/5.3.0/search/all_3.js | 26 +
docs/5.3.0/search/all_4.js | 13 +
docs/5.3.0/search/all_5.js | 6 +
docs/5.3.0/search/all_6.js | 52 +
docs/5.3.0/search/all_7.js | 14 +
docs/5.3.0/search/all_8.js | 9 +
docs/5.3.0/search/all_9.js | 8 +
docs/5.3.0/search/all_a.js | 5 +
docs/5.3.0/search/all_b.js | 5 +
docs/5.3.0/search/all_c.js | 11 +
docs/5.3.0/search/all_d.js | 6 +
docs/5.3.0/search/all_e.js | 4 +
docs/5.3.0/search/all_f.js | 8 +
docs/5.3.0/search/classes_0.js | 9 +
docs/5.3.0/search/classes_1.js | 9 +
docs/5.3.0/search/classes_10.js | 4 +
docs/5.3.0/search/classes_2.js | 18 +
docs/5.3.0/search/classes_3.js | 9 +
docs/5.3.0/search/classes_4.js | 4 +
docs/5.3.0/search/classes_5.js | 4 +
docs/5.3.0/search/classes_6.js | 7 +
docs/5.3.0/search/classes_7.js | 7 +
docs/5.3.0/search/classes_8.js | 5 +
docs/5.3.0/search/classes_9.js | 7 +
docs/5.3.0/search/classes_a.js | 5 +
docs/5.3.0/search/classes_b.js | 6 +
docs/5.3.0/search/classes_c.js | 31 +
docs/5.3.0/search/classes_d.js | 10 +
docs/5.3.0/search/classes_e.js | 8 +
docs/5.3.0/search/classes_f.js | 5 +
docs/5.3.0/search/enums_0.js | 4 +
docs/5.3.0/search/enums_1.js | 4 +
docs/5.3.0/search/enumvalues_0.js | 6 +
docs/5.3.0/search/enumvalues_1.js | 5 +
docs/5.3.0/search/functions_0.js | 8 +
docs/5.3.0/search/functions_1.js | 6 +
docs/5.3.0/search/functions_10.js | 5 +
docs/5.3.0/search/functions_11.js | 13 +
docs/5.3.0/search/functions_12.js | 12 +
docs/5.3.0/search/functions_13.js | 6 +
docs/5.3.0/search/functions_14.js | 4 +
docs/5.3.0/search/functions_15.js | 4 +
docs/5.3.0/search/functions_16.js | 4 +
docs/5.3.0/search/functions_2.js | 12 +
docs/5.3.0/search/functions_3.js | 7 +
docs/5.3.0/search/functions_4.js | 12 +
docs/5.3.0/search/functions_5.js | 5 +
docs/5.3.0/search/functions_6.js | 52 +
docs/5.3.0/search/functions_7.js | 6 +
docs/5.3.0/search/functions_8.js | 8 +
docs/5.3.0/search/functions_9.js | 4 +
docs/5.3.0/search/functions_a.js | 4 +
docs/5.3.0/search/functions_b.js | 4 +
docs/5.3.0/search/functions_c.js | 4 +
docs/5.3.0/search/functions_d.js | 4 +
docs/5.3.0/search/functions_e.js | 4 +
docs/5.3.0/search/functions_f.js | 4 +
docs/5.3.0/search/namespaces_0.js | 11 +
docs/5.3.0/search/pages_0.js | 4 +
docs/5.3.0/search/pages_1.js | 6 +
docs/5.3.0/search/pages_2.js | 4 +
docs/5.3.0/search/pages_3.js | 4 +
docs/5.3.0/search/search.css | 377 ++
docs/5.3.0/search/search.js | 746 +++
docs/5.3.0/search/searchdata.js | 39 +
docs/5.3.0/search/typedefs_0.js | 6 +
docs/5.3.0/search/typedefs_1.js | 7 +
docs/5.3.0/search/typedefs_2.js | 5 +
docs/5.3.0/search/typedefs_3.js | 4 +
docs/5.3.0/search/typedefs_4.js | 5 +
docs/5.3.0/search/typedefs_5.js | 4 +
docs/5.3.0/search/typedefs_6.js | 4 +
docs/5.3.0/search/typedefs_7.js | 7 +
docs/5.3.0/search/typedefs_8.js | 5 +
docs/5.3.0/search/typedefs_9.js | 4 +
docs/5.3.0/search/variables_0.js | 6 +
docs/5.3.0/search/variables_1.js | 4 +
docs/5.3.0/search/variables_2.js | 10 +
docs/5.3.0/serde_8hpp_source.html | 346 ++
...fault__array__tuple__union__policy-members.html | 111 +
...es_1_1default__array__tuple__union__policy.html | 122 +
.../5.3.0/structdatasketches_1_1serde-members.html | 117 +
docs/5.3.0/structdatasketches_1_1serde.html | 330 +
...ithmetic_347673b6d71d4024e7fa2496d7f8ee293.html | 286 +
...ithmetic_38b1bde21d1307cf4830eb410808193d4.html | 116 +
...es_1_1serde_3_01std_1_1string_01_4-members.html | 117 +
...tasketches_1_1serde_3_01std_1_1string_01_4.html | 362 ++
docs/5.3.0/tabs.css | 482 ++
docs/5.3.0/theta__a__not__b_8hpp_source.html | 171 +
docs/5.3.0/theta__a__not__b__impl_8hpp_source.html | 158 +
docs/5.3.0/theta__comparators_8hpp_source.html | 158 +
docs/5.3.0/theta__constants_8hpp_source.html | 161 +
docs/5.3.0/theta__helpers_8hpp_source.html | 196 +
docs/5.3.0/theta__intersection_8hpp_source.html | 187 +
.../theta__intersection__base_8hpp_source.html | 169 +
...heta__intersection__base__impl_8hpp_source.html | 234 +
.../theta__intersection__impl_8hpp_source.html | 170 +
.../theta__jaccard__similarity_8hpp_source.html | 150 +
...eta__jaccard__similarity__base_8hpp_source.html | 239 +
.../theta__set__difference__base_8hpp_source.html | 164 +
...a__set__difference__base__impl_8hpp_source.html | 198 +
docs/5.3.0/theta__sketch_8hpp_source.html | 557 ++
docs/5.3.0/theta__sketch__impl_8hpp_source.html | 1231 ++++
docs/5.3.0/theta__union_8hpp_source.html | 206 +
docs/5.3.0/theta__union__base_8hpp_source.html | 172 +
.../theta__union__base__impl_8hpp_source.html | 202 +
docs/5.3.0/theta__union__impl_8hpp_source.html | 179 +
.../theta__update__sketch__base_8hpp_source.html | 344 ++
...ta__update__sketch__base__impl_8hpp_source.html | 577 ++
docs/5.3.0/tuple__a__not__b_8hpp_source.html | 168 +
docs/5.3.0/tuple__a__not__b__impl_8hpp_source.html | 149 +
docs/5.3.0/tuple__intersection_8hpp_source.html | 202 +
.../tuple__intersection__impl_8hpp_source.html | 163 +
.../tuple__jaccard__similarity_8hpp_source.html | 151 +
docs/5.3.0/tuple__sketch_8hpp_source.html | 544 ++
docs/5.3.0/tuple__sketch__impl_8hpp_source.html | 920 +++
docs/5.3.0/tuple__union_8hpp_source.html | 218 +
docs/5.3.0/tuple__union__impl_8hpp_source.html | 174 +
docs/5.3.0/u32__table_8hpp_source.html | 195 +
docs/5.3.0/u32__table__impl_8hpp_source.html | 376 ++
docs/5.3.0/var__opt__sketch_8hpp_source.html | 466 ++
docs/5.3.0/var__opt__sketch__impl_8hpp_source.html | 1943 ++++++
docs/5.3.0/var__opt__union_8hpp_source.html | 303 +
docs/5.3.0/var__opt__union__impl_8hpp_source.html | 768 +++
docs/5.3.0/xxhash64_8h_source.html | 298 +
451 files changed, 109231 insertions(+)
diff --git a/docs/5.3.0/_aux_hash_map-internal_8hpp_source.html b/docs/5.3.0/_aux_hash_map-internal_8hpp_source.html
new file mode 100644
index 00000000..b75cb2f2
--- /dev/null
+++ b/docs/5.3.0/_aux_hash_map-internal_8hpp_source.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/AuxHashMap-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">AuxHashMap-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "AuxHashMap.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>AuxHashMap<A>::AuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>lgConfigK(lgConfigK),</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>lgAuxArrInts(lgAuxArrInts),</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>auxCount(0),</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>entries(1ULL << lgAuxArrInts, 0, allocator)</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>{}</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>AuxHashMap<A>* AuxHashMap<A>::newAuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap<A>(lgAuxArrInts, lgConfigK, allocator);</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>}</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>AuxHashMap<A>* AuxHashMap<A>::newAuxHashMap(<span class="keyword">const</span> AuxHashMap& that) {</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(that.entries.get_allocator()).allocate(1)) AuxHashMap<A>(that);</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>}</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>AuxHashMap<A>* AuxHashMap<A>::deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len,</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> uint8_t lgConfigK,</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> uint8_t lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (srcCompact) { <span class="comment">// early compact versions didn't use LgArr byte field so ignore input</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> lgArrInts = HllUtil<A>::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> uint32_t configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> AuxHashMap<A>* auxHashMap;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> uint32_t* auxPtr = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint32_t*<span class="keyword">></span>(bytes);</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span> (srcCompact) {</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span> (len < auxCount * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) {</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Input array too small to hold AuxHashMap image"</span>);</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap<A>(lgArrInts, lgConfigK, allocator);</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < auxCount; ++i) {</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> uint32_t slotNo = HllUtil<A>::getLow26(pair) & configKmask;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">const</span> uint8_t value = HllUtil<A>::getValue(pair);</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> uint32_t itemsToRead = 1 << lgAuxArrInts;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (len < itemsToRead * <span class="keyword">sizeof</span>(uint32_t)) {</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Input array too small to hold AuxHashMap image"</span>);</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap<A>(lgArrInts, lgConfigK, allocator);</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < itemsToRead; ++i) {</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> (pair == hll_constants::EMPTY) { <span class="keywordflow">continue</span>; }</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">const</span> uint32_t slotNo = HllUtil<A>::getLow26(pair) & configKmask;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">const</span> uint8_t value = HllUtil<A>::getValue(pair);</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (auxHashMap->getAuxCount() != auxCount) {</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> make_deleter()(auxHashMap);</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Deserialized AuxHashMap has wrong number of entries"</span>);</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span> auxHashMap; </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>}</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>AuxHashMap<A>* AuxHashMap<A>::deserialize(std::istream& is, uint8_t lgConfigK,</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> uint8_t lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (srcCompact) { <span class="comment">// early compact versions didn't use LgArr byte field so ignore input</span></div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> lgArrInts = HllUtil<A>::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> AuxHashMap<A>* auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap<A>(lgArrInts, lgConfigK, allocator);</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">typedef</span> std::unique_ptr<AuxHashMap<A>, std::function<void(AuxHashMap<A>*)>> aux_hash_map_ptr;</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> aux_hash_map_ptr aux_ptr(auxHashMap, auxHashMap->make_deleter());</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">const</span> uint32_t configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (srcCompact) {</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < auxCount; ++i) {</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">const</span> <span class="keyword">auto</span> pair = read<int>(is);</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> uint32_t slotNo = HllUtil<A>::getLow26(pair) & configKmask;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> uint8_t value = HllUtil<A>::getValue(pair);</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">const</span> uint32_t itemsToRead = 1 << lgAuxArrInts;</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < itemsToRead; ++i) {</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> <span class="keyword">auto</span> pair = read<int>(is);</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (pair == hll_constants::EMPTY) { <span class="keywordflow">continue</span>; }</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">const</span> uint32_t slotNo = HllUtil<A>::getLow26(pair) & configKmask;</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">const</span> uint8_t value = HllUtil<A>::getValue(pair);</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (auxHashMap->getAuxCount() != auxCount) {</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> make_deleter()(auxHashMap);</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Deserialized AuxHashMap has wrong number of entries"</span>);</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span> aux_ptr.release();</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>}</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span>std::function<void(AuxHashMap<A>*)> AuxHashMap<A>::make_deleter() {</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">return</span> [](AuxHashMap<A>* ptr) {</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> ahmAlloc alloc(ptr->entries.get_allocator());</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> ptr->~AuxHashMap();</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> alloc.deallocate(ptr, 1);</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> };</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span>AuxHashMap<A>* AuxHashMap<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(entries.get_allocator()).allocate(1)) AuxHashMap<A>(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>}</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span>uint32_t AuxHashMap<A>::getAuxCount()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> auxCount;</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>}</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span>uint32_t* AuxHashMap<A>::getAuxIntArr(){</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span> entries.data();</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span>}</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span>uint8_t AuxHashMap<A>::getLgAuxArrInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> lgAuxArrInts;</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span>}</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>uint32_t AuxHashMap<A>::getCompactSizeBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span> auxCount << 2;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span>}</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span>uint32_t AuxHashMap<A>::getUpdatableSizeBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span> 4 << lgAuxArrInts;</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span>}</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="keywordtype">void</span> AuxHashMap<A>::mustAdd(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">const</span> int32_t index = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">const</span> uint32_t entry_pair = HllUtil<A>::pair(slotNo, value);</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span> (index >= 0) {</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Found a slotNo that should not be there: SlotNo: "</span></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> + std::to_string(slotNo) + <span class="stringliteral">", Value: "</span> + std::to_string(value));</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// found empty entry</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> entries[~index] = entry_pair;</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> ++auxCount;</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> checkGrow();</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span>}</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span>uint8_t AuxHashMap<A>::mustFindValueFor(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">const</span> int32_t index = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">if</span> (index >= 0) {</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> HllUtil<A>::getValue(entries[index]);</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"slotNo not found: "</span> + std::to_string(slotNo));</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span>}</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="keywordtype">void</span> AuxHashMap<A>::mustReplace(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">const</span> int32_t idx = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span> (idx >= 0) {</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> entries[idx] = HllUtil<A>::pair(slotNo, value);</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Pair not found: SlotNo: "</span> + std::to_string(slotNo)</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> + <span class="stringliteral">", Value: "</span> + std::to_string(value));</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span>}</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="keywordtype">void</span> AuxHashMap<A>::checkGrow() {</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span> ((hll_constants::RESIZE_DENOM * auxCount) > (hll_constants::RESIZE_NUMER * (1 << lgAuxArrInts))) {</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> growAuxSpace();</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span>}</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="keywordtype">void</span> AuxHashMap<A>::growAuxSpace() {</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">const</span> <span class="keywordtype">int</span> configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">const</span> <span class="keywordtype">int</span> newArrLen = 1 << ++lgAuxArrInts;</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> vector_int entries_new(newArrLen, 0, entries.get_allocator());</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < entries.size(); ++i) {</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keyword">const</span> uint32_t fetched = entries[i];</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// find empty in new array</span></div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">const</span> int32_t idx = find(entries_new.data(), lgAuxArrInts, lgConfigK, fetched & configKmask);</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> entries_new[~idx] = fetched;</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> entries = std::move(entries_new);</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span>}</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment">//Searches the Aux arr hash table for an empty or a matching slotNo depending on the context.</span></div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="comment">//If entire entry is empty, returns one's complement of index = found empty.</span></div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment">//If entry contains given slotNo, returns its index = found slotNo.</span></div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment">//Continues searching.</span></div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment">//If the probe comes back to original index, throws an exception.</span></div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span>int32_t AuxHashMap<A>::find(<span class="keyword">const</span> uint32_t* auxArr, uint8_t lgAuxArrInts, uint8_t lgConfigK, uint32_t slotNo) {</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">const</span> uint32_t auxArrMask = (1 << lgAuxArrInts) - 1;</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">const</span> uint32_t configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> uint32_t probe = slotNo & auxArrMask;</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">do</span> {</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">const</span> uint32_t arrVal = auxArr[probe];</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span> (arrVal == hll_constants::EMPTY) { <span class="comment">//Compares on entire entry</span></div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (slotNo == (arrVal & configKmask)) { <span class="comment">//Compares only on slotNo</span></div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">return</span> probe; <span class="comment">//found given slotNo, return probe = index into aux array</span></div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> }</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">const</span> uint32_t stride = (slotNo >> lgAuxArrInts) | 1;</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> probe = (probe + stride) & auxArrMask;</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> } <span class="keywordflow">while</span> (probe != loopIndex);</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Key not found and no empty slots!"</span>);</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span>}</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span>coupon_iterator<A> AuxHashMap<A>::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">return</span> coupon_iterator<A>(entries.data(), 1ULL << lgAuxArrInts, 0, all);</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span>}</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span>coupon_iterator<A> AuxHashMap<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">return</span> coupon_iterator<A>(entries.data(), 1ULL << lgAuxArrInts, 1ULL << lgAuxArrInts, <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span>}</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span>}</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="preprocessor">#endif </span><span class="comment">// _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_aux_hash_map_8hpp_source.html b/docs/5.3.0/_aux_hash_map_8hpp_source.html
new file mode 100644
index 00000000..1a097ac5
--- /dev/null
+++ b/docs/5.3.0/_aux_hash_map_8hpp_source.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/AuxHashMap.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">AuxHashMap.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _AUXHASHMAP_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _AUXHASHMAP_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <functional></span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include "coupon_iterator.hpp"</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>AuxHashMap final {</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> AuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">static</span> AuxHashMap* newAuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">static</span> AuxHashMap* newAuxHashMap(<span class="keyword">const</span> AuxHashMap<A>& that);</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> AuxHashMap* deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len,</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> uint8_t lgConfigK,</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static</span> AuxHashMap* deserialize(std::istream& is, uint8_t lgConfigK,</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">virtual</span> ~AuxHashMap() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> std::function<void(AuxHashMap<A>*)> make_deleter();</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> AuxHashMap* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> uint32_t getUpdatableSizeBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> uint32_t getCompactSizeBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> uint32_t getAuxCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> uint32_t* getAuxIntArr();</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> uint8_t getLgAuxArrInts() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> coupon_iterator<A> begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> coupon_iterator<A> end() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">void</span> mustAdd(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> uint8_t mustFindValueFor(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> mustReplace(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<AuxHashMap<A>> ahmAlloc;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">using </span>vector_int = std::vector<uint32_t, typename std::allocator_traits<A>::template rebind_alloc<uint32_t>>;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// static so it can be used when resizing</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* auxArr, uint8_t lgAuxArrInts, uint8_t lgConfigK, uint32_t slotNo);</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> checkGrow();</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> growAuxSpace();</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">const</span> uint8_t lgConfigK;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> uint8_t lgAuxArrInts;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> uint32_t auxCount;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> vector_int entries;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>};</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#include "AuxHashMap-internal.hpp"</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor">#endif </span><span class="comment">/* _AUXHASHMAP_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_composite_interpolation_x_table-internal_8hpp_source.html b/docs/5.3.0/_composite_interpolation_x_table-internal_8hpp_source.html
new file mode 100644
index 00000000..1eb07dae
--- /dev/null
+++ b/docs/5.3.0/_composite_interpolation_x_table-internal_8hpp_source.html
@@ -0,0 +1,919 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CompositeInterpolationXTable-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CompositeInterpolationXTable-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "CompositeInterpolationXTable.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <exception></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t numXArrValues = 257;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t yStrides[] =</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> {1, 2, 3, 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480, 40960, 81920};</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>uint32_t CompositeInterpolationXTable<A>::get_y_stride(uint8_t logK) {</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (logK < hll_constants::MIN_LOG_K || logK > hll_constants::MAX_LOG_K) {</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"logK must be in range ["</span> + std::to_string(hll_constants::MIN_LOG_K)</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> + <span class="stringliteral">", "</span> + std::to_string(hll_constants::MAX_LOG_K) + <span class="stringliteral">"]. Found: "</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> + std::to_string(logK));</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> yStrides[logK - hll_constants::MIN_LOG_K];</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>}</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>uint32_t CompositeInterpolationXTable<A>::get_x_arr_length() {</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> numXArrValues;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> xArray[18][numXArrValues] = {</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>{</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> 10.767999803534, 11.237701481774, 11.722738717438, 12.223246391222,</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> 12.739366773787, 13.271184824495, 13.818759686650, 14.382159835785,</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> 14.961390904922, 15.556414447178, 16.167227058768, 16.793705840034,</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> 17.435831011559, 18.093368824077, 18.766214022468, 19.454114555153,</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> 20.156877376380, 20.874309118151, 21.606085061388, 22.351926834624,</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> 23.111406651437, 23.884222842419, 24.669953053285, 25.468324695415,</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> 26.278740385032, 27.100807701976, 27.934264623663, 28.778498012717,</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> 29.633064579479, 30.497559091830, 31.371415928956, 32.254248998304,</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> 33.145649456017, 34.045084140394, 34.952069032314, 35.866210502243,</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> 36.787128772113, 37.714316067007, 38.647432342061, 39.586020708848,</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> 40.529738186256, 41.478377527525, 42.431435504179, 43.388619067416,</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> 44.349650659292, 45.314111448463, 46.281805382722, 47.252472240229,</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> 48.225969481651, 49.202042512440, 50.180350422249, 51.160761480664,</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> 52.143032445587, 53.127233235412, 54.112986437616, 55.100182392694,</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> 56.088558030701, 57.078156023607, 58.068788167275, 59.060493030644,</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> 60.053033784417, 61.046284072738, 62.040286486621, 63.034929032992,</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> 64.030027371399, 65.025588917110, 66.021614945599, 67.018177418440,</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> 68.015186786528, 69.012467972526, 70.010014322660, 71.007638150468,</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> 72.005472777573, 73.003558069130, 74.001925061314, 75.000323809106,</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> 75.998875046818, 76.997735309722, 77.996356820987, 78.995236661037,</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> 79.994185446564, 80.993179953574, 81.991936172868, 82.991277726952,</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> 83.990564675011, 84.990016215330, 85.989354175963, 86.988664031183,</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> 87.988038383374, 88.987487931153, 89.987011275632, 90.986376635228,</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> 91.985802667485, 92.985125933965, 93.984894049744, 94.984597185523,</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> 95.984374633793, 96.983987641198, 97.983728001025, 98.983151114601,</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> 99.982917278162, 100.982752268263, 101.982610588914, 102.982425129077,</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> 103.982425883214, 104.982193814993, 105.982188025268, 106.982005912713,</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> 107.981949640254, 108.981777381902, 109.981767708570, 110.981785341504,</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> 111.981686149156, 112.981635012054, 113.981557303839, 114.981412817204,</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> 115.981636136290, 116.981451847734, 117.981619278961, 118.981656205677,</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> 119.981462628717, 120.981648197593, 121.981672839888, 122.981536601882,</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> 123.981424780957, 124.981245233627, 125.981297203177, 126.981469882453,</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> 127.981420558510, 128.981470958251, 129.981803124940, 130.981454077005,</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> 131.981307772677, 132.981136552712, 133.981060440468, 134.980764897921,</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> 135.980250123519, 136.979947889981, 137.979778713731, 138.979651075854,</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> 139.979521006237, 140.979619490143, 141.979418214464, 142.979378742690,</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> 143.979006714929, 144.978789085341, 145.978940618746, 146.978699584620,</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> 147.978509489139, 148.978375065557, 149.978382007245, 150.978320879037,</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> 151.978431501891, 152.978357310224, 153.978079953131, 154.977867908315,</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> 155.977897282267, 156.977732141540, 157.977285841428, 158.977381755450,</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> 159.977107808858, 160.976898092463, 161.976945065052, 162.976415653211,</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> 163.976063254486, 164.976168718176, 165.976009634854, 166.975746910144,</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> 167.975365498336, 168.975302031315, 169.975145815395, 170.975048401084,</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> 171.974904933990, 172.974962856090, 173.974307743427, 174.974505556696,</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> 175.974404122880, 176.974154794798, 177.973936891006, 178.973909768514,</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> 179.973629325330, 180.973396428571, 181.973041798012, 182.972922327014,</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> 183.972453839631, 184.972389341638, 185.971978290400, 186.971721489488,</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> 187.971610992921, 188.971432541974, 189.970886522529, 190.970636748690,</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> 191.970543849249, 192.970222044828, 193.969945219163, 194.969816174441,</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> 195.969660267113, 196.969306217626, 197.969283141670, 198.968952697752,</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> 199.968650726389, 200.968771498143, 201.969063388798, 202.968624157712,</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> 203.968385122471, 204.968459873029, 205.968253426841, 206.968128284823,</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> 207.968002441937, 208.967981887571, 209.967853843352, 210.967653026858,</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> 211.967601511385, 212.967479077297, 213.967293002672, 214.967265475369,</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> 215.967098197208, 216.966915139758, 217.966680984700, 218.966156974161,</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> 219.965788928685, 220.965578199561, 221.965550145047, 222.965055562297,</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> 223.965041228123, 224.965088576052, 225.964951649635, 226.964837079061,</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> 227.964949815142, 228.964753278386, 229.964358666956, 230.964158288467,</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> 231.964118659643, 232.964105599719, 233.964013041408, 234.963810178150,</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> 235.963847138572, 236.963634735645, 237.963596910032, 238.963659218725,</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> 239.963498440155, 240.963445597658, 241.963141291971, 242.962684055746,</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> 243.962664757583, 244.962762174588, 245.962862664373, 246.962595237647,</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> 247.962493432533, 248.962292518484, 249.962622934132, 250.962187495200,</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> 251.962038306920, 252.961926735684, 253.961867248643, 254.961699581530,</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> 255.961371028199</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>},</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">// log K = 5</span></div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>{</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> 22.304000309384, 23.261989079230, 24.249656493833, 25.267226901899,</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> 26.314781734430, 27.392414068382, 28.500177845081, 29.638044883897,</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> 30.805888087516, 32.003714838418, 33.231360682863, 34.488477823483,</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> 35.774924122967, 37.090293268866, 38.434292452116, 39.806594197334,</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> 41.206691028159, 42.634002763091, 44.088065403269, 45.568286128520,</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> 47.074066947685, 48.604745105475, 50.159729872619, 51.738339282229,</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> 53.339805618020, 54.963435280656, 56.608464119077, 58.274038434156,</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> 59.959403900602, 61.663926660982, 63.386737477574, 65.127093833107,</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> 66.884091606686, 68.656959698762, 70.445052178435, 72.247581860591,</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> 74.063607663774, 75.892531705810, 77.733879994604, 79.586788509372,</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> 81.450593478752, 83.324645303244, 85.208482496209, 87.101116685537,</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> 89.002152917959, 90.911090999940, 92.827275073114, 94.750224301260,</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> 96.679773715696, 98.615214511699, 100.556211548644, 102.502148428334,</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> 104.452899214344, 106.407767504404, 108.366625832228, 110.329564692634,</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> 112.295481742874, 114.264715056639, 116.236769512562, 118.211214593179,</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> 120.188376370012, 122.167746134232, 124.148833002551, 126.131612799989,</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> 128.116072530208, 130.102155735854, 132.089449244974, 134.077816832908,</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> 136.067404409248, 138.057703527432, 140.049350564796, 142.041756984355,</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> 144.034780624078, 146.028584459531, 148.022894428003, 150.017952482368,</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> 152.013358245376, 154.009157360372, 156.005076955043, 158.001501688538,</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> 159.998043891849, 161.995141096448, 163.992507770330, 165.990019741406,</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> 167.987379363144, 169.985323168231, 171.983371903769, 173.981134136378,</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> 175.979306888599, 177.977458741010, 179.975994045101, 181.974478508488,</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> 183.973329438036, 185.972061903815, 187.971014174496, 189.969582278901,</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> 191.968450510061, 193.967607022497, 195.966726931677, 197.965915341472,</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> 199.964910588293, 201.964427852336, 203.964308576556, 205.963778587196,</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> 207.963244179225, 209.962423156859, 211.961859295409, 213.961171237132,</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> 215.960624048009, 217.959980906604, 219.959156277574, 221.958692298143,</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> 223.958335010302, 225.958329061602, 227.957722024027, 229.957134954397,</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> 231.956897929205, 233.956901572571, 235.956650770311, 237.956593290745,</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> 239.956700470895, 241.956192761863, 243.956003327600, 245.955794901574,</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> 247.955501305446, 249.954960233132, 251.954510187803, 253.954252376340,</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> 255.954011943050, 257.953388008439, 259.953139524693, 261.952918466928,</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> 263.952432910213, 265.952485387126, 267.952763908808, 269.952510701682,</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> 271.952383356830, 273.951921008979, 275.951766755515, 277.951697578478,</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> 279.951700548755, 281.951805228218, 283.951934023417, 285.952140722678,</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> 287.952063941231, 289.951717207670, 291.951294241955, 293.950937111819,</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> 295.950900506385, 297.950320403388, 299.949546547128, 301.949474819234,</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> 303.949155377395, 305.948725010033, 307.948408553357, 309.948120512731,</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> 311.947897212148, 313.947738181662, 315.947255247579, 317.946631669691,</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> 319.946302193308, 321.945855881155, 323.945603079048, 325.944930145876,</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> 327.945048538923, 329.944795565500, 331.944227346318, 333.943705422222,</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> 335.943231918970, 337.942333069602, 339.942354997227, 341.941890952026,</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> 343.941346276351, 345.940653575739, 347.940019001109, 349.940026817951,</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> 351.938944534275, 353.938172407151, 355.937584534690, 357.937041224148,</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> 359.936673631279, 361.936179855216, 363.936105840596, 365.935367434940,</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> 367.935295315770, 369.934793960370, 371.934314961518, 373.933949277377,</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> 375.933420587284, 377.933148188654, 379.932379363314, 381.931900192237,</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> 383.930951130857, 385.930667541762, 387.930025971711, 389.929529183966,</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> 391.929116798157, 393.928361940635, 395.927673611921, 397.927111110912,</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> 399.926483516685, 401.925799510661, 403.924918492428, 405.924540208915,</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> 407.924014467935, 409.923779779206, 411.922979548363, 413.922515268061,</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> 415.922148908645, 417.921643066153, 419.921126587639, 421.920766647684,</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> 423.920642824255, 425.920411492484, 427.920603679205, 429.920445437023,</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> 431.920286509746, 433.919789058392, 435.919408587813, 437.918873200300,</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> 439.918417416574, 441.918192491069, 443.918376503567, 445.917692006023,</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> 447.917132642691, 449.917217997363, 451.916924115487, 453.916662151474,</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> 455.916485288107, 457.915879851633, 459.915842501592, 461.915547354915,</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> 463.914995141359, 465.914585759187, 467.914144928428, 469.913956069337,</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> 471.913046082896, 473.912468624617, 475.912322983182, 477.912118100240,</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> 479.911923664773, 481.911518944025, 483.911023761757, 485.910386539830,</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> 487.910092345284, 489.910153786770, 491.909575245360, 493.908973823502,</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> 495.908577061168, 497.908550221055, 499.908127020659, 501.907710605296,</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> 503.907806972566, 505.907336571662, 507.907081330259, 509.906648846180,</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> 511.906201574892</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span>},</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment">// log K = 6</span></div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span>{</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> 45.375999854524, 46.820948326168, 48.298703712049, 49.809402685314,</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> 51.353165756275, 52.929933710602, 54.539893242468, 56.183033892089,</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> 57.859217068495, 59.568519998303, 61.310801009963, 63.085886926328,</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> 64.893798324934, 66.734230191052, 68.607173306372, 70.512210309984,</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> 72.449265953981, 74.418007054647, 76.417910710559, 78.448929349152,</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> 80.510585932256, 82.602514696500, 84.724061528721, 86.875166381330,</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> 89.055217833675, 91.263852803721, 93.500342620773, 95.764451518395,</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> 98.055566319691, 100.373234086043, 102.716794393386, 105.085599217566,</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> 107.479363461004, 109.897282858060, 112.338907676111, 114.803401103124,</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> 117.290259931022, 119.799265623507, 122.329323908482, 124.879681624600,</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> 127.450299022993, 130.040239267142, 132.648756733593, 135.275366525219,</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> 137.919720233989, 140.580778017562, 143.258128898839, 145.951552244700,</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> 148.660145472460, 151.383257444852, 154.120434694643, 156.871202914301,</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> 159.634634288797, 162.410377522877, 165.198249005575, 167.997420145534,</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> 170.807579918337, 173.628020587905, 176.458633641294, 179.298282098581,</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> 182.147449731726, 185.005094444186, 187.870899328937, 190.744709255561,</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> 193.625572419776, 196.513740460772, 199.408599560293, 202.309940032246,</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> 205.217132295894, 208.129828601313, 211.047995735211, 213.970919426104,</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> 216.899109829571, 219.832024990852, 222.769136305806, 225.710258431247,</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> 228.655217514772, 231.603984417526, 234.555642012353, 237.510635882749,</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> 240.468820458907, 243.429903849174, 246.393192036307, 249.359251612075,</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> 252.327416912482, 255.297598046767, 258.269777722144, 261.244337060733,</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> 264.219958654591, 267.197643910088, 270.177202282129, 273.157339433786,</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> 276.139287129066, 279.122276848731, 282.107226383752, 285.092136000673,</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> 288.078230550129, 291.065256815999, 294.053160971001, 297.042401030971,</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> 300.031784889467, 303.022502412860, 306.013581138287, 309.005124942334,</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> 311.996910583050, 314.989635544162, 317.982189300799, 320.975762085573,</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> 323.969719809182, 326.963672522149, 329.958419674913, 332.953046205989,</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> 335.948338966110, 338.943201657934, 341.938798787180, 344.935321901459,</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> 347.931089897905, 350.927355153871, 353.923731760523, 356.920383399325,</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> 359.916863372939, 362.914245241722, 365.911216314347, 368.908636150615,</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> 371.905028432797, 374.901981729273, 377.899718967915, 380.897391911925,</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> 383.894945428721, 386.892974193389, 389.890517424427, 392.889050804732,</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> 395.886893560179, 398.884852345719, 401.883235933616, 404.881805247652,</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> 407.880049402262, 410.878410789472, 413.876755787854, 416.875140105536,</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> 419.873758096660, 422.872739431833, 425.871627898739, 428.870663138631,</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> 431.869475472357, 434.868378059774, 437.867537661532, 440.866274620049,</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> 443.865086570094, 446.864282236320, 449.863630871851, 452.862772062678,</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> 455.861877807413, 458.860680461949, 461.859728874700, 464.858478829514,</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> 467.857314559298, 470.856707830759, 473.855641079729, 476.854880576501,</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> 479.853812351976, 482.852666825246, 485.851471230749, 488.850997731659,</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> 491.850420535006, 494.849118717584, 497.848645341646, 500.848230362352,</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> 503.847546143645, 506.847285358235, 509.846275998715, 512.845599444922,</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> 515.845441684852, 518.844522015985, 521.843923976006, 524.843281639782,</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> 527.842399994830, 530.841152548296, 533.840788827465, 536.840058715879,</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> 539.839578267778, 542.839076801367, 545.838441853502, 548.837925005355,</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> 551.837456112430, 554.837041819817, 557.836916936797, 560.836116071833,</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> 563.834832988710, 566.834107840572, 569.832763471368, 572.831700689757,</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> 575.832050680783, 578.831190216307, 581.831249402778, 584.830325442080,</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> 587.828993643112, 590.827962761832, 593.827454067745, 596.825833598259,</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> 599.824193205007, 602.822806340644, 605.822276069352, 608.821423024191,</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> 611.820006110523, 614.819016304854, 617.818220240160, 620.817311827644,</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> 623.816286470744, 626.815211383752, 629.815077535810, 632.813925717940,</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> 635.813392704099, 638.812424935595, 641.811289306882, 644.809932622788,</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> 647.808609610738, 650.807771758015, 653.806851303878, 656.805452367508,</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> 659.804133900742, 662.803103749985, 665.801910649522, 668.800969589926,</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> 671.798796938405, 674.798110719805, 677.797843657187, 680.797711918663,</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> 683.796449689643, 686.794998006462, 689.794205385109, 692.792836542916,</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> 695.792195299304, 698.790778974184, 701.790704644168, 704.790168225574,</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> 707.789261680438, 710.788674453657, 713.787207421297, 716.786043303658,</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> 719.784740017888, 722.783523691482, 725.782739693893, 728.781695938105,</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> 731.780295310459, 734.778719103047, 737.778056368816, 740.777014963309,</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> 743.776470087777, 746.774710218241, 749.773897180146, 752.772555359445,</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> 755.771799417720, 758.770328749569, 761.768940347768, 764.768630836408,</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> 767.767399121425</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span>},</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment">// log K = 7</span></div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span>{</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> 91.554623, 93.970317, 96.431113, 98.937264, 101.488909, 104.086010, 106.728780, 109.417062,</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> 112.150914, 114.930279, 117.755065, 120.625143, 123.540431, 126.500927, 129.506371, 132.556551,</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> 135.651450, 138.790477, 141.973357, 145.200176, 148.470504, 151.783478, 155.139376, 158.537455,</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> 161.977357, 165.458477, 168.980630, 172.543258, 176.145951, 179.788203, 183.469266, 187.188166,</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> 190.945533, 194.739618, 198.570460, 202.437447, 206.339379, 210.276276, 214.247092, 218.251243,</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> 222.288169, 226.357728, 230.458810, 234.590263, 238.751826, 242.942859, 247.162518, 251.410098,</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> 255.685517, 259.987202, 264.314569, 268.667458, 273.044873, 277.445418, 281.869296, 286.316796,</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> 290.785471, 295.276055, 299.788143, 304.319743, 308.869691, 313.438842, 318.026761, 322.632499,</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> 327.254588, 331.892954, 336.547483, 341.217702, 345.901880, 350.601214, 355.313731, 360.038868,</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> 364.777348, 369.526476, 374.288795, 379.061811, 383.846122, 388.640850, 393.446218, 398.260691,</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> 403.084626, 407.916053, 412.755659, 417.604951, 422.461448, 427.324128, 432.195028, 437.072269,</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> 441.956190, 446.846167, 451.741463, 456.641868, 461.549478, 466.461280, 471.377098, 476.297446,</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> 481.222717, 486.151860, 491.085033, 496.022133, 500.962856, 505.906586, 510.853868, 515.802981,</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> 520.755460, 525.711123, 530.668833, 535.629910, 540.592334, 545.557764, 550.525455, 555.494082,</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> 560.463996, 565.436164, 570.410847, 575.385933, 580.361996, 585.339352, 590.318151, 595.300216,</div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> 600.281543, 605.264482, 610.250114, 615.236608, 620.222025, 625.208433, 630.195367, 635.183997,</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> 640.172271, 645.162589, 650.153647, 655.144276, 660.133923, 665.123818, 670.115789, 675.109169,</div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> 680.103270, 685.097349, 690.091960, 695.086028, 700.080326, 705.075670, 710.069697, 715.065265,</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> 720.062426, 725.058529, 730.054916, 735.050560, 740.048508, 745.044790, 750.041067, 755.037833,</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> 760.035090, 765.033371, 770.029865, 775.025946, 780.022408, 785.021534, 790.018699, 795.016742,</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> 800.013947, 805.012680, 810.009483, 815.007921, 820.008589, 825.007658, 830.007411, 835.006892,</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> 840.006917, 845.006362, 850.004606, 855.003367, 860.001219, 864.999491, 869.999131, 874.998190,</div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> 879.998460, 884.997482, 889.995952, 894.995130, 899.994555, 904.993474, 909.991434, 914.990519,</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> 919.991564, 924.992234, 929.993901, 934.992310, 939.992013, 944.993341, 949.993576, 954.992981,</div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> 959.993548, 964.993781, 969.993129, 974.994050, 979.994706, 984.994372, 989.994395, 994.995339,</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> 999.995544, 1004.995498, 1009.996864, 1014.997829, 1019.996531, 1024.996724, 1029.997574, 1034.998591,</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> 1039.997807, 1044.998954, 1050.000113, 1055.000633, 1060.000845, 1065.000760, 1070.000907, 1075.001248,</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> 1080.001187, 1084.999775, 1089.999105, 1094.999647, 1100.001983, 1105.003468, 1110.004542, 1115.005170,</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> 1120.006517, 1125.006493, 1130.006837, 1135.008369, 1140.006966, 1145.009225, 1150.008497, 1155.009589,</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> 1160.009558, 1165.011395, 1170.009739, 1175.011131, 1180.013303, 1185.012525, 1190.014190, 1195.016399,</div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> 1200.016087, 1205.016715, 1210.018008, 1215.018108, 1220.019677, 1225.020269, 1230.019468, 1235.020515,</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> 1240.021850, 1245.020961, 1250.019785, 1255.020253, 1260.020623, 1265.020156, 1270.020625, 1275.019028,</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> 1280.019972</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span>},</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment">// log K = 8</span></div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span>{</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> 183.877784, 188.720097, 193.652407, 198.675131, 203.788397, 208.992238, 214.286620, 219.671580,</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> 225.147277, 230.713559, 236.370208, 242.117078, 247.953569, 253.880078, 259.895869, 266.000405,</div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> 272.193694, 278.474457, 284.843102, 291.298228, 297.839692, 304.466434, 311.177471, 317.972674,</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> 324.850719, 331.811076, 338.852902, 345.974709, 353.175880, 360.455237, 367.811613, 375.244484,</div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> 382.752472, 390.334218, 397.988777, 405.714596, 413.510671, 421.376147, 429.308973, 437.308197,</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> 445.372302, 453.500121, 461.690796, 469.942249, 478.253652, 486.623402, 495.049662, 503.532193,</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> 512.068670, 520.658371, 529.299186, 537.990886, 546.732097, 555.520093, 564.355935, 573.235689,</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> 582.159345, 591.126063, 600.133321, 609.181348, 618.267848, 627.392384, 636.552822, 645.748152,</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> 654.977601, 664.239902, 673.534497, 682.859448, 692.213983, 701.598606, 711.009376, 720.446781,</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> 729.910995, 739.397888, 748.908546, 758.443812, 768.000572, 777.577584, 787.174815, 796.791250,</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> 806.427107, 816.079660, 825.748493, 835.435992, 845.136828, 854.854141, 864.583886, 874.328396,</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> 884.085720, 893.855568, 903.637568, 913.431080, 923.234553, 933.049830, 942.873895, 952.707793,</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> 962.551743, 972.402421, 982.263001, 992.131464, 1002.006941, 1011.888460, 1021.777462, 1031.671376,</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> 1041.569600, 1051.476632, 1061.386996, 1071.302834, 1081.224251, 1091.148847, 1101.080297, 1111.013589,</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> 1120.951962, 1130.893360, 1140.838011, 1150.786112, 1160.737100, 1170.689817, 1180.646908, 1190.604979,</div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> 1200.565150, 1210.527894, 1220.492169, 1230.460128, 1240.429764, 1250.401749, 1260.373274, 1270.349608,</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> 1280.325544, 1290.302087, 1300.279074, 1310.257850, 1320.238948, 1330.221273, 1340.203554, 1350.186669,</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> 1360.171345, 1370.156233, 1380.142561, 1390.129535, 1400.119177, 1410.107938, 1420.097171, 1430.087586,</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> 1440.077831, 1450.067996, 1460.060299, 1470.050059, 1480.042995, 1490.035101, 1500.026878, 1510.021128,</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> 1520.014262, 1530.008487, 1540.002895, 1549.996342, 1559.991075, 1569.986665, 1579.981202, 1589.976021,</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> 1599.969512, 1609.964051, 1619.959210, 1629.957092, 1639.953516, 1649.948113, 1659.946715, 1669.945253,</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> 1679.941736, 1689.938651, 1699.937600, 1709.936396, 1719.933608, 1729.931040, 1739.930316, 1749.927141,</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> 1759.922600, 1769.920847, 1779.918614, 1789.915707, 1799.913000, 1809.910958, 1819.908532, 1829.906905,</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> 1839.903410, 1849.904217, 1859.901705, 1869.898815, 1879.898869, 1889.899032, 1899.899113, 1909.896164,</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> 1919.893199, 1929.894515, 1939.894965, 1949.893184, 1959.892164, 1969.890794, 1979.889035, 1989.888005,</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> 1999.888538, 2009.888252, 2019.888976, 2029.890242, 2039.890655, 2049.891065, 2059.891068, 2069.889204,</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> 2079.891120, 2089.892462, 2099.892479, 2109.891814, 2119.893049, 2129.893705, 2139.893471, 2149.894162,</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> 2159.894213, 2169.895041, 2179.895987, 2189.894721, 2199.894028, 2209.896005, 2219.898683, 2229.898673,</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> 2239.898012, 2249.898018, 2259.898215, 2269.899380, 2279.902590, 2289.903144, 2299.902047, 2309.904214,</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> 2319.903812, 2329.904180, 2339.902528, 2349.903057, 2359.903089, 2369.904512, 2379.902563, 2389.905522,</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> 2399.903653, 2409.902313, 2419.904452, 2429.905949, 2439.905059, 2449.904954, 2459.904977, 2469.905111,</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> 2479.904049, 2489.903762, 2499.902022, 2509.904352, 2519.903272, 2529.901643, 2539.900789, 2549.903045,</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> 2559.904334</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span>},</div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">// log K = 9</span></div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span>{</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> 368.528954, 378.224619, 388.100156, 398.155846, 408.391912, 418.808631, 429.406377, 440.185048,</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> 451.144613, 462.284693, 473.604932, 485.105306, 496.784844, 508.643147, 520.679581, 532.893098,</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> 545.282616, 557.848295, 570.587645, 583.500268, 596.584345, 609.838697, 623.261582, 636.851681,</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> 650.607666, 664.527320, 678.608336, 692.849674, 707.248088, 721.803089, 736.511331, 751.372034,</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> 766.381798, 781.538178, 796.839808, 812.283881, 827.867995, 843.588520, 859.444318, 875.432109,</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> 891.550599, 907.795630, 924.165943, 940.657393, 957.268601, 973.995685, 990.837235, 1007.789667,</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> 1024.850025, 1042.016602, 1059.286426, 1076.658199, 1094.126523, 1111.689346, 1129.345589, 1147.092119,</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> 1164.926795, 1182.844471, 1200.846880, 1218.929006, 1237.088281, 1255.322930, 1273.630393, 1292.007269,</div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> 1310.452948, 1328.963430, 1347.538768, 1366.176566, 1384.871299, 1403.626249, 1422.434094, 1441.295238,</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> 1460.208340, 1479.169853, 1498.179265, 1517.234855, 1536.335403, 1555.477305, 1574.659180, 1593.881592,</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> 1613.139378, 1632.433516, 1651.764587, 1671.127255, 1690.519577, 1709.942250, 1729.393153, 1748.871689,</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> 1768.377142, 1787.907209, 1807.464755, 1827.043146, 1846.641976, 1866.263022, 1885.903553, 1905.564908,</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> 1925.240581, 1944.936723, 1964.648221, 1984.375489, 2004.117246, 2023.875053, 2043.644075, 2063.423514,</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> 2083.218689, 2103.026148, 2122.840475, 2142.669046, 2162.505619, 2182.351758, 2202.205963, 2222.068658,</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> 2241.939010, 2261.814547, 2281.701803, 2301.591894, 2321.490728, 2341.393208, 2361.298412, 2381.211528,</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> 2401.132345, 2421.057721, 2440.985510, 2460.916691, 2480.851468, 2500.792645, 2520.738446, 2540.683395,</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> 2560.634603, 2580.586307, 2600.540530, 2620.497170, 2640.458137, 2660.421783, 2680.386186, 2700.352664,</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> 2720.321411, 2740.291944, 2760.264068, 2780.238910, 2800.212546, 2820.185829, 2840.163952, 2860.142145,</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> 2880.120568, 2900.102466, 2920.081981, 2940.062964, 2960.046262, 2980.029101, 3000.012591, 3019.998424,</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> 3039.983637, 3059.969573, 3079.955927, 3099.942114, 3119.930348, 3139.919614, 3159.909130, 3179.899816,</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> 3199.892231, 3219.885316, 3239.878917, 3259.871675, 3279.865195, 3299.856210, 3319.848871, 3339.840385,</div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> 3359.834158, 3379.830660, 3399.826361, 3419.822855, 3439.814714, 3459.813765, 3479.808673, 3499.804339,</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> 3519.797785, 3539.791012, 3559.789885, 3579.785152, 3599.780237, 3619.775480, 3639.772724, 3659.768920,</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> 3679.765735, 3699.766361, 3719.765048, 3739.762845, 3759.761526, 3779.757598, 3799.755719, 3819.751149,</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> 3839.750182, 3859.749673, 3879.749344, 3899.749939, 3919.749060, 3939.748385, 3959.750520, 3979.750055,</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> 3999.750104, 4019.749963, 4039.748453, 4059.746737, 4079.744522, 4099.744430, 4119.741804, 4139.740704,</div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> 4159.742056, 4179.740063, 4199.739155, 4219.741718, 4239.743433, 4259.743115, 4279.743265, 4299.745518,</div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> 4319.746682, 4339.750491, 4359.748549, 4379.747226, 4399.750319, 4419.750379, 4439.752339, 4459.750561,</div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> 4479.750612, 4499.747862, 4519.750693, 4539.747476, 4559.749051, 4579.750603, 4599.750089, 4619.754781,</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> 4639.755536, 4659.758879, 4679.762145, 4699.762199, 4719.763886, 4739.765081, 4759.765681, 4779.765427,</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> 4799.767582, 4819.769915, 4839.770107, 4859.769398, 4879.768976, 4899.768288, 4919.768786, 4939.768607,</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> 4959.772822, 4979.772833, 4999.775808, 5019.773468, 5039.776181, 5059.770860, 5079.773006, 5099.773136,</div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> 5119.772474</div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span>},</div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="comment">// log K = 10</span></div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span>{</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> 737.833738, 757.236338, 776.997875, 797.119465, 817.602058, 838.445349, 859.650320, 881.216437,</div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> 903.143414, 925.430957, 948.079220, 971.086231, 994.451449, 1018.173846, 1042.251928, 1066.683804,</div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> 1091.467648, 1116.601416, 1142.083017, 1167.909918, 1194.079097, 1220.588887, 1247.435099, 1274.614860,</div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> 1302.125360, 1329.962942, 1358.123177, 1386.601609, 1415.396299, 1444.501692, 1473.913256, 1503.628515,</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> 1533.642054, 1563.948888, 1594.544067, 1625.424305, 1656.582169, 1688.016543, 1719.718553, 1751.685990,</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> 1783.912130, 1816.393610, 1849.122123, 1882.095124, 1915.305647, 1948.748605, 1982.419843, 2016.313904,</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> 2050.422277, 2084.742618, 2119.270601, 2153.998538, 2188.920843, 2224.034736, 2259.333960, 2294.812594,</div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> 2330.467059, 2366.291844, 2402.281356, 2438.428954, 2474.734330, 2511.187839, 2547.786319, 2584.527356,</div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> 2621.406814, 2658.418551, 2695.554270, 2732.812564, 2770.190157, 2807.682744, 2845.287138, 2882.995251,</div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> 2920.807982, 2958.719996, 2996.728771, 3034.826885, 3073.014082, 3111.287116, 3149.642093, 3188.073159,</div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> 3226.577352, 3265.156836, 3303.803738, 3342.515111, 3381.291514, 3420.130671, 3459.024315, 3497.974631,</div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> 3536.978221, 3576.034737, 3615.138610, 3654.285859, 3693.480455, 3732.715296, 3771.991792, 3811.305300,</div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> 3850.654870, 3890.041152, 3929.457167, 3968.905021, 4008.381466, 4047.886976, 4087.419414, 4126.978997,</div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> 4166.562624, 4206.166726, 4245.793284, 4285.445151, 4325.113012, 4364.802795, 4404.506274, 4444.228475,</div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> 4483.965191, 4523.719569, 4563.487708, 4603.267460, 4643.060387, 4682.865430, 4722.680718, 4762.503248,</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> 4802.341326, 4842.185529, 4882.039088, 4921.900432, 4961.772625, 5001.649566, 5041.534380, 5081.425809,</div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> 5121.323013, 5161.224908, 5201.130560, 5241.044625, 5280.962456, 5320.882373, 5360.810007, 5400.740058,</div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> 5440.673843, 5480.606748, 5520.547394, 5560.493520, 5600.438100, 5640.383853, 5680.335386, 5720.292400,</div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> 5760.250576, 5800.212705, 5840.172984, 5880.134991, 5920.097923, 5960.060294, 6000.031177, 6040.003398,</div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> 6079.981696, 6119.954349, 6159.929074, 6199.908569, 6239.886163, 6279.863659, 6319.838261, 6359.815405,</div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> 6399.795170, 6439.777225, 6479.755885, 6519.738857, 6559.723169, 6599.708549, 6639.695186, 6679.679788,</div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> 6719.663289, 6759.651052, 6799.634129, 6839.624763, 6879.615013, 6919.605584, 6959.591310, 6999.586006,</div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> 7039.577399, 7079.565236, 7119.557222, 7159.548481, 7199.533025, 7239.519648, 7279.511781, 7319.507639,</div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> 7359.506105, 7399.497488, 7439.494944, 7479.491545, 7519.488415, 7559.480534, 7599.475646, 7639.470315,</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> 7679.468730, 7719.460928, 7759.455834, 7799.455686, 7839.451758, 7879.446841, 7919.443884, 7959.444138,</div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> 7999.443141, 8039.446339, 8079.445285, 8119.444120, 8159.443157, 8199.446480, 8239.438893, 8279.437597,</div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> 8319.439714, 8359.441566, 8399.440754, 8439.439156, 8479.440112, 8519.442365, 8559.444795, 8599.444497,</div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> 8639.446714, 8679.449177, 8719.447620, 8759.443423, 8799.445995, 8839.446170, 8879.449622, 8919.450486,</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> 8959.450372, 8999.449731, 9039.448449, 9079.452579, 9119.451596, 9159.454020, 9199.456651, 9239.460902,</div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> 9279.460419, 9319.461322, 9359.464611, 9399.467790, 9439.471448, 9479.468426, 9519.462982, 9559.464881,</div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> 9599.462983, 9639.461706, 9679.457284, 9719.457023, 9759.455648, 9799.458786, 9839.456980, 9879.457411,</div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> 9919.454971, 9959.451735, 9999.451916, 10039.443939, 10079.435325, 10119.432142, 10159.431313, 10199.431306,</div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> 10239.429671</div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span>},</div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="comment">// log K = 11</span></div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span>{</div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> 1476.444530, 1515.260638, 1554.794859, 1595.048761, 1636.023652, 1677.720065, 1720.138513, 1763.279158,</div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> 1807.141823, 1851.724811, 1897.027530, 1943.048153, 1989.784818, 2037.234835, 2085.395149, 2134.263580,</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> 2183.834818, 2234.105548, 2285.071077, 2336.726064, 2389.065940, 2442.084276, 2495.776521, 2550.134177,</div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> 2605.153465, 2660.825522, 2717.142881, 2774.098631, 2831.683790, 2889.889911, 2948.711233, 3008.137464,</div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> 3068.158605, 3128.766926, 3189.951984, 3251.704129, 3314.013826, 3376.873018, 3440.270569, 3504.194851,</div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> 3568.636295, 3633.586039, 3699.031630, 3764.962925, 3831.371336, 3898.245744, 3965.574384, 4033.345701,</div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> 4101.550888, 4170.180686, 4239.221393, 4308.664143, 4378.497100, 4448.712735, 4519.296212, 4590.243535,</div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> 4661.538747, 4733.174738, 4805.142002, 4877.427081, 4950.019513, 5022.915001, 5096.098561, 5169.567185,</div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> 5243.312012, 5317.314578, 5391.572253, 5466.077564, 5540.821377, 5615.792025, 5690.985894, 5766.392174,</div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> 5842.007403, 5917.816734, 5993.815607, 6069.999957, 6146.362662, 6222.895187, 6299.592875, 6376.440778,</div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> 6453.443173, 6530.588182, 6607.874560, 6685.288536, 6762.829840, 6840.490840, 6918.272948, 6996.164556,</div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> 7074.161694, 7152.259404, 7230.451098, 7308.737035, 7387.113244, 7465.575350, 7544.120230, 7622.733447,</div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> 7701.427750, 7780.188044, 7859.016102, 7937.904850, 8016.853624, 8095.860379, 8174.919884, 8254.034842,</div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> 8333.197794, 8412.405307, 8491.657429, 8570.946804, 8650.278289, 8729.648657, 8809.056098, 8888.496764,</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> 8967.966663, 9047.466051, 9126.993636, 9206.547289, 9286.127523, 9365.733732, 9445.361201, 9525.008810,</div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> 9604.680107, 9684.363532, 9764.066435, 9843.787987, 9923.523567, 10003.272886, 10083.037524, 10162.811803,</div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> 10242.597755, 10322.402415, 10402.216522, 10482.042584, 10561.877077, 10641.722187, 10721.570740, 10801.435848,</div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> 10881.301249, 10961.178474, 11041.059765, 11120.951444, 11200.845806, 11280.746075, 11360.652145, 11440.567398,</div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> 11520.476709, 11600.395391, 11680.316855, 11760.241900, 11840.170134, 11920.103548, 12000.038206, 12079.975425,</div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> 12159.912459, 12239.857191, 12319.802744, 12399.754385, 12479.707055, 12559.658981, 12639.614004, 12719.566502,</div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> 12799.526877, 12879.488833, 12959.451231, 13039.416480, 13119.388158, 13199.360789, 13279.334923, 13359.298927,</div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> 13439.261641, 13519.235871, 13599.204919, 13679.181082, 13759.157391, 13839.137425, 13919.112545, 13999.096522,</div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> 14079.082789, 14159.060487, 14239.040581, 14319.025236, 14399.006995, 14478.994078, 14558.980576, 14638.962774,</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> 14718.952192, 14798.938522, 14878.931501, 14958.919062, 15038.907891, 15118.897247, 15198.889129, 15278.881057,</div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> 15358.873272, 15438.867627, 15518.861931, 15598.858206, 15678.850014, 15758.849382, 15838.847872, 15918.837658,</div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> 15998.837920, 16078.831305, 16158.827345, 16238.815546, 16318.817302, 16398.814389, 16478.815820, 16558.811634,</div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> 16638.808126, 16718.807170, 16798.805652, 16878.813389, 16958.806543, 17038.807885, 17118.813146, 17198.813752,</div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> 17278.817574, 17358.820511, 17438.819443, 17518.814262, 17598.815511, 17678.814160, 17758.816726, 17838.817584,</div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> 17918.814197, 17998.821276, 18078.822342, 18158.828474, 18238.822064, 18318.826732, 18398.827758, 18478.827319,</div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> 18558.834153, 18638.835651, 18718.839105, 18798.840903, 18878.836463, 18958.836015, 19038.836351, 19118.832583,</div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> 19198.829856, 19278.822953, 19358.824866, 19438.823697, 19518.826538, 19598.826954, 19678.831393, 19758.822279,</div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> 19838.818757, 19918.808247, 19998.804516, 20078.809201, 20158.808900, 20238.806398, 20318.798516, 20398.802224,</div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> 20478.803179</div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span>},</div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span><span class="comment">// log K = 12</span></div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span>{</div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> 2953.666722, 3031.310137, 3110.389526, 3190.908699, 3272.865410, 3356.267166, 3441.114376, 3527.404284,</div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> 3615.136846, 3704.310976, 3794.924283, 3886.973846, 3980.451903, 4075.355844, 4171.681168, 4269.423939,</div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> 4368.569738, 4469.111760, 4571.043603, 4674.356370, 4779.038117, 4885.076002, 4992.460659, 5101.176875,</div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> 5211.214098, 5322.553631, 5435.184633, 5549.088369, 5664.258175, 5780.673987, 5898.312682, 6017.158593,</div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> 6137.195815, 6258.397951, 6380.761679, 6504.261630, 6628.870413, 6754.585867, 6881.374325, 7009.206926,</div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> 7138.080376, 7267.979175, 7398.866805, 7530.722851, 7663.531580, 7797.269872, 7931.907340, 8067.451667,</div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> 8203.855692, 8341.091306, 8479.155031, 8618.026003, 8757.682272, 8898.095612, 9039.253787, 9181.124777,</div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> 9323.694329, 9466.944202, 9610.861899, 9755.403639, 9900.578346, 10046.356477, 10192.718770, 10339.635914,</div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> 10487.081762, 10635.066232, 10783.560130, 10932.549371, 11082.024055, 11231.949071, 11382.332885, 11533.122831,</div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> 11684.327555, 11835.935533, 11987.926999, 12140.281619, 12292.994375, 12446.046449, 12599.411083, 12753.088314,</div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> 12907.079745, 13061.355923, 13215.895621, 13370.722085, 13525.795736, 13681.095971, 13836.645692, 13992.405906,</div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> 14148.380716, 14304.566860, 14460.959382, 14617.539754, 14774.296125, 14931.214508, 15088.271748, 15245.493870,</div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> 15402.867309, 15560.380994, 15718.035423, 15875.801492, 16033.687891, 16191.701231, 16349.808763, 16508.026001,</div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> 16666.336068, 16824.745049, 16983.259302, 17141.848044, 17300.504517, 17459.240272, 17618.060296, 17776.914688,</div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> 17935.848010, 18094.852645, 18253.914288, 18413.023567, 18572.168358, 18731.376016, 18890.631505, 19049.948196,</div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> 19209.279260, 19368.638871, 19528.043860, 19687.498901, 19846.941765, 20006.443084, 20165.973535, 20325.525957,</div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> 20485.109520, 20644.729917, 20804.363876, 20964.021778, 21123.698687, 21283.379344, 21443.080536, 21602.821439,</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> 21762.568135, 21922.305338, 22082.065878, 22241.856145, 22401.629436, 22561.435266, 22721.262644, 22881.080478,</div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> 23040.916036, 23200.734053, 23360.583255, 23520.433188, 23680.275065, 23840.132678, 24000.012847, 24159.886135,</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> 24319.788338, 24479.654024, 24639.540316, 24799.466449, 24959.369335, 25119.276072, 25279.186502, 25439.091982,</div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> 25599.020083, 25758.930671, 25918.847522, 26078.773060, 26238.704021, 26398.647566, 26558.603366, 26718.539855,</div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> 26878.464425, 27038.402892, 27198.344989, 27358.270906, 27518.203448, 27678.169545, 27838.133625, 27998.111630,</div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> 28158.064264, 28318.032491, 28477.994153, 28637.950838, 28797.910362, 28957.884994, 29117.861910, 29277.814384,</div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> 29437.774223, 29597.762256, 29757.729819, 29917.688497, 30077.675371, 30237.667941, 30397.639431, 30557.644527,</div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> 30717.622991, 30877.622641, 31037.598941, 31197.601527, 31357.599118, 31517.585221, 31677.569983, 31837.556138,</div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> 31997.527880, 32157.500622, 32317.491709, 32477.504936, 32637.501123, 32797.516330, 32957.547336, 33117.541765,</div>
+<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> 33277.561207, 33437.554332, 33597.564988, 33757.565321, 33917.561180, 34077.580598, 34237.597132, 34397.598246,</div>
+<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> 34557.617536, 34717.623318, 34877.649722, 35037.645029, 35197.681143, 35357.700478, 35517.701804, 35677.734383,</div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> 35837.736494, 35997.737103, 36157.732045, 36317.741539, 36477.735602, 36637.761491, 36797.742508, 36957.734137,</div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> 37117.742952, 37277.789218, 37437.793798, 37597.779066, 37757.796449, 37917.794116, 38077.804399, 38237.797507,</div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> 38397.788049, 38557.768583, 38717.768279, 38877.752553, 39037.747349, 39197.737646, 39357.774395, 39517.752643,</div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> 39677.753347, 39837.740038, 39997.719486, 40157.709578, 40317.708657, 40477.719261, 40637.726978, 40797.711139,</div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> 40957.707784</div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span>},</div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span><span class="comment">// log K = 13</span></div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span>{</div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> 5908.111420, 6063.410343, 6221.578483, 6382.623803, 6546.553966, 6713.369171, 6883.070010, 7055.656719,</div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> 7231.129758, 7409.486672, 7590.720089, 7774.822139, 7961.786850, 8151.601206, 8344.261218, 8539.750086,</div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> 8738.048786, 8939.141702, 9143.011205, 9349.645220, 9559.003557, 9771.078383, 9985.846791, 10203.277103,</div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> 10423.349219, 10646.031323, 10871.293001, 11099.111735, 11329.434411, 11562.255804, 11797.522109, 12035.204106,</div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> 12275.263649, 12517.670237, 12762.388671, 13009.375491, 13258.587519, 13510.006825, 13763.564399, 14019.227089,</div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> 14276.975295, 14536.745792, 14798.511796, 15062.215057, 15327.806593, 15595.257499, 15864.529774, 16135.586770,</div>
+<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> 16408.362074, 16682.849583, 16958.977019, 17236.708221, 17515.990972, 17796.798914, 18079.096585, 18362.834517,</div>
+<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> 18647.959152, 18934.452073, 19222.251998, 19511.366053, 19801.717928, 20093.269020, 20385.960319, 20679.772736,</div>
+<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> 20974.698498, 21270.684814, 21567.671010, 21865.649193, 22164.581341, 22464.423293, 22765.172894, 23066.785452,</div>
+<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> 23369.201089, 23672.387494, 23976.354000, 24281.072155, 24586.465328, 24892.557323, 25199.303712, 25506.654130,</div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> 25814.626835, 26123.148009, 26432.247046, 26741.889610, 27052.042135, 27362.685181, 27673.761784, 27985.292246,</div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> 28297.219809, 28609.572368, 28922.317633, 29235.448741, 29548.944253, 29862.766175, 30176.910610, 30491.363107,</div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> 30806.103787, 31121.126024, 31436.412153, 31751.975134, 32067.737444, 32383.768560, 32700.017044, 33016.458300,</div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> 33333.101934, 33649.904492, 33966.923435, 34284.105041, 34601.429152, 34918.876076, 35236.481998, 35554.235511,</div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> 35872.093847, 36190.101572, 36508.190892, 36826.420800, 37144.739624, 37463.138566, 37781.598984, 38100.191087,</div>
+<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> 38418.846511, 38737.587005, 39056.391321, 39375.255819, 39694.182864, 40013.173503, 40332.221146, 40651.311460,</div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> 40970.465534, 41289.697002, 41608.913381, 41928.242461, 42247.585089, 42566.988678, 42886.409594, 43205.849396,</div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> 43525.322840, 43844.784209, 44164.327769, 44483.869861, 44803.383648, 45122.975593, 45442.593765, 45762.258110,</div>
+<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> 46081.937012, 46401.605265, 46721.295022, 47041.004034, 47360.695978, 47680.435451, 48000.192231, 48319.953839,</div>
+<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> 48639.726508, 48959.506239, 49279.318744, 49599.117846, 49918.951926, 50238.772730, 50558.620076, 50878.455501,</div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> 51198.285377, 51518.135316, 51837.976134, 52157.809260, 52477.635805, 52797.492063, 53117.368983, 53437.262930,</div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> 53757.142921, 54077.026859, 54396.907345, 54716.835955, 55036.713062, 55356.640827, 55676.537369, 55996.488865,</div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> 56316.420754, 56636.355217, 56956.329593, 57276.245282, 57596.202473, 57916.159021, 58236.077854, 58556.010303,</div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> 58875.938110, 59195.924442, 59515.871947, 59835.838035, 60155.809948, 60475.808167, 60795.765545, 61115.766398,</div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> 61435.725825, 61755.677959, 62075.688445, 62395.647263, 62715.609853, 63035.591787, 63355.588060, 63675.579841,</div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> 63995.560980, 64315.552298, 64635.582956, 64955.538779, 65275.512154, 65595.490993, 65915.477332, 66235.470693,</div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> 66555.483426, 66875.455452, 67195.455039, 67515.435090, 67835.418300, 68155.401870, 68475.404599, 68795.452423,</div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> 69115.474466, 69435.450344, 69755.439668, 70075.479966, 70395.468204, 70715.475957, 71035.472807, 71355.513734,</div>
+<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> 71675.486047, 71995.450475, 72315.443410, 72635.425138, 72955.481520, 73275.482426, 73595.476688, 73915.469540,</div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> 74235.426693, 74555.381683, 74875.368981, 75195.429157, 75515.480428, 75835.517265, 76155.557945, 76475.556134,</div>
+<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> 76795.579451, 77115.605924, 77435.604178, 77755.572770, 78075.576305, 78395.562526, 78715.547599, 79035.551674,</div>
+<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> 79355.540615, 79675.575726, 79995.547586, 80315.544278, 80635.546227, 80955.555617, 81275.540591, 81595.549538,</div>
+<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> 81915.550079</div>
+<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span>},</div>
+<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span><span class="comment">// log K = 14</span></div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span>{</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> 11817.000969, 12127.609164, 12443.958867, 12766.059919, 13093.926347, 13427.563687, 13766.972021, 14112.158775,</div>
+<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> 14463.118632, 14819.833221, 15182.310838, 15550.514164, 15924.452624, 16304.097682, 16689.414687, 17080.390156,</div>
+<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> 17476.985675, 17879.171048, 18286.913146, 18700.171223, 19118.909859, 19543.074108, 19972.606221, 20407.466793,</div>
+<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> 20847.600290, 21292.965548, 21743.489087, 22199.109276, 22659.760749, 23125.379711, 23595.914325, 24071.277989,</div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> 24551.407611, 25036.233071, 25525.671155, 26019.641791, 26518.074136, 27020.885189, 27528.004081, 28039.347478,</div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> 28554.818908, 29074.343878, 29597.869471, 30125.254970, 30656.449891, 31191.351228, 31729.908970, 32272.003587,</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> 32817.586623, 33366.531359, 33918.769390, 34474.232727, 35032.798601, 35594.423192, 36159.024745, 36726.469786,</div>
+<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> 37296.712851, 37869.686035, 38445.278953, 39023.442285, 39604.084062, 40187.147209, 40772.503600, 41360.148758,</div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> 41949.978377, 42541.929077, 43135.892496, 43731.836459, 44329.664552, 44929.334224, 45530.772542, 46133.919152,</div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> 46738.746702, 47345.120215, 47953.051656, 48562.469011, 49173.281212, 49785.453501, 50398.908717, 51013.645932,</div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> 51629.563526, 52246.635759, 52864.820434, 53484.057447, 54104.303719, 54725.504675, 55347.680019, 55970.744363,</div>
+<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> 56594.688890, 57219.458967, 57844.949821, 58471.197998, 59098.180259, 59725.774793, 60354.058215, 60982.962558,</div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> 61612.427469, 62242.448368, 62873.013426, 63504.106743, 64135.672742, 64767.665213, 65400.082326, 66032.949331,</div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> 66666.219558, 67299.817447, 67933.801373, 68568.092593, 69202.717636, 69837.643507, 70472.852133, 71108.305774,</div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> 71744.023189, 72380.016332, 73016.168118, 73652.560876, 74289.210741, 74926.041959, 75563.048434, 76200.207724,</div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> 76837.505542, 77474.999283, 78112.608284, 78750.375633, 79388.254423, 80026.267074, 80664.419197, 81302.602941,</div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> 81940.909776, 82579.321050, 83217.801329, 83856.420605, 84495.098999, 85133.832545, 85772.588001, 86411.448347,</div>
+<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> 87050.399262, 87689.358100, 88328.463714, 88967.516990, 89606.618839, 90245.788934, 90884.986443, 91524.243962,</div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> 92163.523370, 92802.835394, 93442.198790, 94081.633840, 94721.043838, 95360.482304, 96000.002974, 96639.518339,</div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> 97279.069377, 97918.584802, 98558.189888, 99197.773242, 99837.390001, 100476.994827, 101116.655652, 101756.293703,</div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> 102395.977437, 103035.662337, 103675.360919, 104315.063845, 104954.783621, 105594.504004, 106234.229823, 106874.056079,</div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> 107513.846129, 108153.562857, 108793.393622, 109433.202056, 110072.966808, 110712.777026, 111352.577741, 111992.441538,</div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> 112632.256702, 113272.083743, 113911.943484, 114551.818432, 115191.687411, 115831.584194, 116471.522453, 117111.338979,</div>
+<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> 117751.192777, 118391.070556, 119030.991702, 119670.888488, 120310.801509, 120950.761000, 121590.691826, 122230.618394,</div>
+<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> 122870.618097, 123510.616056, 124150.552363, 124790.488946, 125430.445483, 126070.428297, 126710.409643, 127350.398562,</div>
+<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> 127990.397846, 128630.413222, 129270.354937, 129910.365912, 130550.332174, 131190.259646, 131830.280970, 132470.304278,</div>
+<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> 133110.295205, 133750.312426, 134390.364847, 135030.321000, 135670.319926, 136310.335570, 136950.324790, 137590.338289,</div>
+<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> 138230.368657, 138870.374084, 139510.447896, 140150.468353, 140790.441338, 141430.438424, 142070.440787, 142710.431348,</div>
+<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> 143350.433770, 143990.493350, 144630.548409, 145270.549935, 145910.530486, 146550.488808, 147190.510290, 147830.509426,</div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> 148470.575641, 149110.541845, 149750.592427, 150390.634921, 151030.706500, 151670.646574, 152310.624482, 152950.686127,</div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> 153590.659153, 154230.646236, 154870.720079, 155510.614028, 156150.596142, 156790.659641, 157430.633386, 158070.649047,</div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> 158710.591350, 159350.585980, 159990.557711, 160630.530183, 161270.499427, 161910.521323, 162550.516603, 163190.482792,</div>
+<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> 163830.422631</div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span>},</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span><span class="comment">// log K = 15</span></div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span>{</div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> 23634.780143, 24256.008404, 24888.717596, 25532.934303, 26188.680791, 26855.965949, 27534.798395, 28225.179199,</div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> 28927.099457, 29640.545847, 30365.501013, 31101.936533, 31849.825685, 32609.111850, 33379.755958, 34161.706474,</div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> 34954.912131, 35759.291030, 36574.778310, 37401.280667, 38238.742234, 39087.060449, 39946.133936, 40815.861824,</div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> 41696.151280, 42586.877221, 43487.927203, 44399.169293, 45320.460825, 46251.693279, 47192.741847, 48143.464216,</div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> 49103.716679, 50073.349113, 51052.208336, 52040.138165, 53036.993192, 54042.604241, 55056.838449, 56079.501709,</div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> 57110.434199, 58149.484623, 59196.455710, 60251.226284, 61313.593108, 62383.385277, 63460.484960, 64544.666337,</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> 65635.763495, 66733.629361, 67838.096489, 68948.987037, 70066.117363, 71189.338133, 72318.464573, 73453.423815,</div>
+<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> 74593.923438, 75739.864335, 76891.058098, 78047.391508, 79208.654009, 80374.753680, 81545.514022, 82720.817799,</div>
+<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> 83900.405263, 85084.273208, 86272.263471, 87464.134340, 88659.829437, 89859.204804, 91062.115479, 92268.425863,</div>
+<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> 93478.041907, 94690.804589, 95906.647693, 97125.398400, 98347.018145, 99571.305992, 100798.274503, 102027.737913,</div>
+<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> 103259.574749, 104493.727918, 105730.035415, 106968.465700, 108208.988306, 109451.445144, 110695.748927, 111941.827269,</div>
+<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> 113189.666448, 114439.093665, 115690.116530, 116942.608958, 118196.501294, 119451.722652, 120708.276299, 121966.046247,</div>
+<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> 123225.027480, 124485.082349, 125746.201609, 127008.357433, 128271.416054, 129535.417336, 130800.297278, 132066.008820,</div>
+<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> 133332.483576, 134599.733640, 135867.681429, 137136.303792, 138405.538969, 139675.413251, 140945.839375, 142216.787412,</div>
+<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> 143488.232199, 144760.234976, 146032.650196, 147305.459198, 148578.703708, 149852.356585, 151126.347770, 152400.641475,</div>
+<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> 153675.275168, 154950.179904, 156225.390849, 157500.864126, 158776.585926, 160052.504602, 161328.716398, 162605.171897,</div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> 163881.825931, 165158.677102, 166435.646121, 167712.814846, 168990.136047, 170267.619890, 171545.238277, 172823.011460,</div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> 174100.890250, 175378.821293, 176656.920467, 177935.093547, 179213.318173, 180491.692642, 181770.130424, 183048.727206,</div>
+<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> 184327.217835, 185605.921891, 186884.657773, 188163.418059, 189442.221838, 190721.122201, 192000.068271, 193279.087882,</div>
+<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> 194558.139554, 195837.195523, 197116.400538, 198395.612565, 199674.831001, 200954.101970, 202233.365695, 203512.639968,</div>
+<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> 204792.003319, 206071.379608, 207350.730914, 208630.080321, 209909.544216, 211189.014497, 212468.508049, 213748.055445,</div>
+<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> 215027.584964, 216307.216078, 217586.896296, 218866.477232, 220146.109506, 221425.767458, 222705.465633, 223985.129542,</div>
+<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> 225264.797531, 226544.544335, 227824.304232, 229104.031191, 230383.739676, 231663.424684, 232943.198829, 234222.906969,</div>
+<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> 235502.669185, 236782.475696, 238062.262723, 239342.090234, 240622.002668, 241901.911022, 243181.742902, 244461.690551,</div>
+<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> 245741.531359, 247021.432644, 248301.277604, 249581.168404, 250861.094078, 252141.038818, 253421.065594, 254701.020169,</div>
+<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> 255980.887518, 257260.848328, 258540.873565, 259820.905666, 261100.908594, 262380.854763, 263660.862699, 264940.834842,</div>
+<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> 266220.775656, 267500.745402, 268780.761926, 270060.823540, 271340.798715, 272620.823081, 273900.881190, 275180.928531,</div>
+<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> 276460.914606, 277740.919081, 279020.967358, 280301.002010, 281581.054314, 282861.097638, 284141.109728, 285421.181335,</div>
+<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> 286701.182750, 287981.231437, 289261.342952, 290541.328315, 291821.320901, 293101.395969, 294381.402286, 295661.374812,</div>
+<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> 296941.357112, 298221.462446, 299501.443884, 300781.429735, 302061.512800, 303341.459364, 304621.530042, 305901.507763,</div>
+<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> 307181.541613, 308461.506346, 309741.474814, 311021.458944, 312301.373851, 313581.258984, 314861.222655, 316141.192042,</div>
+<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> 317421.179698, 318701.162346, 319981.143104, 321261.185706, 322541.120379, 323821.065555, 325100.961639, 326380.920540,</div>
+<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> 327660.786948</div>
+<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span>},</div>
+<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span><span class="comment">// log K = 16</span></div>
+<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span>{</div>
+<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> 47270.338530, 48512.804588, 49778.235006, 51066.679846, 52378.178287, 53712.756179, 55070.430016, 56451.198432,</div>
+<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> 57855.044557, 59281.941569, 60731.855114, 62204.727445, 63700.498656, 65219.087806, 66760.381754, 68324.278827,</div>
+<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> 69910.681844, 71519.442760, 73150.426782, 74803.469853, 76478.400456, 78175.038414, 79893.184924, 81632.639705,</div>
+<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> 83393.214587, 85174.662642, 86976.739912, 88799.210643, 90641.829434, 92504.355605, 94386.478165, 96287.925119,</div>
+<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> 98208.422967, 100147.694840, 102105.387259, 104081.226364, 106074.916897, 108086.136683, 110114.560800, 112159.857579,</div>
+<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> 114221.724675, 116299.785348, 118393.731853, 120503.258946, 122627.958417, 124767.540962, 126921.668848, 129090.003274,</div>
+<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> 131272.204811, 133467.918004, 135676.870426, 137898.595565, 140132.829694, 142379.269230, 144637.536478, 146907.321805,</div>
+<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> 149188.299797, 151480.151490, 153782.571459, 156095.292246, 158417.834407, 160749.983694, 163091.465145, 165441.984077,</div>
+<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> 167801.236994, 170168.903670, 172544.767987, 174928.494171, 177319.918928, 179718.624717, 182124.426670, 184537.056818,</div>
+<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> 186956.260737, 189381.869001, 191813.551321, 194251.107949, 196694.280093, 199142.910671, 201596.663557, 204055.453662,</div>
+<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> 206519.090402, 208987.322132, 211460.079506, 213936.962995, 216417.945039, 218902.907481, 221391.594168, 223883.857806,</div>
+<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> 226379.519239, 228878.478995, 231380.515508, 233885.422831, 236393.251620, 238903.734661, 241416.885791, 243932.462444,</div>
+<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> 246450.361381, 248970.497360, 251492.768859, 254017.059221, 256543.244066, 259071.366198, 261601.098326, 264132.472390,</div>
+<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> 266665.477130, 269200.003838, 271735.898262, 274273.128446, 276811.699617, 279351.334667, 281892.176977, 284434.126935,</div>
+<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> 286977.141855, 289520.993664, 292065.816286, 294611.452586, 297157.986206, 299705.252956, 302253.226506, 304801.859484,</div>
+<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> 307351.170990, 309901.148395, 312451.594894, 315002.530644, 317553.961670, 320105.951895, 322658.553440, 325211.299379,</div>
+<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> 327764.626147, 330318.311300, 332872.331048, 335426.696106, 337981.358498, 340536.275072, 343091.446562, 345646.972942,</div>
+<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> 348202.757347, 350758.693296, 353314.808579, 355871.203754, 358427.702337, 360984.491079, 363541.449032, 366098.493281,</div>
+<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> 368655.687887, 371213.030472, 373770.561193, 376328.233445, 378886.001706, 381443.937538, 384001.856504, 386559.857503,</div>
+<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> 389117.926075, 391676.219835, 394234.530250, 396792.812601, 399351.291660, 401909.794770, 404468.330377, 407026.964781,</div>
+<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> 409585.614496, 412144.407471, 414703.175858, 417261.980659, 419820.958264, 422379.863083, 424938.751186, 427497.927620,</div>
+<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> 430056.993719, 432616.066348, 435175.266190, 437734.382772, 440293.531277, 442852.711332, 445412.016423, 447971.502143,</div>
+<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> 450530.798765, 453090.167199, 455649.502729, 458208.951251, 460768.459694, 463328.053373, 465887.570627, 468447.239271,</div>
+<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> 471006.792818, 473566.544068, 476126.194227, 478685.887605, 481245.577573, 483805.348711, 486365.028302, 488924.844568,</div>
+<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> 491484.612666, 494044.321666, 496604.011864, 499163.799789, 501723.629793, 504283.493711, 506843.290195, 509403.157856,</div>
+<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> 511962.990320, 514522.941350, 517082.791953, 519642.848656, 522202.833761, 524762.686522, 527322.632758, 529882.529037,</div>
+<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> 532442.420851, 535002.422317, 537562.386309, 540122.357425, 542682.434171, 545242.468829, 547802.466694, 550362.492718,</div>
+<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> 552922.461624, 555482.539495, 558042.531431, 560602.467437, 563162.648952, 565722.750610, 568282.702877, 570842.810092,</div>
+<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> 573402.917604, 575962.999235, 578523.081937, 581083.162584, 583643.265455, 586203.287883, 588763.260931, 591323.292027,</div>
+<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> 593883.252456, 596443.273935, 599003.353442, 601563.492606, 604123.421135, 606683.438234, 609243.605174, 611803.638038,</div>
+<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> 614363.628593, 616923.690580, 619483.675256, 622043.744171, 624603.673246, 627163.577236, 629723.677960, 632283.670157,</div>
+<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> 634843.692958, 637403.576097, 639963.511752, 642523.482942, 645083.419327, 647643.330711, 650203.272467, 652763.290376,</div>
+<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> 655323.267522</div>
+<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span>},</div>
+<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span><span class="comment">// log K = 17</span></div>
+<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span>{</div>
+<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> 94541.455324, 97026.403245, 99557.280165, 102134.178452, 104757.187033, 107426.362674, 110141.726029, 112903.278005,</div>
+<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> 115710.975458, 118564.785344, 121464.629896, 124410.377345, 127401.910279, 130439.087070, 133521.683723, 136649.499031,</div>
+<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> 139822.321627, 143039.848320, 146301.785984, 149607.844773, 152957.695333, 156350.945326, 159787.233040, 163266.157476,</div>
+<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> 166787.301371, 170350.201319, 173954.353438, 177599.302692, 181284.526367, 185009.507089, 188773.757457, 192576.638207,</div>
+<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> 196417.619925, 200296.089540, 204211.494530, 208163.221220, 212150.613086, 216173.056150, 220229.879308, 224320.462264,</div>
+<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> 228444.146459, 232600.284426, 236788.187347, 241007.264352, 245256.725247, 249535.938618, 253844.217048, 258180.876528,</div>
+<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> 262545.282090, 266936.686787, 271354.453768, 275797.958112, 280266.429404, 284759.298770, 289275.861948, 293815.386243,</div>
+<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> 298377.390708, 302961.087179, 307565.895452, 312191.173759, 316836.362522, 321500.721532, 326183.652758, 330884.723656,</div>
+<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> 335603.197219, 340338.617624, 345090.316855, 349857.860719, 354640.538362, 359438.001710, 364249.638745, 369074.940533,</div>
+<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> 373913.351331, 378764.438864, 383627.767868, 388502.854215, 393389.259584, 398286.483436, 403194.238263, 408111.948151,</div>
+<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> 413039.292303, 417975.909674, 422921.304084, 427875.195485, 432837.200959, 437807.062429, 442784.399966, 447768.726662,</div>
+<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> 452760.032525, 457757.794185, 462761.810279, 467771.737196, 472787.226777, 477808.283249, 482834.411114, 487865.521166,</div>
+<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> 492901.275392, 497941.616150, 502986.164281, 508034.749030, 513087.210697, 518143.298172, 523202.692981, 528265.454984,</div>
+<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> 533331.384435, 538400.437943, 543472.278711, 548546.790172, 553623.737338, 558703.047575, 563784.666463, 568868.524932,</div>
+<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> 573954.251207, 579041.935016, 584131.557779, 589222.910016, 594315.786547, 599410.314112, 604506.227555, 609603.610432,</div>
+<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> 614702.124262, 619801.918486, 624902.903258, 630005.085347, 635107.990499, 640211.847431, 645316.755403, 650422.424613,</div>
+<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> 655529.009211, 660636.166872, 665744.170495, 670852.806947, 675962.099161, 681072.042796, 686182.458370, 691293.269596,</div>
+<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> 696404.763335, 701516.635253, 706628.965299, 711741.575313, 716854.769083, 721968.220605, 727082.027784, 732196.114131,</div>
+<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> 737310.594653, 742425.339665, 747540.295793, 752655.505647, 757770.968129, 762886.636891, 768002.527720, 773118.559142,</div>
+<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> 778234.871441, 783351.273881, 788467.944809, 793584.599211, 798701.497594, 803818.484285, 808935.619316, 814053.067243,</div>
+<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> 819170.390229, 824287.946609, 829405.450988, 834523.054071, 839640.856519, 844758.800102, 849876.719924, 854994.831607,</div>
+<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> 860112.896788, 865231.116455, 870349.453898, 875467.910756, 880586.444976, 885705.102070, 890823.822978, 895942.513436,</div>
+<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> 901061.120048, 906179.716020, 911298.587548, 916417.583647, 921536.507373, 926655.570709, 931774.690027, 936893.879961,</div>
+<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> 942012.956398, 947132.142141, 952251.503479, 957370.815448, 962490.012685, 967609.521437, 972729.002837, 977848.339983,</div>
+<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> 982967.824448, 988087.392216, 993206.992691, 998326.635354, 1003446.304388, 1008565.985024, 1013685.706678, 1018805.581548,</div>
+<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> 1023925.239073, 1029045.157502, 1034165.035124, 1039284.843524, 1044404.676526, 1049524.620186, 1054644.441170, 1059764.409794,</div>
+<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> 1064884.318434, 1070004.338968, 1075124.268749, 1080244.471055, 1085364.528193, 1090484.511927, 1095604.595114, 1100724.598478,</div>
+<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> 1105844.666500, 1110964.804168, 1116084.864159, 1121204.874577, 1126325.062599, 1131445.152321, 1136565.301592, 1141685.638897,</div>
+<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> 1146805.806800, 1151925.790859, 1157045.932640, 1162166.112443, 1167286.221698, 1172406.273611, 1177526.581875, 1182646.832239,</div>
+<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> 1187766.882661, 1192886.884388, 1198006.962839, 1203127.084377, 1208246.959060, 1213366.976076, 1218486.763464, 1223606.758568,</div>
+<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> 1228726.721761, 1233846.593404, 1238966.815228, 1244086.865449, 1249206.854850, 1254326.996667, 1259447.092239, 1264567.198081,</div>
+<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> 1269687.499091, 1274807.474194, 1279927.244161, 1285047.273317, 1290167.090035, 1295287.035620, 1300406.888764, 1305526.667946,</div>
+<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> 1310646.540340</div>
+<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span>},</div>
+<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span><span class="comment">// log K = 18</span></div>
+<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span>{</div>
+<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> 189083.688921, 194053.597973, 199115.342781, 204269.157017, 209515.195566, 214853.553887, 220284.295855, 225807.399998,</div>
+<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> 231422.826900, 237130.469824, 242930.139690, 248821.634191, 254804.718978, 260879.073467, 267044.289594, 273299.936993,</div>
+<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> 279645.549742, 286080.586199, 292604.521050, 299216.651567, 305916.376160, 312702.908374, 319575.536730, 326533.420485,</div>
+<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> 333575.639430, 340701.388339, 347909.713977, 355199.642852, 362570.108280, 370020.154080, 377548.652175, 385154.413997,</div>
+<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> 392836.374125, 400593.371525, 408424.172521, 416327.671123, 424302.406749, 432347.292674, 440461.014310, 448642.241683,</div>
+<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> 456889.603709, 465201.946081, 473577.749277, 482015.802141, 490514.770444, 499073.243760, 507689.794308, 516363.149230,</div>
+<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> 525091.902823, 533874.850510, 542710.434311, 551597.433198, 560534.241273, 569520.019389, 578553.034265, 587632.180111,</div>
+<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> 596756.084542, 605923.440522, 615133.037840, 624383.626242, 633673.841133, 643002.674316, 652368.578283, 661770.556501,</div>
+<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> 671207.605795, 680678.417768, 690181.818697, 699716.780471, 709282.084973, 718876.864175, 728499.951143, 738150.280049,</div>
+<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> 747827.053968, 757529.236597, 767255.784062, 777006.100829, 786779.065927, 796573.507429, 806388.828153, 816223.976258,</div>
+<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> 826078.608350, 835951.751956, 845842.493689, 855750.225870, 865674.190527, 875613.809349, 885568.425527, 895537.272219,</div>
+<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> 905519.763307, 915515.310346, 925523.353103, 935543.172648, 945574.292664, 955616.280042, 965668.428231, 975730.535479,</div>
+<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> 985802.055447, 995882.596628, 1005971.583108, 1016068.664992, 1026173.649961, 1036285.774891, 1046404.955770, 1056530.588186,</div>
+<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> 1066662.648243, 1076800.535542, 1086944.269881, 1097093.058652, 1107247.076183, 1117405.990557, 1127569.310917, 1137737.011345,</div>
+<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> 1147908.717700, 1158084.362020, 1168263.501029, 1178446.221907, 1188632.206842, 1198821.131431, 1209013.020373, 1219207.570786,</div>
+<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> 1229404.854893, 1239604.423801, 1249806.433263, 1260010.619993, 1270216.819018, 1280424.774173, 1290634.560600, 1300846.097203,</div>
+<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> 1311059.128630, 1321273.628402, 1331489.832488, 1341707.300774, 1351925.947953, 1362145.802925, 1372366.802414, 1382588.547896,</div>
+<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> 1392811.264776, 1403035.227449, 1413259.922280, 1423485.322819, 1433711.916106, 1443938.981360, 1454166.596984, 1464394.761679,</div>
+<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> 1474623.684212, 1484853.156422, 1495083.020146, 1505313.735890, 1515544.731764, 1525776.086634, 1536007.742073, 1546239.679012,</div>
+<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> 1556472.212370, 1566704.988763, 1576937.965495, 1587171.446007, 1597405.292186, 1607639.395274, 1617873.660775, 1628108.037273,</div>
+<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> 1638342.741799, 1648577.832828, 1658813.325573, 1669048.803784, 1679284.679963, 1689520.927615, 1699757.050010, 1709993.263665,</div>
+<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> 1720229.557663, 1730466.102090, 1740702.604009, 1750939.618504, 1761176.930182, 1771414.210528, 1781651.713742, 1791889.218503,</div>
+<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> 1802126.805234, 1812364.257333, 1822602.054007, 1832839.687792, 1843077.871973, 1853315.944762, 1863554.202066, 1873792.633125,</div>
+<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> 1884030.883830, 1894269.182711, 1904507.712050, 1914746.469507, 1924985.484753, 1935224.245956, 1945463.225215, 1955702.268883,</div>
+<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> 1965941.321722, 1976180.037370, 1986419.052784, 1996658.429579, 2006897.450283, 2017136.904971, 2027376.240039, 2037615.549295,</div>
+<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> 2047855.197425, 2058094.765906, 2068334.279787, 2078573.820075, 2088813.469730, 2099053.348620, 2109293.174176, 2119533.012704,</div>
+<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> 2129772.820132, 2140012.744709, 2150252.607739, 2160492.533017, 2170732.406422, 2180972.400110, 2191212.436319, 2201452.637894,</div>
+<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> 2211692.339292, 2221932.460057, 2232172.746036, 2242412.892705, 2252653.174824, 2262893.432271, 2273134.002270, 2283374.311008,</div>
+<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> 2293614.537881, 2303854.703732, 2314095.191374, 2324335.236186, 2334575.624526, 2344816.313269, 2355056.224171, 2365296.361285,</div>
+<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> 2375537.048184, 2385777.280284, 2396017.222502, 2406257.145546, 2416497.272190, 2426737.212210, 2436977.500856, 2447217.897426,</div>
+<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> 2457458.423605, 2467698.536697, 2477938.448096, 2488178.544726, 2498418.640441, 2508658.160374, 2518898.274852, 2529138.509345,</div>
+<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> 2539378.310538, 2549617.989497, 2559857.504886, 2570097.363128, 2580337.195261, 2590576.878833, 2600816.572159, 2611055.930087,</div>
+<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> 2621295.625004</div>
+<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span>},</div>
+<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span><span class="comment">// log K = 19</span></div>
+<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span>{</div>
+<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> 378168.156126, 388107.986863, 398231.517433, 408539.178530, 419031.252008, 429707.954086, 440569.365328, 451615.642722,</div>
+<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> 462846.490174, 474261.790112, 485861.190310, 497644.259253, 509610.438730, 521759.095095, 534089.573442, 546600.981190,</div>
+<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> 559292.272697, 572162.409622, 585210.331052, 598434.669889, 611834.157416, 625407.271721, 639152.543961, 653068.262294,</div>
+<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> 667152.777393, 681404.241581, 695820.778241, 710400.501586, 725141.425404, 740041.558661, 755098.503731, 770310.107475,</div>
+<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> 785674.192935, 801188.297422, 816849.950298, 832656.623960, 848606.198026, 864696.151343, 880923.487841, 897285.841319,</div>
+<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> 913780.530043, 930405.131973, 947156.655545, 964032.974599, 981030.762278, 998147.499138, 1015380.659035, 1032727.149847,</div>
+<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> 1050184.616751, 1067750.330789, 1085421.716664, 1103195.771853, 1121069.796650, 1139041.324454, 1157107.373802, 1175265.377022,</div>
+<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> 1193513.201704, 1211847.872855, 1230267.133114, 1248768.293478, 1267348.634472, 1286005.987451, 1304738.187318, 1323542.421988,</div>
+<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> 1342416.458954, 1361357.807871, 1380364.530293, 1399434.095493, 1418564.587724, 1437754.116682, 1457000.254889, 1476301.275902,</div>
+<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> 1495654.977143, 1515059.332212, 1534512.821906, 1554013.130304, 1573558.585534, 1593147.244450, 1612777.978405, 1632448.600136,</div>
+<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> 1652157.704100, 1671904.308928, 1691686.012962, 1711501.716352, 1731349.849417, 1751229.053668, 1771138.423208, 1791076.196899,</div>
+<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> 1811041.338260, 1831032.177526, 1851048.091817, 1871088.096683, 1891150.317142, 1911234.619162, 1931339.423184, 1951463.947205,</div>
+<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> 1971606.994543, 1991767.606441, 2011945.852451, 2032140.098239, 2052349.709954, 2072574.274980, 2092812.387905, 2113063.537955,</div>
+<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> 2133327.750182, 2153603.787963, 2173890.933053, 2194188.225246, 2214496.333997, 2234814.120065, 2255140.753372, 2275476.675949,</div>
+<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> 2295820.689602, 2316172.220323, 2336530.258616, 2356894.932256, 2377266.633368, 2397645.173978, 2418028.419639, 2438417.586475,</div>
+<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> 2458812.422593, 2479211.306360, 2499615.253217, 2520023.375080, 2540436.051898, 2560851.967345, 2581271.569076, 2601694.318944,</div>
+<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> 2622120.693963, 2642549.418269, 2662981.070023, 2683415.520909, 2703852.500003, 2724291.876933, 2744733.213126, 2765177.477758,</div>
+<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> 2785623.320019, 2806070.985142, 2826520.234343, 2846971.203929, 2867423.303616, 2887876.396540, 2908331.739769, 2928788.290672,</div>
+<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> 2949245.276635, 2969704.620226, 2990164.657583, 3010625.841710, 3031087.855626, 3051550.619090, 3072014.642350, 3092479.163042,</div>
+<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> 3112944.278087, 3133410.101603, 3153876.719100, 3174343.414117, 3194810.517970, 3215278.762802, 3235747.174277, 3256216.390486,</div>
+<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> 3276685.652553, 3297155.394593, 3317625.911419, 3338096.547090, 3358567.567862, 3379038.637659, 3399510.649493, 3419983.382105,</div>
+<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> 3440456.231853, 3460929.496047, 3481403.703904, 3501877.874941, 3522351.898403, 3542825.527074, 3563300.038829, 3583775.102749,</div>
+<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> 3604249.896903, 3624724.967423, 3645201.027293, 3665676.534460, 3686152.061202, 3706628.308333, 3727104.271827, 3747580.803335,</div>
+<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> 3768057.710876, 3788534.660048, 3809011.720864, 3829489.164523, 3849967.204462, 3870445.043912, 3890923.080446, 3911400.767281,</div>
+<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> 3931879.061622, 3952357.218696, 3972836.284463, 3993314.516935, 4013793.278282, 4034272.661280, 4054751.814018, 4075230.503334,</div>
+<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> 4095708.557968, 4116187.919814, 4136667.714093, 4157147.152355, 4177627.302553, 4198107.383728, 4218587.174918, 4239066.631662,</div>
+<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> 4259545.994167, 4280026.100110, 4300506.380609, 4320986.617208, 4341466.696312, 4361945.995732, 4382426.527708, 4402907.058309,</div>
+<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> 4423386.556967, 4443867.498542, 4464348.284664, 4484828.344391, 4505309.026083, 4525789.774619, 4546270.396129, 4566750.818685,</div>
+<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> 4587231.362126, 4607711.356124, 4628191.883250, 4648673.308942, 4669153.953372, 4689634.118530, 4710114.637510, 4730595.217429,</div>
+<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> 4751075.358693, 4771555.492921, 4792035.313408, 4812516.057037, 4832995.761283, 4853475.977619, 4873956.732160, 4894436.879314,</div>
+<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> 4914917.149285, 4935397.069776, 4955877.550351, 4976357.852728, 4996838.246842, 5017318.023169, 5037798.008344, 5058278.290403,</div>
+<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> 5078757.968956, 5099237.419344, 5119716.759591, 5140195.935830, 5160675.636320, 5181154.980843, 5201633.780713, 5222113.031789,</div>
+<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> 5242591.881577</div>
+<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span>},</div>
+<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span><span class="comment">// log K = 20</span></div>
+<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span>{</div>
+<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> 756337.090537, 776216.744995, 796463.785646, 817079.035290, 838063.221300, 859416.678362, 881139.576270, 903232.151726,</div>
+<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> 925693.940877, 948524.600346, 971723.442348, 995289.632784, 1019222.059448, 1043519.402588, 1068180.163485, 1093202.854610,</div>
+<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> 1118585.515820, 1144326.031845, 1170421.828997, 1196870.617641, 1223669.453959, 1250815.679160, 1278306.298944, 1306137.726017,</div>
+<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> 1334306.782451, 1362809.672011, 1391643.048887, 1420802.665486, 1450284.419390, 1480084.556504, 1510198.362531, 1540621.709038,</div>
+<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> 1571349.988582, 1602377.885766, 1633700.853485, 1665314.443974, 1697213.607484, 1729393.242718, 1761847.799154, 1794572.464804,</div>
+<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> 1827562.002973, 1860811.213417, 1894314.858503, 1928067.079352, 1962062.774535, 1996296.400592, 2030762.354026, 2065455.981656,</div>
+<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> 2100370.818573, 2135502.224529, 2170844.722018, 2206392.452100, 2242140.795895, 2278083.565225, 2314215.470175, 2350532.238358,</div>
+<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> 2387028.028531, 2423697.739702, 2460535.617283, 2497537.908190, 2534699.627071, 2572014.508248, 2609478.240813, 2647086.878671,</div>
+<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> 2684834.738503, 2722717.495987, 2760730.659130, 2798869.445379, 2837130.937688, 2875509.782410, 2914002.086936, 2952603.395700,</div>
+<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> 2991310.971904, 3030119.629799, 3069026.891217, 3108027.543585, 3147118.485322, 3186296.724369, 3225557.893026, 3264899.405158,</div>
+<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> 3304317.806643, 3343809.532357, 3383372.875494, 3423003.239113, 3462699.855290, 3502458.588120, 3542276.984489, 3582151.461666,</div>
+<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> 3622080.455509, 3662062.087297, 3702093.774268, 3742173.351913, 3782298.542025, 3822466.599295, 3862676.059061, 3902925.301466,</div>
+<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> 3943212.313188, 3983534.655139, 4023890.682932, 4064278.948819, 4104698.644146, 4145147.867936, 4185624.200116, 4226127.607823,</div>
+<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> 4266655.471909, 4307207.261933, 4347781.577688, 4388376.075665, 4428991.084860, 4469625.512791, 4510278.322018, 4550949.135583,</div>
+<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> 4591635.061142, 4632337.290243, 4673054.034167, 4713783.999697, 4754527.016825, 4795282.199016, 4836049.304645, 4876828.217063,</div>
+<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> 4917617.432795, 4958416.033283, 4999223.332994, 5040040.200620, 5080865.836319, 5121698.006953, 5162537.663489, 5203383.861562,</div>
+<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> 5244235.368756, 5285093.542054, 5325957.172545, 5366826.006832, 5407700.602295, 5448579.444589, 5489462.237514, 5530348.767163,</div>
+<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> 5571240.286944, 5612135.490023, 5653033.590430, 5693935.090249, 5734840.012969, 5775747.413811, 5816658.159197, 5857571.727542,</div>
+<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> 5898486.810748, 5939403.918361, 5980324.159335, 6021245.922584, 6062167.462275, 6103093.061724, 6144019.021028, 6184948.477708,</div>
+<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> 6225878.111073, 6266809.926593, 6307741.380274, 6348674.587241, 6389609.653586, 6430546.024311, 6471482.661256, 6512419.658468,</div>
+<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> 6553358.313587, 6594299.462793, 6635239.780670, 6676180.809115, 6717122.614963, 6758064.640997, 6799009.935719, 6839954.567726,</div>
+<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> 6880900.950276, 6921847.965357, 6962794.580261, 7003742.234176, 7044691.155209, 7085639.223984, 7126587.984374, 7167538.597843,</div>
+<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> 7208487.508674, 7249437.307369, 7290389.448350, 7331341.752887, 7372292.872774, 7413245.082344, 7454198.512431, 7495151.878502,</div>
+<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> 7536105.815461, 7577059.755263, 7618013.175400, 7658967.579066, 7699922.475951, 7740878.015144, 7781833.511721, 7822789.986990,</div>
+<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> 7863745.987999, 7904702.500036, 7945659.757785, 7986615.385020, 8027573.168319, 8068531.917672, 8109489.438412, 8150447.742963,</div>
+<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> 8191403.350221, 8232362.807587, 8273321.255913, 8314281.043410, 8355240.292724, 8396199.214301, 8437156.471990, 8478114.862372,</div>
+<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> 8519073.457296, 8560034.832965, 8600993.512814, 8641954.368755, 8682914.667061, 8723875.362809, 8764837.809961, 8805797.690078,</div>
+<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> 8846758.789178, 8887720.671501, 8928680.126482, 8969640.467726, 9010601.160006, 9051561.769905, 9092522.487783, 9133484.594542,</div>
+<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> 9174446.122191, 9215406.809237, 9256366.837569, 9297328.747584, 9338288.901510, 9379250.948160, 9420212.503729, 9461173.228802,</div>
+<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> 9502133.928845, 9543094.489131, 9584055.513956, 9625015.618922, 9665975.737758, 9706937.403885, 9747896.035874, 9788856.165941,</div>
+<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> 9829816.994627, 9870777.228642, 9911737.327683, 9952698.937964, 9993660.635143, 10034620.747904, 10075579.526207, 10116539.739394,</div>
+<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> 10157498.625700, 10198458.468474, 10239418.486051, 10280376.431741, 10321335.494132, 10362295.312860, 10403254.402980, 10444214.519042,</div>
+<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> 10485173.027410</div>
+<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span>},</div>
+<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span><span class="comment">// log K = 21</span></div>
+<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span>{</div>
+<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> 1512674.959317, 1552434.197368, 1592928.155075, 1634158.593696, 1676126.959176, 1718834.017325, 1762279.726817, 1806464.610827,</div>
+<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> 1851388.162884, 1897049.337397, 1943446.849678, 1990579.312415, 2038444.063365, 2087038.766553, 2136360.248426, 2186405.470599,</div>
+<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> 2237170.640174, 2288651.015887, 2340842.752937, 2393739.986364, 2447337.958039, 2501630.515180, 2556611.361814, 2612274.289376,</div>
+<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> 2668612.210872, 2725618.064986, 2783284.549430, 2841603.566294, 2900566.895724, 2960167.093438, 3020394.610851, 3081240.447614,</div>
+<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> 3142696.078921, 3204751.105703, 3267397.808234, 3330624.834407, 3394422.872136, 3458781.966184, 3523690.805899, 3589140.856689,</div>
+<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> 3655119.540256, 3721617.907853, 3788624.486645, 3856129.175227, 3924119.940026, 3992586.658818, 4061519.544440, 4130906.734075,</div>
+<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> 4200737.500257, 4271000.909057, 4341685.842431, 4412781.306685, 4484277.199691, 4556162.287552, 4628426.495554, 4701059.642462,</div>
+<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> 4774050.909933, 4847389.117100, 4921065.536469, 4995068.178578, 5069389.529141, 5144019.928509, 5218947.440841, 5294164.568050,</div>
+<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> 5369660.364896, 5445425.915267, 5521454.727645, 5597734.642433, 5674257.411718, 5751014.463556, 5827999.822090, 5905203.759793,</div>
+<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> 5982617.522812, 6060234.561845, 6138048.162353, 6216049.451496, 6294232.713331, 6372588.108087, 6451109.903764, 6529792.611180,</div>
+<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> 6608629.912527, 6687615.097432, 6766740.086064, 6846000.116450, 6925391.839995, 7004908.093083, 7084544.127544, 7164293.822313,</div>
+<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> 7244153.392582, 7324115.814384, 7404179.031163, 7484336.380737, 7564586.128001, 7644922.247694, 7725340.819662, 7805840.541693,</div>
+<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> 7886412.416887, 7967054.301986, 8047764.087248, 8128539.447460, 8209376.477465, 8290273.766928, 8371225.884580, 8452230.183873,</div>
+<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> 8533283.959811, 8614388.863382, 8695539.350564, 8776730.375553, 8857961.046732, 8939230.757845, 9020535.369667, 9101877.322129,</div>
+<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> 9183251.420601, 9264654.743697, 9346087.109813, 9427548.372707, 9509034.441574, 9590547.753266, 9672081.682514, 9753639.600816,</div>
+<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> 9835216.139507, 9916813.989591, 9998428.682824, 10080058.312759, 10161706.673718, 10243372.018016, 10325050.507034, 10406744.529470,</div>
+<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> 10488447.296300, 10570163.109725, 10651893.512546, 10733632.712879, 10815382.384056, 10897140.573621, 10978907.646650, 11060681.383125,</div>
+<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> 11142464.138730, 11224254.549571, 11306053.275368, 11387858.162207, 11469666.329635, 11551480.634292, 11633302.025569, 11715128.710512,</div>
+<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> 11796961.403328, 11878795.670820, 11960634.652330, 12042477.348124, 12124323.950451, 12206172.128053, 12288028.811447, 12369886.306570,</div>
+<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> 12451744.123236, 12533607.183832, 12615473.707341, 12697338.733240, 12779207.987968, 12861080.507718, 12942957.260823, 13024834.007606,</div>
+<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> 13106715.252745, 13188597.806270, 13270478.933580, 13352362.482281, 13434247.263704, 13516133.477076, 13598020.834213, 13679909.264273,</div>
+<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> 13761799.592878, 13843689.299819, 13925583.582108, 14007479.173806, 14089371.780210, 14171268.621526, 14253167.561983, 14335070.527750,</div>
+<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> 14416971.620797, 14498873.784867, 14580778.789301, 14662681.662290, 14744586.311912, 14826493.286700, 14908400.702409, 14990305.605573,</div>
+<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> 15072214.379125, 15154123.120545, 15236031.901296, 15317939.866920, 15399849.993076, 15481761.939120, 15563672.325616, 15645585.312945,</div>
+<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> 15727497.406318, 15809411.780271, 15891325.875461, 15973239.145687, 16055155.936424, 16137069.783844, 16218984.663574, 16300899.732679,</div>
+<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> 16382815.849682, 16464730.053474, 16546645.675799, 16628563.444017, 16710481.533611, 16792400.824636, 16874319.061886, 16956235.859045,</div>
+<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> 17038151.394583, 17120072.629220, 17201992.200096, 17283914.365655, 17365836.161356, 17447756.880495, 17529681.545942, 17611601.675003,</div>
+<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> 17693522.079185, 17775441.939609, 17857361.777214, 17939284.144858, 18021205.445833, 18103125.675947, 18185051.132189, 18266974.391463,</div>
+<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> 18348894.689783, 18430817.526979, 18512736.992850, 18594657.001222, 18676577.636496, 18758497.698999, 18840421.426602, 18922345.360722,</div>
+<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> 19004266.906157, 19086186.184618, 19168105.320223, 19250029.336282, 19331950.350200, 19413874.580826, 19495794.431194, 19577715.745558,</div>
+<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> 19659638.264924, 19741557.363469, 19823478.431258, 19905400.862401, 19987318.682409, 20069238.585823, 20151157.549449, 20233076.181910,</div>
+<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> 20314994.521260, 20396915.069140, 20478836.108717, 20560753.915833, 20642672.570035, 20724588.867440, 20806507.038063, 20888426.370670,</div>
+<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> 20970344.006053</div>
+<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span>}</div>
+<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span>};</div>
+<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> </div>
+<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span><span class="keyword">const</span> <span class="keywordtype">double</span>* CompositeInterpolationXTable<A>::get_x_arr(uint8_t logK) {</div>
+<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">if</span> (logK < hll_constants::MIN_LOG_K || logK > hll_constants::MAX_LOG_K) {</div>
+<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"logK must be in range ["</span> + std::to_string(hll_constants::MIN_LOG_K)</div>
+<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> + <span class="stringliteral">", "</span> + std::to_string(hll_constants::MAX_LOG_K) + <span class="stringliteral">"]. Found: "</span></div>
+<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> + std::to_string(logK));</div>
+<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> }</div>
+<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">return</span> xArray[logK - hll_constants::MIN_LOG_K];</div>
+<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span>}</div>
+<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> </div>
+<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span>}</div>
+<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> </div>
+<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span><span class="preprocessor">#endif </span><span class="comment">// _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_composite_interpolation_x_table_8hpp_source.html b/docs/5.3.0/_composite_interpolation_x_table_8hpp_source.html
new file mode 100644
index 00000000..ba6c9edd
--- /dev/null
+++ b/docs/5.3.0/_composite_interpolation_x_table_8hpp_source.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CompositeInterpolationXTable.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CompositeInterpolationXTable.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A = std::allocator<u<span class="keywordtype">int</span>8_t>></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>CompositeInterpolationXTable {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> uint32_t get_y_stride(uint8_t logK);</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span>* get_x_arr(uint8_t logK);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">static</span> uint32_t get_x_arr_length();</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>};</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>}</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#include "CompositeInterpolationXTable-internal.hpp"</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#endif </span><span class="comment">/* _COMPOSITEINTERPOLATIONXTABLE_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_coupon_hash_set-internal_8hpp_source.html b/docs/5.3.0/_coupon_hash_set-internal_8hpp_source.html
new file mode 100644
index 00000000..6cb1ca0a
--- /dev/null
+++ b/docs/5.3.0/_coupon_hash_set-internal_8hpp_source.html
@@ -0,0 +1,385 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CouponHashSet-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CouponHashSet-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "CouponHashSet.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <exception></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* array, uint8_t lgArrInts, uint32_t coupon);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>CouponHashSet<A>::CouponHashSet(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator)</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> : CouponList<A>(lgConfigK, tgtHllType, hll_mode::SET, allocator)</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>{</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span> (lgConfigK <= 7) {</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"CouponHashSet must be initialized with lgConfigK > 7. Found: "</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> + std::to_string(lgConfigK));</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> }</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>}</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>CouponHashSet<A>::CouponHashSet(<span class="keyword">const</span> CouponHashSet<A>& that, <span class="keyword">const</span> target_hll_type tgtHllType)</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> : CouponList<A>(that, tgtHllType) {}</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>std::function<void(HllSketchImpl<A>*)> CouponHashSet<A>::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> CouponHashSet<A>* chs = <span class="keyword">static_cast<</span>CouponHashSet<A>*<span class="keyword">></span>(ptr);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> ChsAlloc chsa(chs->getAllocator());</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> chs->~CouponHashSet();</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> chsa.deallocate(chs, 1);</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> };</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>CouponHashSet<A>* CouponHashSet<A>::newSet(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (len < hll_constants::HASH_SET_INT_ARR_START) { <span class="comment">// hard-coded</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Input data length insufficient to hold CouponHashSet"</span>);</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> }</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(bytes);</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Incorrect number of preInts in input stream"</span>);</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Input stream is not an HLL sketch"</span>);</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">const</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (mode != SET) {</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling set constructor with non-set mode data"</span>);</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> (lgK <= 7) {</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize invalid CouponHashSet with lgConfigK <= 7. Found: "</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> + std::to_string(lgK));</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> } </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> uint8_t lgArrInts = data[hll_constants::LG_ARR_BYTE];</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> compactFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> uint32_t couponCount;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> std::memcpy(&couponCount, data + hll_constants::HASH_SET_COUNT_INT, <span class="keyword">sizeof</span>(couponCount));</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span> (lgArrInts < hll_constants::LG_INIT_SET_SIZE) {</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> lgArrInts = HllUtil<>::computeLgArrInts(SET, couponCount, lgK);</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// Don't set couponCount in sketch here;</span></div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// we'll set later if updatable, and increment with updates if compact</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> uint32_t couponsInArray = (compactFlag ? couponCount : (1 << lgArrInts));</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> expectedLength = hll_constants::HASH_SET_INT_ARR_START + (couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (len < expectedLength) {</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Byte array too short for sketch. Expected "</span> + std::to_string(expectedLength)</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> + <span class="stringliteral">", found: "</span> + std::to_string(len));</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> ChsAlloc chsa(allocator);</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> CouponHashSet<A>* sketch = <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet<A>(lgK, tgtHllType, allocator);</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span> (compactFlag) {</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">const</span> uint8_t* curPos = data + hll_constants::HASH_SET_INT_ARR_START;</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> uint32_t coupon;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < couponCount; ++i, curPos += <span class="keyword">sizeof</span>(coupon)) {</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> std::memcpy(&coupon, curPos, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> sketch->couponUpdate(coupon);</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> sketch->coupons_.resize(1ULL << lgArrInts);</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> sketch->couponCount_ = couponCount;</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> std::memcpy(sketch->coupons_.data(),</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> data + hll_constants::HASH_SET_INT_ARR_START,</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>}</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>CouponHashSet<A>* CouponHashSet<A>::newSet(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> uint8_t listHeader[8];</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Incorrect number of preInts in input stream"</span>);</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Input stream is not an HLL sketch"</span>);</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span> (mode != SET) {</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling set constructor with non-set mode data"</span>);</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span> (lgK <= 7) {</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize invalid CouponHashSet with lgConfigK <= 7. Found: "</span></div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> + std::to_string(lgK));</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> uint8_t lgArrInts = listHeader[hll_constants::LG_ARR_BYTE];</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> compactFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">const</span> <span class="keyword">auto</span> couponCount = read<uint32_t>(is);</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> (lgArrInts < hll_constants::LG_INIT_SET_SIZE) {</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> lgArrInts = HllUtil<>::computeLgArrInts(SET, couponCount, lgK);</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> ChsAlloc chsa(allocator);</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> CouponHashSet<A>* sketch = <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet<A>(lgK, tgtHllType, allocator);</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">typedef</span> std::unique_ptr<CouponHashSet<A>, std::function<void(HllSketchImpl<A>*)>> coupon_hash_set_ptr;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> coupon_hash_set_ptr ptr(sketch, sketch->get_deleter());</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// Don't set couponCount here;</span></div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// we'll set later if updatable, and increment with updates if compact</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span> (compactFlag) {</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < couponCount; ++i) {</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">const</span> <span class="keyword">auto</span> coupon = read<uint32_t>(is);</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> sketch->couponUpdate(coupon);</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> sketch->coupons_.resize(1ULL << lgArrInts);</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> sketch->couponCount_ = couponCount;</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// for stream processing, read entire list so read pointer ends up set correctly</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> read(is, sketch->coupons_.data(), sketch->coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> } </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span> (!is.good()) { <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"error reading from std::istream"</span>); } </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> ptr.release();</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span>}</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>CouponHashSet<A>* CouponHashSet<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> ChsAlloc chsa(this->coupons_.get_allocator());</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet<A>(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span>}</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span>CouponHashSet<A>* CouponHashSet<A>::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> ChsAlloc chsa(this->coupons_.get_allocator());</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet<A>(*<span class="keyword">this</span>, tgtHllType);</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>}</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span>HllSketchImpl<A>* CouponHashSet<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">const</span> uint8_t lgCouponArrInts = count_trailing_zeros_in_u32(<span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(this->coupons_.size()));</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">const</span> int32_t index = find<A>(this->coupons_.data(), lgCouponArrInts, coupon);</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span> (index >= 0) {</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// found duplicate, ignore</span></div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> this->coupons_[~index] = coupon; <span class="comment">// found empty</span></div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> ++this->couponCount_;</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span> (checkGrowOrPromote()) {</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">return</span> this->promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span>}</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span>uint32_t CouponHashSet<A>::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">return</span> hll_constants::HASH_SET_INT_ARR_START;</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span>}</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span>uint8_t CouponHashSet<A>::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">return</span> hll_constants::HASH_SET_PREINTS;</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span>}</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="keywordtype">bool</span> CouponHashSet<A>::checkGrowOrPromote() {</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span> (<span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(hll_constants::RESIZE_DENOM * this->couponCount_) > (hll_constants::RESIZE_NUMER * this->coupons_.size())) {</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">const</span> uint8_t lgCouponArrInts = count_trailing_zeros_in_u32(<span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(this->coupons_.size()));</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span> (lgCouponArrInts == (this->lgConfigK_ - 3)) { <span class="comment">// at max size</span></div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// promote to HLL</span></div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> growHashSet(lgCouponArrInts + 1);</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span>}</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="keywordtype">void</span> CouponHashSet<A>::growHashSet(uint8_t tgtLgCoupArrSize) {</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">const</span> uint32_t tgtLen = 1 << tgtLgCoupArrSize;</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> vector_int coupons_new(tgtLen, 0, this->coupons_.get_allocator());</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keyword">const</span> uint32_t srcLen = <span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(this->coupons_.size());</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < srcLen; ++i) { <span class="comment">// scan existing array for non-zero values</span></div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">const</span> uint32_t fetched = this->coupons_[i];</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keyword">const</span> int32_t idx = find<A>(coupons_new.data(), tgtLgCoupArrSize, fetched); <span class="comment">// search TGT array</span></div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span> (idx < 0) { <span class="comment">// found EMPTY</span></div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> coupons_new[~idx] = fetched; <span class="comment">// insert</span></div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Error: Found duplicate coupon"</span>);</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> this->coupons_ = std::move(coupons_new);</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span>}</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* array, uint8_t lgArrInts, uint32_t coupon) {</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keyword">const</span> uint32_t arrMask = (1 << lgArrInts) - 1;</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> uint32_t probe = coupon & arrMask;</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">do</span> {</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">const</span> uint32_t couponAtIdx = array[probe];</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (coupon == couponAtIdx) {</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">return</span> probe; <span class="comment">//duplicate</span></div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> }</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">const</span> uint32_t stride = ((coupon & hll_constants::KEY_MASK_26) >> lgArrInts) | 1;</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> probe = (probe + stride) & arrMask;</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> } <span class="keywordflow">while</span> (probe != loopIndex);</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Key not found and no empty slots!"</span>);</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span>}</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span>}</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="preprocessor">#endif </span><span class="comment">// _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_coupon_hash_set_8hpp_source.html b/docs/5.3.0/_coupon_hash_set_8hpp_source.html
new file mode 100644
index 00000000..024a14d3
--- /dev/null
+++ b/docs/5.3.0/_coupon_hash_set_8hpp_source.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CouponHashSet.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CouponHashSet.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _COUPONHASHSET_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _COUPONHASHSET_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>CouponHashSet : <span class="keyword">public</span> CouponList<A> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> CouponHashSet* newSet(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">static</span> CouponHashSet* newSet(std::istream& is, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> CouponHashSet(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> CouponHashSet(<span class="keyword">const</span> CouponHashSet& that, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">virtual</span> ~CouponHashSet() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using </span>vector_int = std::vector<uint32_t, typename std::allocator_traits<A>::template rebind_alloc<uint32_t>>;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">virtual</span> CouponHashSet* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">virtual</span> CouponHashSet* copyAs(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon);</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory<A>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">using </span>ChsAlloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<CouponHashSet<A>>;</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">bool</span> checkGrowOrPromote();</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> growHashSet(uint8_t tgtLgCoupArrSize);</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>};</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>}</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#endif </span><span class="comment">/* _COUPONHASHSET_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_coupon_list-internal_8hpp_source.html b/docs/5.3.0/_coupon_list-internal_8hpp_source.html
new file mode 100644
index 00000000..6dd97bd1
--- /dev/null
+++ b/docs/5.3.0/_coupon_list-internal_8hpp_source.html
@@ -0,0 +1,509 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CouponList-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CouponList-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "CubicInterpolation.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "count_zeros.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>CouponList<A>::CouponList(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl</a><A>(lgConfigK, tgtHllType, mode),</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>couponCount_(0),</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>oooFlag_(false),</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>coupons_(1ULL << (mode == hll_mode::LIST ? hll_constants::LG_INIT_LIST_SIZE : hll_constants::LG_INIT_SET_SIZE), 0, allocator)</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>{}</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>CouponList<A>::CouponList(<span class="keyword">const</span> CouponList& that, <span class="keyword">const</span> target_hll_type tgtHllType):</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>HllSketchImpl<A>(that.lgConfigK_, tgtHllType, that.mode_),</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>couponCount_(that.couponCount_),</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>oooFlag_(that.oooFlag_),</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>coupons_(that.coupons_)</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>{}</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span>std::function<void(HllSketchImpl<A>*)> CouponList<A>::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> CouponList<A>* cl = <span class="keyword">static_cast<</span>CouponList<A>*<span class="keyword">></span>(ptr);</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> ClAlloc cla(cl->getAllocator());</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> cl->~CouponList();</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> cla.deallocate(cl, 1);</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> };</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>}</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>CouponList<A>* CouponList<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> ClAlloc cla(coupons_.get_allocator());</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (cla.allocate(1)) CouponList<A>(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>}</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>CouponList<A>* CouponList<A>::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> ClAlloc cla(coupons_.get_allocator());</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (cla.allocate(1)) CouponList<A>(*<span class="keyword">this</span>, tgtHllType);</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>}</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>CouponList<A>* CouponList<A>::newList(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">if</span> (len < hll_constants::LIST_INT_ARR_START) {</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Input data length insufficient to hold CouponHashSet"</span>);</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(bytes);</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Incorrect number of preInts in input stream"</span>);</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Input stream is not an HLL sketch"</span>);</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (mode != LIST) {</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling list constructor with non-list mode data"</span>);</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((data[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::EMPTY_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">const</span> uint32_t couponCount = data[hll_constants::LIST_COUNT_BYTE];</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// Reject LIST counts at or above the fixed LIST capacity.</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">const</span> uint32_t listCapacity = 1u << hll_constants::LG_INIT_LIST_SIZE;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span> (couponCount >= listCapacity) {</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize invalid CouponList with couponCount >= capacity. Found couponCount: "</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> + std::to_string(couponCount)</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> + <span class="stringliteral">", capacity: "</span> + std::to_string(listCapacity));</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">const</span> uint32_t couponsInArray = (compact ? couponCount : (1 << HllUtil<A>::computeLgArrInts(LIST, couponCount, lgK)));</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> expectedLength = hll_constants::LIST_INT_ARR_START + (couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (len < expectedLength) {</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Byte array too short for sketch. Expected "</span> + std::to_string(expectedLength)</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> + <span class="stringliteral">", found: "</span> + std::to_string(len));</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> ClAlloc cla(allocator);</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> CouponList<A>* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList<A>(lgK, tgtHllType, mode, allocator);</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> sketch->couponCount_ = couponCount;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> sketch->putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (!emptyFlag) {</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// only need to read valid coupons, unlike in stream case</span></div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> std::memcpy(sketch->coupons_.data(), data + hll_constants::LIST_INT_ARR_START, couponCount * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span>}</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span>CouponList<A>* CouponList<A>::newList(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> uint8_t listHeader[8];</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Incorrect number of preInts in input stream"</span>);</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Input stream is not an HLL sketch"</span>);</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span> (mode != LIST) {</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling list constructor with non-list mode data"</span>);</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::EMPTY_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">const</span> uint32_t couponCount = listHeader[hll_constants::LIST_COUNT_BYTE];</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// Reject LIST counts at or above the fixed LIST capacity.</span></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">const</span> uint32_t listCapacity = 1u << hll_constants::LG_INIT_LIST_SIZE;</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> (couponCount >= listCapacity) {</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize invalid CouponList with couponCount >= capacity. Found couponCount: "</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> + std::to_string(couponCount)</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> + <span class="stringliteral">", capacity: "</span> + std::to_string(listCapacity));</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> ClAlloc cla(allocator);</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> CouponList<A>* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList<A>(lgK, tgtHllType, mode, allocator);</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">using </span>coupon_list_ptr = std::unique_ptr<CouponList<A>, std::function<void(HllSketchImpl<A>*)>>;</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> coupon_list_ptr ptr(sketch, sketch->get_deleter());</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> sketch->couponCount_ = couponCount;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> sketch->putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span> (!emptyFlag) {</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// For stream processing, need to read entire number written to stream so read</span></div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// pointer ends up set correctly.</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// If not compact, still need to read empty items even though in order.</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">const</span> uint32_t numToRead = (compact ? couponCount : <span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(sketch->coupons_.size()));</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> read(is, sketch->coupons_.data(), numToRead * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span> (!is.good()) { <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"error reading from std::istream"</span>); } </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> ptr.release();</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>}</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="keyword">auto</span> CouponList<A>::serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -> vector_bytes {</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> bytes[hll_constants::PREAMBLE_INTS_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(getPreInts());</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> bytes[hll_constants::SER_VER_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(hll_constants::SER_VER);</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> bytes[hll_constants::FAMILY_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(hll_constants::FAMILY_ID);</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> bytes[hll_constants::LG_K_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(this->lgConfigK_);</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> bytes[hll_constants::LG_ARR_BYTE] = count_trailing_zeros_in_u32(<span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(coupons_.size()));</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> bytes[hll_constants::FLAGS_BYTE] = this->makeFlagsByte(compact);</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> bytes[hll_constants::LIST_COUNT_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(this->mode_ == LIST ? couponCount_ : 0);</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> bytes[hll_constants::MODE_BYTE] = this->makeModeByte();</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span> (this->mode_ == SET) {</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> std::memcpy(bytes + hll_constants::HASH_SET_COUNT_INT, &couponCount_, <span class="keyword">sizeof</span>(couponCount_));</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// coupons</span></div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// isCompact() is always false for now</span></div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> std::memcpy(bytes + getMemDataStart(), coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> bytes += getMemDataStart(); <span class="comment">// reusing pointer for incremental writes</span></div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *<span class="keyword">this</span>) {</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> std::memcpy(bytes, &coupon, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> bytes += <span class="keyword">sizeof</span>(coupon);</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Impossible condition when serializing"</span>);</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">return</span> byteArr;</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span>}</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="keywordtype">void</span> CouponList<A>::serialize(std::ostream& os, <span class="keyword">const</span> <span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="comment">// header</span></div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> write(os, preInts);</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">const</span> uint8_t serialVersion(hll_constants::SER_VER);</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> write(os, serialVersion);</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">const</span> uint8_t familyId(hll_constants::FAMILY_ID);</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> write(os, familyId);</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">const</span> uint8_t lgKByte = this->lgConfigK_;</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> write(os, lgKByte);</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">const</span> uint8_t lgArrIntsByte = count_trailing_zeros_in_u32(<span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(coupons_.size()));</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> write(os, lgArrIntsByte);</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">const</span> uint8_t flagsByte = this->makeFlagsByte(compact);</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> write(os, flagsByte);</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span> (this->mode_ == LIST) {</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">const</span> uint8_t listCount = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(couponCount_);</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> write(os, listCount);</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> } <span class="keywordflow">else</span> { <span class="comment">// mode == SET</span></div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">const</span> uint8_t unused = 0;</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> write(os, unused);</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">const</span> uint8_t modeByte = this->makeModeByte();</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> write(os, modeByte);</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span> (this->mode_ == SET) {</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// writing as int, already stored as int</span></div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> write(os, couponCount_);</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> }</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// coupons</span></div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// isCompact() is always false for now</span></div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> write(os, coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *<span class="keyword">this</span>) {</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> write(os, coupon);</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> }</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Impossible condition when serializing"</span>);</div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span>}</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span>HllSketchImpl<A>* CouponList<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < coupons_.size(); ++i) { <span class="comment">// search for empty slot</span></div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">const</span> uint32_t couponAtIdx = coupons_[i];</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> coupons_[i] = coupon; <span class="comment">// the actual update</span></div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> ++couponCount_;</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span> (couponCount_ == <span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(coupons_.size())) { <span class="comment">// array full</span></div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span> (this->lgConfigK_ < 8) {</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">return</span> promoteHeapListToSet(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> }</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// cell not empty</span></div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span> (couponAtIdx == coupon) {</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// duplicate</span></div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="comment">// cell not empty and not a duplicate, continue</span></div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Array invalid: no empties and no duplicates"</span>);</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span>}</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="keywordtype">double</span> CouponList<A>::getCompositeEstimate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> getEstimate(); }</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="keywordtype">double</span> CouponList<A>::getEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation<A>::usingXAndYTables(couponCount_);</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">return</span> fmax(est, couponCount_);</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span>}</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="keywordtype">double</span> CouponList<A>::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation<A>::usingXAndYTables(couponCount_);</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keyword">const</span> <span class="keywordtype">double</span> tmp = est / (1.0 + (numStdDev * hll_constants::COUPON_RSE));</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span>}</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="keywordtype">double</span> CouponList<A>::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation<A>::usingXAndYTables(couponCount_);</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">const</span> <span class="keywordtype">double</span> tmp = est / (1.0 - (numStdDev * hll_constants::COUPON_RSE));</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span>}</div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="keywordtype">bool</span> CouponList<A>::isEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> getCouponCount() == 0; }</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span>uint32_t CouponList<A>::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">return</span> getMemDataStart() + <span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(coupons_.size()) * <span class="keyword">sizeof</span>(uint32_t);</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span>}</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span>uint32_t CouponList<A>::getCouponCount()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> couponCount_;</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>}</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span>uint32_t CouponList<A>::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">return</span> getMemDataStart() + (couponCount_ << 2);</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span>}</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span>uint32_t CouponList<A>::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">return</span> hll_constants::LIST_INT_ARR_START;</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span>}</div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span>uint8_t CouponList<A>::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">return</span> hll_constants::LIST_PREINTS;</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span>}</div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="keywordtype">bool</span> CouponList<A>::isCompact()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="keywordtype">bool</span> CouponList<A>::isOutOfOrderFlag()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> oooFlag_; }</div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="keywordtype">void</span> CouponList<A>::putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag) {</div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> oooFlag_ = oooFlag;</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span>}</div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span>A CouponList<A>::getAllocator()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">return</span> coupons_.get_allocator();</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span>}</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span>HllSketchImpl<A>* CouponList<A>::promoteHeapListToSet(CouponList& list) {</div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">return</span> HllSketchImplFactory<A>::promoteListToSet(list);</div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span>}</div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span>HllSketchImpl<A>* CouponList<A>::promoteHeapListOrSetToHll(CouponList& src) {</div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">return</span> HllSketchImplFactory<A>::promoteListOrSetToHll(src);</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span>}</div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span>coupon_iterator<A> CouponList<A>::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">return</span> coupon_iterator<A>(coupons_.data(), coupons_.size(), 0, all);</div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span>}</div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span>coupon_iterator<A> CouponList<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">return</span> coupon_iterator<A>(coupons_.data(), coupons_.size(), coupons_.size(), <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span>}</div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>}</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="preprocessor">#endif </span><span class="comment">// _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_coupon_list_8hpp_source.html b/docs/5.3.0/_coupon_list_8hpp_source.html
new file mode 100644
index 00000000..5b82062a
--- /dev/null
+++ b/docs/5.3.0/_coupon_list_8hpp_source.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CouponList.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CouponList.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _COUPONLIST_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _COUPONLIST_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "coupon_iterator.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">class </span>HllSketchImplFactory;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">class </span>CouponList : <span class="keyword">public</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl</a><A> {</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">using </span>vector_bytes = std::vector<uint8_t, typename std::allocator_traits<A>::template rebind_alloc<uint8_t>>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> CouponList(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> CouponList(<span class="keyword">const</span> CouponList& that, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">static</span> CouponList* newList(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static</span> CouponList* newList(std::istream& is, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">virtual</span> vector_bytes serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> serialize(std::ostream& os, <span class="keywordtype">bool</span> compact) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">virtual</span> ~CouponList() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">virtual</span> CouponList* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">virtual</span> CouponList* copyAs(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon);</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getCompositeEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getUpperBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getLowerBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isEmpty() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">virtual</span> uint32_t getCouponCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> coupon_iterator<A> begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> coupon_iterator<A> end() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">using </span>ClAlloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<CouponList<A>>;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">using </span>vector_int = std::vector<uint32_t, typename std::allocator_traits<A>::template rebind_alloc<uint32_t>>;</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> HllSketchImpl<A>* promoteHeapListToSet(CouponList& list);</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> HllSketchImpl<A>* promoteHeapListOrSetToHll(CouponList& src);</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">virtual</span> uint32_t getCompactSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCompact() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isOutOfOrderFlag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag);</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">virtual</span> A getAllocator() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> uint32_t couponCount_;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">bool</span> oooFlag_;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> vector_int coupons_;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory<A>;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>};</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span>}</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">/* _COUPONLIST_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_cubic_interpolation-internal_8hpp_source.html b/docs/5.3.0/_cubic_interpolation-internal_8hpp_source.html
new file mode 100644
index 00000000..81f2d5fb
--- /dev/null
+++ b/docs/5.3.0/_cubic_interpolation-internal_8hpp_source.html
@@ -0,0 +1,332 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CubicInterpolation-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CubicInterpolation-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "CubicInterpolation.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <string></span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtyp [...]
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">static</span> <span class="keywordtype">double</span> cubicInterpolate(<span class="keyword">const</span> <span class="keywordtype">double</span> x0, <span class="keyword">const</span> <span class="keywordtype">double</span> y0, <span class="keyword">const</span> <span class="keywordtype">double</span> x1, <span class="keyword">const</span> <span class="keywordtype">double</span> y1,</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">const</span> <span class="keywordtype">double</span> x2, <span class="keyword">const</span> <span class="keywordtype">double</span> y2, <span class="keyword">const</span> <span class="keywordtype">double</span> x3, <span class="keyword">const</span> <span class="keywordtype">double</span> y3, <span class="keyword">const</span> <span class="keywordtype"> [...]
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">static</span> <span class="keywordtype">int</span> findStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="keyword">static</span> <span class="keywordtype">int</span> recursiveFindStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">int</span> r, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yStride,</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keyword">const</span> <span class="keywordtype">int</span> numEntries = 40;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">//Computed for Coupon lgK = 26 ONLY. Designed for the cubic interpolator function.</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="keyword">const</span> <span class="keywordtype">double</span> xArrComputed[numEntries] = {</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> 0.0, 1.0, 20.0, 400.0,</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> 8000.0, 160000.0, 300000.0, 600000.0,</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> 900000.0, 1200000.0, 1500000.0, 1800000.0,</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> 2100000.0, 2400000.0, 2700000.0, 3000000.0,</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> 3300000.0, 3600000.0, 3900000.0, 4200000.0,</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> 4500000.0, 4800000.0, 5100000.0, 5400000.0,</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> 5700000.0, 6000000.0, 6300000.0, 6600000.0,</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> 6900000.0, 7200000.0, 7500000.0, 7800000.0,</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> 8100000.0, 8400000.0, 8700000.0, 9000000.0,</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> 9300000.0, 9600000.0, 9900000.0, 10200000.0</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>};</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">//Computed for Coupon lgK = 26 ONLY. Designed for the cubic interpolator function.</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="keyword">const</span> <span class="keywordtype">double</span> yArrComputed[numEntries] = {</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> 0.0000000000000000, 1.0000000000000000, 20.0000009437402611, 400.0003963713384110,</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> 8000.1589294602090376, 160063.6067763759638183, 300223.7071597663452849, 600895.5933856170158833,</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> 902016.8065120954997838, 1203588.4983199508860707, 1505611.8245524743106216, 1808087.9449319066479802,</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> 2111018.0231759352609515, 2414403.2270142501220107, 2718244.7282051891088486, 3022543.7025524540804327,</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> 3327301.3299219091422856, 3632518.7942584538832307, 3938197.2836029687896371, 4244337.9901093561202288,</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> 4550942.1100616492331028, 4858010.8438911894336343, 5165545.3961938973516226, 5473546.9757476449012756,</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> 5782016.7955296505242586, 6090956.0727340159937739, 6400366.0287892958149314, 6710247.8893762007355690,</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> 7020602.8844453142955899, 7331432.2482349723577499, 7642737.2192891482263803, 7954519.0404754765331745,</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> 8266778.9590033423155546, 8579518.2264420464634895, 8892738.0987390466034412, 9206439.8362383283674717,</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> 9520624.7036988288164139, 9835293.9703129194676876, 10150448.9097250290215015, 10466090.8000503256917000</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>};</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">double</span> CubicInterpolation<A>::usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> usingXAndYTables(xArrComputed, yArrComputed, numEntries, x);</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">double</span> CubicInterpolation<A>::usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> offset;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> (x < xArr[0] || x > xArr[len-1]) {</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"x value out of range: "</span> + std::to_string(x));</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (x == xArr[len-1]) { <span class="comment">// corner case</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> (yArr[len-1]);</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> offset = findStraddle<A>(xArr, len, x);</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span> (offset < 0 && offset > len-2) {</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"offset must be >= 0 and <= "</span> + std::to_string(len) + <span class="stringliteral">"-2"</span>);</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (offset == 0) { <span class="comment">// corner case</span></div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> (interpolateUsingXAndYTables<A>(xArr, yArr, (offset-0), x));</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (offset == numEntries-2) { <span class="comment">// corner case</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">return</span> (interpolateUsingXAndYTables<A>(xArr, yArr, (offset-2), x));</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// main case</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> (interpolateUsingXAndYTables<A>(xArr, yArr, (offset-1), x));</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment">// In C: again-two-registers cubic_interpolate_aux L1368</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> (cubicInterpolate<A>(xArr[offset+0], yArr[offset+0],</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> xArr[offset+1], yArr[offset+1],</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xArr[offset+2], yArr[offset+2],</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> xArr[offset+3], yArr[offset+3],</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> x) );</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>}</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> cubicInterpolate(<span class="keyword">const</span> <span class="keywordtype">double</span> x0, <span class="keyword">const</span> <span class="keywordtype">double</span> y0,</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">const</span> <span class="keywordtype">double</span> x1, <span class="keyword">const</span> <span class="keywordtype">double</span> y1,</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">const</span> <span class="keywordtype">double</span> x2, <span class="keyword">const</span> <span class="keywordtype">double</span> y2,</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">const</span> <span class="keywordtype">double</span> x3, <span class="keyword">const</span> <span class="keywordtype">double</span> y3,</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>{</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">double</span> l0_numer = (x - x1) * (x - x2) * (x - x3);</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">double</span> l1_numer = (x - x0) * (x - x2) * (x - x3);</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">double</span> l2_numer = (x - x0) * (x - x1) * (x - x3);</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">double</span> l3_numer = (x - x0) * (x - x1) * (x - x2);</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">double</span> l0_denom = (x0 - x1) * (x0 - x2) * (x0 - x3);</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">double</span> l1_denom = (x1 - x0) * (x1 - x2) * (x1 - x3);</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">double</span> l2_denom = (x2 - x0) * (x2 - x1) * (x2 - x3);</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">double</span> l3_denom = (x3 - x0) * (x3 - x1) * (x3 - x2);</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">double</span> term0 = y0 * l0_numer / l0_denom;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">double</span> term1 = y1 * l1_numer / l1_denom;</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">double</span> term2 = y2 * l2_numer / l2_denom;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">double</span> term3 = y3 * l3_numer / l3_denom;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span> (term0 + term1 + term2 + term3);</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment">/* returns j such that xArr[j] <= x and x < xArr[j+1] */</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="keyword">static</span> <span class="keywordtype">int</span> findStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>{</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span> ((len < 2) || (x < xArr[0]) || (x > xArr[len-1])) {</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"invariant violated during interpolation"</span>);</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span>(recursiveFindStraddle<A>(xArr, 0, len-1, x));</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>}</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment">/* the invariant here is that xArr[l] <= x && x < xArr[r] */</span></div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="keyword">static</span> <span class="keywordtype">int</span> recursiveFindStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">int</span> r, <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span>{</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span> (l >= r) {</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"lower bound not less than upper bound in search"</span>);</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span> ((xArr[l] > x) || (x >= xArr[r])) { <span class="comment">// the invariant</span></div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"target value invariant violated in search"</span>);</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span> (l+1 == r) { <span class="keywordflow">return</span> (l); }</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> m = l + ((r-l)/2);</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span> (xArr[m] <= x) { <span class="keywordflow">return</span> (recursiveFindStraddle<A>(xArr, m, r, x)); }</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">else</span> { <span class="keywordflow">return</span> (recursiveFindStraddle<A>(xArr, l, m, x)); }</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span>}</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment">//Interpolate using X table and Y stride</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment">//In C: again-two-registers cubic_interpolate_with_x_arr_and_y_stride L1411</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment">// Used by HllEstimators</span></div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="keywordtype">double</span> CubicInterpolation<A>::usingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLen,</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">const</span> <span class="keywordtype">double</span> yStride, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLenM1 = xArrLen - 1;</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> ((xArrLen < 4) || (x < xArr[0]) || (x > xArr[xArrLenM1])) {</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"impossible values during interpolation"</span>);</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span> (x == xArr[xArrLenM1]) { <span class="comment">/* corner case */</span></div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">return</span> (yStride * (xArrLenM1));</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">const</span> <span class="keywordtype">int</span> offset = findStraddle<A>(xArr, xArrLen, x); <span class="comment">//uses recursion</span></div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLenM2 = xArrLen - 2;</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span> ((offset < 0) || (offset > xArrLenM2)) {</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"invalid offset during interpolation"</span>);</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span> (offset == 0) { <span class="comment">/* corner case */</span></div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride<A>(xArr, yStride, (offset - 0), x));</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (offset == xArrLenM2) { <span class="comment">/* corner case */</span></div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride<A>(xArr, yStride, (offset - 2), x));</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="comment">/* main case */</span></div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride<A>(xArr, yStride, (offset - 1), x));</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span>}</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="comment">//In C: again-two-registers cubic_interpolate_with_x_arr_and_y_stride_aux L1402</span></div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yStride,</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> cubicInterpolate<A>(</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> xArr[offset + 0], yStride * (offset + 0),</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> xArr[offset + 1], yStride * (offset + 1),</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> xArr[offset + 2], yStride * (offset + 2),</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> xArr[offset + 3], yStride * (offset + 3),</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> x);</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>}</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span>}</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="preprocessor">#endif </span><span class="comment">// _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_cubic_interpolation_8hpp_source.html b/docs/5.3.0/_cubic_interpolation_8hpp_source.html
new file mode 100644
index 00000000..9b5faa0a
--- /dev/null
+++ b/docs/5.3.0/_cubic_interpolation_8hpp_source.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/CubicInterpolation.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">CubicInterpolation.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _CUBICINTERPOLATION_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _CUBICINTERPOLATION_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A = std::allocator<u<span class="keywordtype">int</span>8_t>></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>CubicInterpolation {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> <span class="keywordtype">double</span> usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">int</span> len, <span class="keywordtype">double</span> x);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">static</span> <span class="keywordtype">double</span> usingXAndYTables(<span class="keywordtype">double</span> x);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">static</span> <span class="keywordtype">double</span> usingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLen,</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">double</span> yStride, <span class="keywordtype">double</span> x);</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>};</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>}</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#include "CubicInterpolation-internal.hpp"</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#endif </span><span class="comment">/* _CUBICINTERPOLATION_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_harmonic_numbers-internal_8hpp_source.html b/docs/5.3.0/_harmonic_numbers-internal_8hpp_source.html
new file mode 100644
index 00000000..9d0660de
--- /dev/null
+++ b/docs/5.3.0/_harmonic_numbers-internal_8hpp_source.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HarmonicNumbers-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HarmonicNumbers-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HarmonicNumbers.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "fdlibm_log.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keywordtype">double</span> HarmonicNumbers<A>::getBitMapEstimate(<span class="keyword">const</span> <span class="keywordtype">int</span> bitVectorLength, <span class="keyword">const</span> <span class="keywordtype">int</span> numBitsSet) {</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">return</span> (bitVectorLength * (harmonicNumber(bitVectorLength) - harmonicNumber(bitVectorLength - numBitsSet)));</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>}</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> NUM_EXACT_HARMONIC_NUMBERS = 25;</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">static</span> <span class="keywordtype">double</span> tableOfExactHarmonicNumbers[] = {</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> 0.0, <span class="comment">// 0</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> 1.0, <span class="comment">// 1</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> 1.5, <span class="comment">// 2</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> 11.0 / 6.0, <span class="comment">// 3</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> 25.0 / 12.0, <span class="comment">// 4</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> 137.0 / 60.0, <span class="comment">// 5</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> 49.0 / 20.0, <span class="comment">// 6</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> 363.0 / 140.0, <span class="comment">// 7</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> 761.0 / 280.0, <span class="comment">// 8</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> 7129.0 / 2520.0, <span class="comment">// 9</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> 7381.0 / 2520.0, <span class="comment">// 10</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> 83711.0 / 27720.0, <span class="comment">// 11</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> 86021.0 / 27720.0, <span class="comment">// 12</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> 1145993.0 / 360360.0, <span class="comment">// 13</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> 1171733.0 / 360360.0, <span class="comment">// 14</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> 1195757.0 / 360360.0, <span class="comment">// 15</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> 2436559.0 / 720720.0, <span class="comment">// 16</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> 42142223.0 / 12252240.0, <span class="comment">// 17</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> 14274301.0 / 4084080.0, <span class="comment">// 18</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> 275295799.0 / 77597520.0, <span class="comment">// 19</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> 55835135.0 / 15519504.0, <span class="comment">// 20</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> 18858053.0 / 5173168.0, <span class="comment">// 21</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> 19093197.0 / 5173168.0, <span class="comment">// 22</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> 444316699.0 / 118982864.0, <span class="comment">// 23</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> 1347822955.0 / 356948592.0 <span class="comment">// 24</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> };</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> EULER_MASCHERONI_CONSTANT = 0.577215664901532860606512090082;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keywordtype">double</span> HarmonicNumbers<A>::harmonicNumber(<span class="keyword">const</span> uint64_t x_i) {</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (x_i < NUM_EXACT_HARMONIC_NUMBERS) {</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">return</span> tableOfExactHarmonicNumbers[x_i];</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">double</span> x = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(x_i);</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">double</span> invSq = 1.0 / (x * x);</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">double</span> sum = fdlibm::log(x) + EULER_MASCHERONI_CONSTANT + (1.0 / (2.0 * x));</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">/* note: the number of terms included from this series expansion is appropriate</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> for the size of the exact table (25) and the precision of doubles */</span></div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">double</span> pow = invSq; <span class="comment">// now n^-2</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> sum -= pow * (1.0 / 12.0);</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> pow *= invSq; <span class="comment">// now n^-4</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> sum += pow * (1.0 / 120.0);</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> pow *= invSq; <span class="comment">/* now n^-6 */</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> sum -= pow * (1.0 / 252.0);</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> pow *= invSq; <span class="comment">/* now n^-8 */</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> sum += pow * (1.0 / 240.0);</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>}</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>}</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor">#endif </span><span class="comment">// _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_harmonic_numbers_8hpp_source.html b/docs/5.3.0/_harmonic_numbers_8hpp_source.html
new file mode 100644
index 00000000..2e9ce7de
--- /dev/null
+++ b/docs/5.3.0/_harmonic_numbers_8hpp_source.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HarmonicNumbers.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HarmonicNumbers.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HARMONICNUMBERS_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HARMONICNUMBERS_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <cstdint></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">template</span><<span class="keyword">typename</span> A = std::allocator<u<span class="keywordtype">int</span>8_t>></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>HarmonicNumbers {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> <span class="keywordtype">double</span> getBitMapEstimate(<span class="keywordtype">int</span> bitVectorLength, <span class="keywordtype">int</span> numBitsSet);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">static</span> <span class="keywordtype">double</span> harmonicNumber(uint64_t x_i);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>};</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>}</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#include "HarmonicNumbers-internal.hpp"</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#endif </span><span class="comment">/* _HARMONICNUMBERS_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll4_array-internal_8hpp_source.html b/docs/5.3.0/_hll4_array-internal_8hpp_source.html
new file mode 100644
index 00000000..e6651f17
--- /dev/null
+++ b/docs/5.3.0/_hll4_array-internal_8hpp_source.html
@@ -0,0 +1,460 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/Hll4Array-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">Hll4Array-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "Hll4Array.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include <string></span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>Hll4Array<A>::Hll4Array(uint8_t lgConfigK, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>HllArray<A>(lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, allocator),</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>auxHashMap_(nullptr)</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>{</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">const</span> uint32_t numBytes = this->hll4ArrBytes(lgConfigK);</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>}</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>Hll4Array<A>::Hll4Array(<span class="keyword">const</span> Hll4Array<A>& that) :</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> HllArray<A>(that)</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>{</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// can determine hllByteArr size in parent class, no need to allocate here</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// but parent class doesn't handle the auxHashMap</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">if</span> (that.auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> auxHashMap_ = that.auxHashMap_->copy();</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> auxHashMap_ = nullptr;</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>Hll4Array<A>::Hll4Array(<span class="keyword">const</span> HllArray<A>& other) :</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> HllArray<A>(other.getLgConfigK(), <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, other.getAllocator()),</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> auxHashMap_(nullptr)</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>{</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this->hll4ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> this->oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> this->hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> this->rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>}</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span>Hll4Array<A>::~Hll4Array() {</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// hllByteArr deleted in parent</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> AuxHashMap<A>::make_deleter()(auxHashMap_);</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>}</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>std::function<void(HllSketchImpl<A>*)> Hll4Array<A>::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> Hll4Array<A>* hll = <span class="keyword">static_cast<</span>Hll4Array<A>*<span class="keyword">></span>(ptr);</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">using </span>Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll4Array<A>>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> Hll4Alloc hll4Alloc(hll->getAllocator());</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> hll->~Hll4Array();</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> hll4Alloc.deallocate(hll, 1);</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> };</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>}</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span>Hll4Array<A>* Hll4Array<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">using </span>Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll4Array<A>>;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> Hll4Alloc hll4Alloc(this->getAllocator());</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (hll4Alloc.allocate(1)) Hll4Array<A>(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>}</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>uint32_t Hll4Array<A>::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> uint32_t auxBytes;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span> (auxHashMap == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_];</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> auxBytes = 4 << auxHashMap->getLgAuxArrInts();</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes() + auxBytes;</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>uint32_t Hll4Array<A>::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> this->hll4ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span>}</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>AuxHashMap<A>* Hll4Array<A>::getAuxHashMap()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> auxHashMap_;</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>}</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="keywordtype">void</span> Hll4Array<A>::putAuxHashMap(AuxHashMap<A>* auxHashMap) {</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> this->auxHashMap_ = auxHashMap;</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>}</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span>uint8_t Hll4Array<A>::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> uint8_t <span class="keywordtype">byte</span> = this->hllByteArr_[slotNo >> 1];</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> ((slotNo & 1) > 0) { <span class="comment">// odd?</span></div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> <span class="keywordtype">byte</span> >> 4;</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> <span class="keywordtype">byte</span> & hll_constants::loNibbleMask;</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span>}</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span>uint8_t Hll4Array<A>::adjustRawValue(uint32_t slot, uint8_t value)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (value != hll_constants::AUX_TOKEN) { <span class="keywordflow">return</span> value + this->curMin_; }</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span> auxHashMap_->mustFindValueFor(slot);</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span>}</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>HllSketchImpl<A>* Hll4Array<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> internalCouponUpdate(coupon);</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span>}</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="keywordtype">void</span> Hll4Array<A>::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">const</span> uint8_t newValue = HllUtil<A>::getValue(coupon);</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span> (newValue <= this->curMin_) {</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span>; <span class="comment">// quick rejection, but only works for large N</span></div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">const</span> uint32_t configKmask = (1 << this->lgConfigK_) - 1;</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">const</span> uint32_t slotNo = HllUtil<A>::getLow26(coupon) & configKmask;</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> internalHll4Update(slotNo, newValue);</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>}</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="keywordtype">void</span> Hll4Array<A>::putSlot(uint32_t slotNo, uint8_t newValue) {</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">const</span> uint32_t byteno = slotNo >> 1;</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">const</span> uint8_t oldValue = this->hllByteArr_[byteno];</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> ((slotNo & 1) == 0) { <span class="comment">// set low nibble</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> this->hllByteArr_[byteno]</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> = ((oldValue & hll_constants::hiNibbleMask) | (newValue & hll_constants::loNibbleMask));</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> } <span class="keywordflow">else</span> { <span class="comment">// set high nibble</span></div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> this->hllByteArr_[byteno]</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> = ((oldValue & hll_constants::loNibbleMask) | ((newValue << 4) & hll_constants::hiNibbleMask));</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span>}</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">//In C: two-registers.c Line 836 in "hhb_abstract_set_slot_if_new_value_bigger" non-sparse</span></div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="keywordtype">void</span> Hll4Array<A>::internalHll4Update(uint32_t slotNo, uint8_t newVal) {</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">const</span> uint8_t rawStoredOldValue = getSlot(slotNo); <span class="comment">// could be a 0</span></div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// this is provably a LB:</span></div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">const</span> uint8_t lbOnOldValue = rawStoredOldValue + this->curMin_; <span class="comment">// lower bound, could be 0</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span> (newVal > lbOnOldValue) { <span class="comment">// 842</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// Note: if an AUX_TOKEN exists, then auxHashMap must already exist</span></div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// 846: rawStoredOldValue == AUX_TOKEN</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">const</span> uint8_t actualOldValue = (rawStoredOldValue < hll_constants::AUX_TOKEN)</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> ? (lbOnOldValue) : (auxHashMap_->mustFindValueFor(slotNo));</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span> (newVal > actualOldValue) { <span class="comment">// 848: actualOldValue could still be 0; newValue > 0</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// we know that the array will change, but we haven't actually updated yet</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> this->hipAndKxQIncrementalUpdate(actualOldValue, newVal);</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="comment">// newVal >= curMin</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">const</span> uint8_t shiftedNewValue = newVal - this->curMin_; <span class="comment">// 874</span></div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// redundant since we know newVal >= curMin,</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// and lgConfigK bounds do not allow overflowing an int</span></div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="comment">//assert(shiftedNewValue >= 0);</span></div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (rawStoredOldValue == hll_constants::AUX_TOKEN) { <span class="comment">// 879</span></div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// Given that we have an AUX_TOKEN, there are 4 cases for how to</span></div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// actually modify the data structure</span></div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span> (shiftedNewValue >= hll_constants::AUX_TOKEN) { <span class="comment">// case 1: 881</span></div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// the byte array already contains aux token</span></div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// This is the case where old and new values are both exceptions.</span></div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// The 4-bit array already is AUX_TOKEN, only need to update auxHashMap</span></div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> auxHashMap_->mustReplace(slotNo, newVal);</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">else</span> { <span class="comment">// case 2: 885</span></div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// This is the hypothetical case where the old value is an exception and the new one is not,</span></div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// which is impossible given that curMin has not changed here and newVal > oldValue</span></div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> } <span class="keywordflow">else</span> { <span class="comment">// rawStoredOldValue != AUX_TOKEN</span></div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span> (shiftedNewValue >= hll_constants::AUX_TOKEN) { <span class="comment">// case 3: 892</span></div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="comment">// This is the case where the old value is not an exception and the new value is.</span></div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// The AUX_TOKEN must be stored in the 4-bit array and the new value</span></div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="comment">// added to the exception table</span></div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> putSlot(slotNo, hll_constants::AUX_TOKEN);</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> auxHashMap_ = AuxHashMap<A>::newAuxHashMap(hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_],</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> this->lgConfigK_, this->getAllocator());</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> auxHashMap_->mustAdd(slotNo, newVal);</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">else</span> { <span class="comment">// case 4: 897</span></div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// This is the case where neither the old value nor the new value is an exception.</span></div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// We just overwrite the 4-bit array with the shifted new value.</span></div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> putSlot(slotNo, shiftedNewValue);</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// we just increased a pair value, so it might be time to change curMin</span></div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span> (actualOldValue == this->curMin_) { <span class="comment">// 908</span></div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> --(this->numAtCurMin_);</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">while</span> (this->numAtCurMin_ == 0) {</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> shiftToBiggerCurMin(); <span class="comment">// increases curMin by 1, builds a new aux table</span></div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="comment">// shifts values in 4-bit table and recounts curMin</span></div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> } <span class="comment">// end newVal <= actualOldValue</span></div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> } <span class="comment">// end newValue <= lbOnOldValue -> return, no need to update array</span></div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span>}</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="comment">// This scheme only works with two double registers (2 kxq values).</span></div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="comment">// HipAccum, kxq0 and kxq1 remain untouched.</span></div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment">// This changes curMin, numAtCurMin, hllByteArr and auxMap.</span></div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="comment">// Entering this routine assumes that all slots have valid values > 0 and <= 15.</span></div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment">// An AuxHashMap must exist if any values in the current hllByteArray are already 15.</span></div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment">// In C: again-two-registers.c Lines 710 "hhb_shift_to_bigger_curmin"</span></div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="keywordtype">void</span> Hll4Array<A>::shiftToBiggerCurMin() {</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">const</span> uint8_t newCurMin = this->curMin_ + 1;</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">const</span> uint32_t configKmask = configK - 1;</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> uint32_t numAtNewCurMin = 0;</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> uint32_t numAuxTokens = 0;</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="comment">// Walk through the slots of 4-bit array decrementing stored values by one unless it</span></div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// equals AUX_TOKEN, where it is left alone but counted to be checked later.</span></div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="comment">// If oldStoredValue is 0 it is an error.</span></div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// If the decremented value is 0, we increment numAtNewCurMin.</span></div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// Because getNibble is masked to 4 bits oldStoredValue can never be > 15 or negative</span></div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < configK; i++) { <span class="comment">//724</span></div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> uint8_t oldStoredValue = getSlot(i);</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">if</span> (oldStoredValue == 0) {</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Array slots cannot be 0 at this point."</span>);</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span> (oldStoredValue < hll_constants::AUX_TOKEN) {</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> putSlot(i, --oldStoredValue);</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span> (oldStoredValue == 0) { numAtNewCurMin++; }</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> } <span class="keywordflow">else</span> { <span class="comment">//oldStoredValue == AUX_TOKEN</span></div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> numAuxTokens++;</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"auxHashMap cannot be null at this point"</span>);</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> }</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> }</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// If old AuxHashMap exists, walk through it updating some slots and build a new AuxHashMap</span></div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// if needed.</span></div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> AuxHashMap<A>* newAuxMap = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> uint32_t slotNum;</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> uint8_t oldActualVal;</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> uint8_t newShiftedVal;</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: *auxHashMap_) {</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> slotNum = HllUtil<A>::getLow26(coupon) & configKmask;</div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> oldActualVal = HllUtil<A>::getValue(coupon);</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span> (oldActualVal < newCurMin) {</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"oldActualVal < newCurMin when incrementing curMin"</span>);</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> }</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> newShiftedVal = oldActualVal - newCurMin;</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span> (getSlot(slotNum) != hll_constants::AUX_TOKEN) {</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"getSlot(slotNum) != AUX_TOKEN for item in auxiliary hash map"</span>);</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="comment">// Array slot != AUX_TOKEN at getSlot(slotNum);</span></div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span> (newShiftedVal < hll_constants::AUX_TOKEN) { <span class="comment">// 756</span></div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span> (newShiftedVal != 14) {</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"newShiftedVal != 14 for item in old auxHashMap despite curMin increment"</span>);</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="comment">// The former exception value isn't one anymore, so it stays out of new AuxHashMap.</span></div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="comment">// Correct the AUX_TOKEN value in the HLL array to the newShiftedVal (14).</span></div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> putSlot(slotNum, newShiftedVal);</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> numAuxTokens--;</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> } <span class="keywordflow">else</span> { <span class="comment">//newShiftedVal >= AUX_TOKEN</span></div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="comment">// the former exception remains an exception, so must be added to the newAuxMap</span></div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span> (newAuxMap == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> newAuxMap = AuxHashMap<A>::newAuxHashMap(hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_],</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> this->lgConfigK_, this->getAllocator());</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> newAuxMap->mustAdd(slotNum, oldActualVal);</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> } <span class="comment">//end scan of oldAuxMap</span></div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> } <span class="comment">//end if (auxHashMap != null)</span></div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">else</span> { <span class="comment">// oldAuxMap == null</span></div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span> (numAuxTokens != 0) {</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"No auxiliary hash map, but numAuxTokens != 0"</span>);</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> }</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span> (newAuxMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span> (newAuxMap->getAuxCount() != numAuxTokens) {</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Inconsistent counts: auxCount: "</span> + std::to_string(newAuxMap->getAuxCount())</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> + <span class="stringliteral">", HLL tokesn: "</span> + std::to_string(numAuxTokens));</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> AuxHashMap<A>::make_deleter()(auxHashMap_);</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> auxHashMap_ = newAuxMap;</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> this->curMin_ = newCurMin;</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> this->numAtCurMin_ = numAtNewCurMin;</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span>}</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="keyword">typename</span> HllArray<A>::const_iterator Hll4Array<A>::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">return</span> <span class="keyword">typename</span> HllArray<A>::const_iterator(this->hllByteArr_.data(), 1 << this->lgConfigK_, 0, this->tgtHllType_,</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> auxHashMap_, this->curMin_, all);</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span>}</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="keyword">typename</span> HllArray<A>::const_iterator Hll4Array<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">return</span> <span class="keyword">typename</span> HllArray<A>::const_iterator(this->hllByteArr_.data(), 1 << this->lgConfigK_, 1 << this->lgConfigK_,</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> this->tgtHllType_, auxHashMap_, this->curMin_, <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span>}</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span>}</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span><span class="preprocessor">#endif </span><span class="comment">// _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition</b> hll.hpp:73</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll4_array_8hpp_source.html b/docs/5.3.0/_hll4_array_8hpp_source.html
new file mode 100644
index 00000000..1939e250
--- /dev/null
+++ b/docs/5.3.0/_hll4_array_8hpp_source.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/Hll4Array.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">Hll4Array.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLL4ARRAY_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLL4ARRAY_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "AuxHashMap.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>Hll4Array final : <span class="keyword">public</span> HllArray<A> {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">explicit</span> Hll4Array(uint8_t lgConfigK, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">explicit</span> Hll4Array(<span class="keyword">const</span> Hll4Array<A>& that);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">explicit</span> Hll4Array(<span class="keyword">const</span> HllArray<A>& that);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">virtual</span> ~Hll4Array();</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">virtual</span> Hll4Array* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">inline</span> uint8_t adjustRawValue(uint32_t index, uint8_t value) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">virtual</span> AuxHashMap<A>* getAuxHashMap() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// does *not* delete old map if overwriting</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> putAuxHashMap(AuxHashMap<A>* auxHashMap);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">virtual</span> <span class="keyword">typename</span> HllArray<A>::const_iterator begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">virtual</span> <span class="keyword">typename</span> HllArray<A>::const_iterator end() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> internalHll4Update(uint32_t slotNo, uint8_t newVal);</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">void</span> shiftToBiggerCurMin();</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> AuxHashMap<A>* auxHashMap_;</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>};</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>}</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#endif </span><span class="comment">/* _HLL4ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll6_array-internal_8hpp_source.html b/docs/5.3.0/_hll6_array-internal_8hpp_source.html
new file mode 100644
index 00000000..fba41435
--- /dev/null
+++ b/docs/5.3.0/_hll6_array-internal_8hpp_source.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/Hll6Array-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">Hll6Array-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "Hll6Array.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>Hll6Array<A>::Hll6Array(uint8_t lgConfigK, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>HllArray<A>(lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, allocator)</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>{</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this->hll6ArrBytes(lgConfigK);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>}</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>Hll6Array<A>::Hll6Array(<span class="keyword">const</span> HllArray<A>& other) :</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> HllArray<A>(other.getLgConfigK(), <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, other.getAllocator())</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>{</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this->hll6ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> this->oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> uint32_t num_zeros = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> num_zeros--;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> this->numAtCurMin_ = num_zeros;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> this->hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> this->rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>}</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>std::function<void(HllSketchImpl<A>*)> Hll6Array<A>::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">using </span>Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll6Array<A>>;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> Hll6Array<A>* hll = <span class="keyword">static_cast<</span>Hll6Array<A>*<span class="keyword">></span>(ptr);</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> Hll6Alloc hll6Alloc(hll->getAllocator());</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> hll->~Hll6Array();</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> hll6Alloc.deallocate(hll, 1);</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> };</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span>}</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>Hll6Array<A>* Hll6Array<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">using </span>Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll6Array<A>>;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> Hll6Alloc hll6Alloc(this->getAllocator());</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (hll6Alloc.allocate(1)) Hll6Array<A>(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>}</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>uint8_t Hll6Array<A>::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">const</span> uint32_t shift = startBit & 0x7;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> uint32_t byteIdx = startBit >> 3; </div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> uint16_t twoByteVal = (this->hllByteArr_[byteIdx + 1] << 8) | this->hllByteArr_[byteIdx];</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> (twoByteVal >> shift) & hll_constants::VAL_MASK_6;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>}</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">void</span> Hll6Array<A>::putSlot(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">const</span> uint32_t shift = startBit & 0x7;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">const</span> uint32_t byteIdx = startBit >> 3;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">const</span> uint16_t valShifted = (value & 0x3F) << shift;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> uint16_t curMasked = (this->hllByteArr_[byteIdx + 1] << 8) | this->hllByteArr_[byteIdx];</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> curMasked &= (~(hll_constants::VAL_MASK_6 << shift));</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> uint16_t insert = curMasked | valShifted;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> this->hllByteArr_[byteIdx] = insert & 0xFF;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> this->hllByteArr_[byteIdx + 1] = (insert & 0xFF00) >> 8;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>}</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>uint32_t Hll6Array<A>::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> this->hll6ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>HllSketchImpl<A>* Hll6Array<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> internalCouponUpdate(coupon);</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>}</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keywordtype">void</span> Hll6Array<A>::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">const</span> uint32_t configKmask = (1 << this->lgConfigK_) - 1;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> uint32_t slotNo = HllUtil<A>::getLow26(coupon) & configKmask;</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">const</span> uint8_t newVal = HllUtil<A>::getValue(coupon);</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">const</span> uint8_t curVal = getSlot(slotNo);</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (newVal > curVal) {</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> putSlot(slotNo, newVal);</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> this->hipAndKxQIncrementalUpdate(curVal, newVal);</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span> (curVal == 0) {</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> this->numAtCurMin_--; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>}</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>}</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="preprocessor">#endif </span><span class="comment">// _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:74</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll6_array_8hpp_source.html b/docs/5.3.0/_hll6_array_8hpp_source.html
new file mode 100644
index 00000000..f0ba039c
--- /dev/null
+++ b/docs/5.3.0/_hll6_array_8hpp_source.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/Hll6Array.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">Hll6Array.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLL6ARRAY_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLL6ARRAY_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>Hll6Iterator;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">class </span>Hll6Array final : <span class="keyword">public</span> HllArray<A> {</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> Hll6Array(uint8_t lgConfigK, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">explicit</span> Hll6Array(<span class="keyword">const</span> HllArray<A>& that);</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">virtual</span> ~Hll6Array() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">virtual</span> Hll6Array* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>};</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#endif </span><span class="comment">/* _HLL6ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll8_array-internal_8hpp_source.html b/docs/5.3.0/_hll8_array-internal_8hpp_source.html
new file mode 100644
index 00000000..cd13a08d
--- /dev/null
+++ b/docs/5.3.0/_hll8_array-internal_8hpp_source.html
@@ -0,0 +1,318 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/Hll8Array-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">Hll8Array-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "Hll8Array.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>Hll8Array<A>::Hll8Array(uint8_t lgConfigK, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>HllArray<A>(lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, allocator)</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>{</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this->hll8ArrBytes(lgConfigK);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>}</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>Hll8Array<A>::Hll8Array(<span class="keyword">const</span> HllArray<A>& other):</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> HllArray<A>(other.getLgConfigK(), <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, other.getAllocator())</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>{</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this->hll8ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> this->oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> uint32_t num_zeros = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> num_zeros--;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> this->numAtCurMin_ = num_zeros;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> this->hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> this->rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>std::function<void(HllSketchImpl<A>*)> Hll8Array<A>::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> Hll8Array<A>* hll = <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(ptr);</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">using </span>Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll8Array<A>>;</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> Hll8Alloc hll8Alloc(hll->getAllocator());</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> hll->~Hll8Array();</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> hll8Alloc.deallocate(hll, 1);</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> };</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>}</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>Hll8Array<A>* Hll8Array<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">using </span>Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll8Array<A>>;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> Hll8Alloc hll8Alloc(this->getAllocator());</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (hll8Alloc.allocate(1)) Hll8Array<A>(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>}</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>uint8_t Hll8Array<A>::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> this->hllByteArr_[slotNo];</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>}</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">void</span> Hll8Array<A>::putSlot(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> this->hllByteArr_[slotNo] = value;</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>uint32_t Hll8Array<A>::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span> this->hll8ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>}</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>HllSketchImpl<A>* Hll8Array<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> internalCouponUpdate(coupon);</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>}</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keywordtype">void</span> Hll8Array<A>::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">const</span> uint32_t configKmask = (1 << this->lgConfigK_) - 1;</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> uint32_t slotNo = HllUtil<A>::getLow26(coupon) & configKmask;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> uint8_t newVal = HllUtil<A>::getValue(coupon);</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">const</span> uint8_t curVal = this->hllByteArr_[slotNo];</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span> (newVal > curVal) {</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="comment">// A prior HLL merge may have left the estimator state stale. Rebuild it before applying</span></div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// an incremental update for a changed register.</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> this->check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> this->hllByteArr_[slotNo] = newVal;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> this->hipAndKxQIncrementalUpdate(curVal, newVal);</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> this->numAtCurMin_ -= curVal == 0; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="keywordtype">void</span> Hll8Array<A>::mergeList(<span class="keyword">const</span> CouponList<A>& src) {</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: src) {</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> internalCouponUpdate(coupon);</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>}</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="keywordtype">void</span> Hll8Array<A>::mergeHll(<span class="keyword">const</span> HllArray<A>& src) {</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// at this point src_k >= dst_k</span></div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="comment">// we can optimize further when the k values are equal</span></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (this->getLgConfigK() == src.getLgConfigK()) {</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> uint32_t i = 0;</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> ++i;</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">const</span> uint32_t src_k = 1 << src.getLgConfigK();</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> uint32_t i = 0;</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">while</span> (i < src_k) {</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> uint8_t value = *ptr & 0x3f;</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> ++i;</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> value = *ptr++ >> 6;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> value |= (*ptr & 0x0f) << 2;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> ++i;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> value = *ptr++ >> 4;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> value |= (*ptr & 3) << 4;</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> ++i;</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> value = *ptr++ >> 2;</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> ++i;</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">const</span> <span class="keyword">auto</span>& src4 = <span class="keyword">static_cast<</span><span class="keyword">const </span>Hll4Array<A>&<span class="keyword">></span>(src);</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> uint32_t i = 0;</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">byte</span>: src.getHllArray()) {</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> & hll_constants::loNibbleMask));</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> ++i;</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> this->hllByteArr_[i] = std::max(this->hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> >> 4));</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> ++i;</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// src_k > dst_k</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">const</span> uint32_t dst_mask = (1 << this->getLgConfigK()) - 1;</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// special treatment below to optimize performance</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> uint32_t i = 0;</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> processValue(i++, dst_mask, value);</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">const</span> uint32_t src_k = 1 << src.getLgConfigK();</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> uint32_t i = 0;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">while</span> (i < src_k) {</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> uint8_t value = *ptr & 0x3f;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> processValue(i++, dst_mask, value);</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> value = *ptr++ >> 6;</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> value |= (*ptr & 0x0f) << 2;</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> processValue(i++, dst_mask, value);</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> value = *ptr++ >> 4;</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> value |= (*ptr & 3) << 4;</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> processValue(i++, dst_mask, value);</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> value = *ptr++ >> 2;</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> processValue(i++, dst_mask, value);</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">const</span> <span class="keyword">auto</span>& src4 = <span class="keyword">static_cast<</span><span class="keyword">const </span>Hll4Array<A>&<span class="keyword">></span>(src);</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> uint32_t i = 0;</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">byte</span>: src.getHllArray()) {</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> & hll_constants::loNibbleMask));</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> ++i;</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> >> 4));</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> ++i;</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> }</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> this->setRebuildKxqCurminFlag(<span class="keyword">true</span>);</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>}</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="keywordtype">void</span> Hll8Array<A>::processValue(uint32_t slot, uint32_t mask, uint8_t new_val) {</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> index = slot & mask;</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> this->hllByteArr_[index] = std::max(this->hllByteArr_[index], new_val);</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span>}</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span>}</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="preprocessor">#endif </span><span class="comment">// _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll8_array_8hpp_source.html b/docs/5.3.0/_hll8_array_8hpp_source.html
new file mode 100644
index 00000000..df875ddb
--- /dev/null
+++ b/docs/5.3.0/_hll8_array_8hpp_source.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/Hll8Array.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">Hll8Array.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLL8ARRAY_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLL8ARRAY_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>Hll8Iterator;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">class </span>Hll8Array final : <span class="keyword">public</span> HllArray<A> {</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> Hll8Array(uint8_t lgConfigK, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">explicit</span> Hll8Array(<span class="keyword">const</span> HllArray<A>& that);</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">virtual</span> ~Hll8Array() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">virtual</span> Hll8Array<A>* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> mergeList(<span class="keyword">const</span> CouponList<A>& src);</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> mergeHll(<span class="keyword">const</span> HllArray<A>& src);</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> processValue(uint32_t slot, uint32_t mask, uint8_t new_val);</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>};</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>}</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#endif </span><span class="comment">/* _HLL8ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_array-internal_8hpp_source.html b/docs/5.3.0/_hll_array-internal_8hpp_source.html
new file mode 100644
index 00000000..08a2f9ec
--- /dev/null
+++ b/docs/5.3.0/_hll_array-internal_8hpp_source.html
@@ -0,0 +1,819 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllArray-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllArray-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "fdlibm_log.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "HarmonicNumbers.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include "CubicInterpolation.hpp"</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include "CompositeInterpolationXTable.hpp"</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include "inv_pow2_table.hpp"</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#include <string></span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>HllArray<A>::HllArray(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl</a><A>(lgConfigK, tgtHllType, hll_mode::HLL),</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>hipAccum_(0.0),</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>kxq0_(1 << lgConfigK),</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>kxq1_(0.0),</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>hllByteArr_(allocator),</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>curMin_(0),</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>numAtCurMin_(1 << lgConfigK),</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>oooFlag_(false),</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>rebuild_kxq_curmin_(false)</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>{}</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>HllArray<A>::HllArray(<span class="keyword">const</span> HllArray& other, target_hll_type tgtHllType) :</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> HllSketchImpl<A>(other.getLgConfigK(), tgtHllType, hll_mode::HLL),</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// remaining fields are initialized to empty sketch defaults</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// and left to subclass constructor to populate</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> hipAccum_(0.0),</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> kxq0_(1 << other.getLgConfigK()),</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> kxq1_(0.0),</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> hllByteArr_(other.getAllocator()),</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> curMin_(0),</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> numAtCurMin_(1 << other.getLgConfigK()),</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> oooFlag_(false),</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> rebuild_kxq_curmin_(false)</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>{}</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>HllArray<A>* HllArray<A>::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// we may need to recompute KxQ and curMin data for a union gadget,</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// so only use a direct copy if we have a valid sketch</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (tgtHllType == this->getTgtHllType() && !this->isRebuildKxqCurminFlag()) {</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>HllArray*<span class="keyword">></span>(copy());</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// the factory methods replay the coupons and will always rebuild</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// the sketch in a consistent way</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> target_hll_type::HLL_4:</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> HllSketchImplFactory<A>::convertToHll4(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> target_hll_type::HLL_6:</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> HllSketchImplFactory<A>::convertToHll6(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> target_hll_type::HLL_8:</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span> HllSketchImplFactory<A>::convertToHll8(*<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid target HLL type"</span>); </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span>}</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>HllArray<A>* HllArray<A>::newHll(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (len < hll_constants::HLL_BYTE_ARR_START) {</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Input data length insufficient to hold HLL array"</span>);</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(bytes);</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Incorrect number of preInts in input stream"</span>);</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Input array is not an HLL sketch"</span>);</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">const</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (mode != HLL) {</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling HLL array constructor with non-HLL mode data"</span>);</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">const</span> uint8_t curMin = data[hll_constants::HLL_CUR_MIN_BYTE];</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">const</span> uint32_t arrayBytes = hllArrBytes(tgtHllType, lgK);</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span> (len < <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(hll_constants::HLL_BYTE_ARR_START + arrayBytes)) {</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"Input array too small to hold sketch image"</span>);</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">double</span> hip, kxq0, kxq1;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> std::memcpy(&hip, data + hll_constants::HIP_ACCUM_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> std::memcpy(&kxq0, data + hll_constants::KXQ0_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> std::memcpy(&kxq1, data + hll_constants::KXQ1_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> uint32_t numAtCurMin, auxCount;</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> std::memcpy(&numAtCurMin, data + hll_constants::CUR_MIN_COUNT_INT, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> std::memcpy(&auxCount, data + hll_constants::AUX_COUNT_INT, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> AuxHashMap<A>* auxHashMap = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">typedef</span> std::unique_ptr<AuxHashMap<A>, std::function<void(AuxHashMap<A>*)>> aux_hash_map_ptr;</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> aux_hash_map_ptr aux_ptr;</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (auxCount > 0) { <span class="comment">// necessarily TgtHllType == HLL_4</span></div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> uint8_t auxLgIntArrSize = data[4];</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = hll_constants::HLL_BYTE_ARR_START + arrayBytes;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">const</span> uint8_t* auxDataStart = data + offset;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> auxHashMap = AuxHashMap<A>::deserialize(auxDataStart, len - offset, lgK, auxCount, auxLgIntArrSize, comapctFlag, allocator);</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> aux_ptr = aux_hash_map_ptr(auxHashMap, auxHashMap->make_deleter());</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> HllArray<A>* sketch = HllSketchImplFactory<A>::newHll(lgK, tgtHllType, allocator);</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> sketch->putCurMin(curMin);</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> sketch->putOutOfOrderFlag(oooFlag);</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span> (!oooFlag) { sketch->putHipAccum(hip); }</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> sketch->putKxQ0(kxq0);</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> sketch->putKxQ1(kxq1);</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> sketch->putNumAtCurMin(numAtCurMin);</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> std::memcpy(sketch->hllByteArr_.data(), data + hll_constants::HLL_BYTE_ARR_START, arrayBytes);</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> ((Hll4Array<A>*)sketch)->putAuxHashMap(auxHashMap);</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> aux_ptr.release();</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>}</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span>HllArray<A>* HllArray<A>::newHll(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> uint8_t listHeader[8];</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Incorrect number of preInts in input stream"</span>);</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Input stream is not an HLL sketch"</span>);</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span> (mode != HLL) {</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling HLL constructor with non-HLL mode data"</span>);</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? true : <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">const</span> uint8_t curMin = listHeader[hll_constants::HLL_CUR_MIN_BYTE];</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> HllArray* sketch = HllSketchImplFactory<A>::newHll(lgK, tgtHllType, allocator);</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">typedef</span> std::unique_ptr<HllArray<A>, std::function<void(HllSketchImpl<A>*)>> hll_array_ptr;</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> hll_array_ptr sketch_ptr(sketch, sketch->get_deleter());</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> sketch->putCurMin(curMin);</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> sketch->putOutOfOrderFlag(oooFlag);</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">const</span> <span class="keyword">auto</span> hip = read<double>(is);</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">const</span> <span class="keyword">auto</span> kxq0 = read<double>(is);</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">const</span> <span class="keyword">auto</span> kxq1 = read<double>(is);</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span> (!oooFlag) { sketch->putHipAccum(hip); }</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> sketch->putKxQ0(kxq0);</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> sketch->putKxQ1(kxq1);</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">const</span> <span class="keyword">auto</span> numAtCurMin = read<uint32_t>(is);</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">const</span> <span class="keyword">auto</span> auxCount = read<uint32_t>(is);</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> sketch->putNumAtCurMin(numAtCurMin);</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> read(is, sketch->hllByteArr_.data(), sketch->getHllByteArrBytes());</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> (auxCount > 0) { <span class="comment">// necessarily TgtHllType == HLL_4</span></div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> uint8_t auxLgIntArrSize = listHeader[4];</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> AuxHashMap<A>* auxHashMap = AuxHashMap<A>::deserialize(is, lgK, auxCount, auxLgIntArrSize, comapctFlag, allocator);</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> ((Hll4Array<A>*)sketch)->putAuxHashMap(auxHashMap);</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span> (!is.good()) { <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"error reading from std::istream"</span>); } </div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span> sketch_ptr.release();</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span>}</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="keyword">auto</span> HllArray<A>::serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -> vector_bytes {</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> bytes[hll_constants::PREAMBLE_INTS_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(getPreInts());</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> bytes[hll_constants::SER_VER_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(hll_constants::SER_VER);</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> bytes[hll_constants::FAMILY_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(hll_constants::FAMILY_ID);</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> bytes[hll_constants::LG_K_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(this->lgConfigK_);</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> bytes[hll_constants::LG_ARR_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap->getLgAuxArrInts());</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> bytes[hll_constants::FLAGS_BYTE] = this->makeFlagsByte(compact);</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> bytes[hll_constants::HLL_CUR_MIN_BYTE] = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(curMin_);</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> bytes[hll_constants::MODE_BYTE] = this->makeModeByte();</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> std::memcpy(bytes + hll_constants::HIP_ACCUM_DOUBLE, &hipAccum_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> std::memcpy(bytes + hll_constants::KXQ0_DOUBLE, &kxq0_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> std::memcpy(bytes + hll_constants::KXQ1_DOUBLE, &kxq1_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> std::memcpy(bytes + hll_constants::CUR_MIN_COUNT_INT, &numAtCurMin_, <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap->getAuxCount());</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> std::memcpy(bytes + hll_constants::AUX_COUNT_INT, &auxCount, <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">const</span> uint32_t hllByteArrBytes = getHllByteArrBytes();</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> std::memcpy(bytes + getMemDataStart(), hllByteArr_.data(), hllByteArrBytes);</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="comment">// aux map if HLL_4</span></div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span> (this->tgtHllType_ == HLL_4) {</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> bytes += getMemDataStart() + hllByteArrBytes; <span class="comment">// start of auxHashMap</span></div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span> (compact) {</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> std::memcpy(bytes, &coupon, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> bytes += <span class="keyword">sizeof</span>(coupon);</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> std::memcpy(bytes, auxHashMap->getAuxIntArr(), auxHashMap->getUpdatableSizeBytes());</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped</span></div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> uint32_t auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_];</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> std::fill_n(bytes, auxBytes, <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(0));</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> }</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">return</span> byteArr;</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span>}</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="keywordtype">void</span> HllArray<A>::serialize(std::ostream& os, <span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// header</span></div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> write(os, preInts);</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keyword">const</span> uint8_t serialVersion = hll_constants::SER_VER;</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> write(os, serialVersion);</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">const</span> uint8_t familyId = hll_constants::FAMILY_ID;</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> write(os, familyId);</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keyword">const</span> uint8_t lgKByte = this->lgConfigK_;</div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> write(os, lgKByte);</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> uint8_t lgArrByte = 0;</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> lgArrByte = auxHashMap->getLgAuxArrInts();</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> write(os, lgArrByte);</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">const</span> uint8_t flagsByte = this->makeFlagsByte(compact);</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> write(os, flagsByte);</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> write(os, curMin_);</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keyword">const</span> uint8_t modeByte = this->makeModeByte();</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> write(os, modeByte);</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// estimator data</span></div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> write(os, hipAccum_);</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> write(os, kxq0_);</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> write(os, kxq1_);</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// array data</span></div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> write(os, numAtCurMin_);</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap->getAuxCount());</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> write(os, auxCount);</div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> write(os, hllByteArr_.data(), getHllByteArrBytes());</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="comment">// aux map if HLL_4</span></div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span> (this->tgtHllType_ == HLL_4) {</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span> (compact) {</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> write(os, coupon);</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> write(os, auxHashMap->getAuxIntArr(), auxHashMap->getUpdatableSizeBytes());</div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped </span></div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> uint32_t auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_];</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> std::fill_n(std::ostreambuf_iterator<char>(os), auxBytes, <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0));</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span>}</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="keywordtype">double</span> HllArray<A>::getEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span> (oooFlag_) {</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">return</span> getCompositeEstimate();</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">return</span> hipAccum_;</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span>}</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment">// HLL UPPER AND LOWER BOUNDS</span></div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment"> * The upper and lower bounds are not symmetric and thus are treated slightly differently.</span></div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment"> * For the lower bound, when the unique count is <= k, LB >= numNonZeros, where</span></div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="comment"> * numNonZeros = k - numAtCurMin AND curMin == 0.</span></div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="comment"> * For HLL6 and HLL8, curMin is always 0 and numAtCurMin is initialized to k and is decremented</span></div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span><span class="comment"> * down for each valid update until it reaches 0, where it stays. Thus, for these two</span></div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span><span class="comment"> * isomorphs, when numAtCurMin = 0, means the true curMin is > 0 and the unique count must be</span></div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span><span class="comment"> * greater than k.</span></div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span><span class="comment"> * HLL4 always maintains both curMin and numAtCurMin dynamically. Nonetheless, the rules for</span></div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="comment"> * the very small values <= k where curMin = 0 still apply.</span></div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="keywordtype">double</span> HllArray<A>::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">const</span> <span class="keywordtype">double</span> numNonZeros = ((curMin_ == 0) ? (configK - numAtCurMin_) : configK);</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">const</span> <span class="keywordtype">double</span> relErr = HllUtil<A>::getRelErr(<span class="keyword">false</span>, this->oooFlag_, this->lgConfigK_, numStdDev);</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">return</span> fmax(getEstimate() / (1.0 + relErr), numNonZeros);</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span>}</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="keywordtype">double</span> HllArray<A>::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keyword">const</span> <span class="keywordtype">double</span> relErr = HllUtil<A>::getRelErr(<span class="keyword">true</span>, this->oooFlag_, this->lgConfigK_, numStdDev);</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">return</span> getEstimate() / (1.0 + relErr);</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span>}</div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span></div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="comment">// Original C: again-two-registers.c hhb_get_composite_estimate L1489</span></div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="keywordtype">double</span> HllArray<A>::getCompositeEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">const</span> <span class="keywordtype">double</span> rawEst = getHllRawEstimate();</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keyword">const</span> <span class="keywordtype">double</span>* xArr = CompositeInterpolationXTable<A>::get_x_arr(this->lgConfigK_);</div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="keyword">const</span> uint32_t xArrLen = CompositeInterpolationXTable<A>::get_x_arr_length();</div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">const</span> <span class="keywordtype">double</span> yStride = CompositeInterpolationXTable<A>::get_y_stride(this->lgConfigK_);</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span> (rawEst < xArr[0]) {</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keyword">const</span> uint32_t xArrLenM1 = xArrLen - 1;</div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">if</span> (rawEst > xArr[xArrLenM1]) {</div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keyword">const</span> <span class="keywordtype">double</span> finalY = yStride * xArrLenM1;</div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">const</span> <span class="keywordtype">double</span> factor = finalY / xArr[xArrLenM1];</div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">return</span> rawEst * factor;</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">double</span> adjEst = CubicInterpolation<A>::usingXArrAndYStride(xArr, xArrLen, yStride, rawEst);</div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="comment">// We need to completely avoid the linear_counting estimator if it might have a crazy value.</span></div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="comment">// Empirical evidence suggests that the threshold 3*k will keep us safe if 2^4 <= k <= 2^21.</span></div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span> (adjEst > (3 << this->lgConfigK_)) { <span class="keywordflow">return</span> adjEst; }</div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keyword">const</span> <span class="keywordtype">double</span> linEst = getHllBitMapEstimate();</div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// Bias is created when the value of an estimator is compared with a threshold to decide whether</span></div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="comment">// to use that estimator or a different one.</span></div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="comment">// We conjecture that less bias is created when the average of the two estimators</span></div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="comment">// is compared with the threshold. Empirical measurements support this conjecture.</span></div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keyword">const</span> <span class="keywordtype">double</span> avgEst = (adjEst + linEst) / 2.0;</div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="comment">// The following constants comes from empirical measurements of the crossover point</span></div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="comment">// between the average error of the linear estimator and the adjusted hll estimator</span></div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">double</span> crossOver = 0.64;</div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 4) { crossOver = 0.718; }</div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 5) { crossOver = 0.672; }</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">return</span> (avgEst > (crossOver * (1 << this->lgConfigK_))) ? adjEst : linEst;</div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span>}</div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span><span class="keywordtype">double</span> HllArray<A>::getKxQ0()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">return</span> kxq0_;</div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span>}</div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span><span class="keywordtype">double</span> HllArray<A>::getKxQ1()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">return</span> kxq1_;</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span>}</div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span><span class="keywordtype">double</span> HllArray<A>::getHipAccum()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">return</span> hipAccum_;</div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span>}</div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span>uint8_t HllArray<A>::getCurMin()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">return</span> curMin_;</div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span>}</div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span>uint32_t HllArray<A>::getNumAtCurMin()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">return</span> numAtCurMin_;</div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span>}</div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span><span class="keywordtype">void</span> HllArray<A>::putKxQ0(<span class="keywordtype">double</span> kxq0) {</div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> kxq0_ = kxq0;</div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span>}</div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span><span class="keywordtype">void</span> HllArray<A>::putKxQ1(<span class="keywordtype">double</span> kxq1) {</div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> kxq1_ = kxq1;</div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span>}</div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span><span class="keywordtype">void</span> HllArray<A>::putHipAccum(<span class="keywordtype">double</span> hipAccum) {</div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> hipAccum_ = hipAccum;</div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span>}</div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="keywordtype">void</span> HllArray<A>::putCurMin(uint8_t curMin) {</div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> curMin_ = curMin;</div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span>}</div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span><span class="keywordtype">void</span> HllArray<A>::putNumAtCurMin(uint32_t numAtCurMin) {</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> numAtCurMin_ = numAtCurMin;</div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span>}</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span><span class="keywordtype">bool</span> HllArray<A>::isCompact()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span>}</div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span><span class="keywordtype">bool</span> HllArray<A>::isEmpty()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="comment">// mergeHll() is only called with non-empty sketches and sets this flag after updating the</span></div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="comment">// register array. The cached curMin_/numAtCurMin_ may still have their empty-sketch values,</span></div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="comment">// but a pending rebuild therefore proves that this array is not empty.</span></div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">if</span> (rebuild_kxq_curmin_) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="keywordflow">return</span> (curMin_ == 0) && (numAtCurMin_ == configK);</div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span>}</div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span><span class="keywordtype">void</span> HllArray<A>::putOutOfOrderFlag(<span class="keywordtype">bool</span> flag) {</div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> oooFlag_ = flag;</div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span>}</div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="keywordtype">bool</span> HllArray<A>::isOutOfOrderFlag()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">return</span> oooFlag_;</div>
+<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span>}</div>
+<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span>uint32_t HllArray<A>::hllArrBytes(target_hll_type tgtHllType, uint8_t lgConfigK) {</div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">return</span> hll4ArrBytes(lgConfigK);</div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
+<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">return</span> hll6ArrBytes(lgConfigK);</div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">return</span> hll8ArrBytes(lgConfigK);</div>
+<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid target HLL type"</span>); </div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span>}</div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span>uint32_t HllArray<A>::hll4ArrBytes(uint8_t lgConfigK) {</div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">return</span> 1 << (lgConfigK - 1);</div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span>}</div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span>uint32_t HllArray<A>::hll6ArrBytes(uint8_t lgConfigK) {</div>
+<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keyword">const</span> uint32_t numSlots = 1 << lgConfigK;</div>
+<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">return</span> ((numSlots * 3) >> 2) + 1;</div>
+<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span>}</div>
+<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span>uint32_t HllArray<A>::hll8ArrBytes(uint8_t lgConfigK) {</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">return</span> 1 << lgConfigK;</div>
+<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span>}</div>
+<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> </div>
+<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span>uint32_t HllArray<A>::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START;</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span>}</div>
+<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span>uint32_t HllArray<A>::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes();</div>
+<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span>}</div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span>uint32_t HllArray<A>::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">const</span> uint32_t auxCountBytes = ((auxHashMap == <span class="keyword">nullptr</span>) ? 0 : auxHashMap->getCompactSizeBytes());</div>
+<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes() + auxCountBytes;</div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span>}</div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span>uint8_t HllArray<A>::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">return</span> hll_constants::HLL_PREINTS;</div>
+<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span>}</div>
+<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span>AuxHashMap<A>* HllArray<A>::getAuxHashMap()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span>}</div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span><span class="keyword">auto</span> HllArray<A>::getHllArray() const -> const vector_bytes& {</div>
+<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">return</span> hllByteArr_;</div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span>}</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span><span class="keywordtype">void</span> HllArray<A>::hipAndKxQIncrementalUpdate(uint8_t oldValue, uint8_t newValue) {</div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keyword">const</span> uint32_t configK = 1 << this->getLgConfigK();</div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="comment">// update hip BEFORE updating kxq</span></div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">if</span> (!oooFlag_) { hipAccum_ += configK / (kxq0_ + kxq1_); }</div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="comment">// update kxq0 and kxq1; subtract first, then add</span></div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">if</span> (oldValue < 32) { kxq0_ -= INVERSE_POWERS_OF_2[oldValue]; }</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">else</span> { kxq1_ -= INVERSE_POWERS_OF_2[oldValue]; }</div>
+<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span> (newValue < 32) { kxq0_ += INVERSE_POWERS_OF_2[newValue]; }</div>
+<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">else</span> { kxq1_ += INVERSE_POWERS_OF_2[newValue]; }</div>
+<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span>}</div>
+<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span></div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span><span class="comment">//In C: again-two-registers.c hhb_get_improved_linear_counting_estimate L1274</span></div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span><span class="keywordtype">double</span> HllArray<A>::getHllBitMapEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keyword">const</span> uint32_t numUnhitBuckets = curMin_ == 0 ? numAtCurMin_ : 0;</div>
+<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="comment">//This will eventually go away.</span></div>
+<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">if</span> (numUnhitBuckets == 0) {</div>
+<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">return</span> configK * fdlibm::log(configK / 0.5);</div>
+<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> }</div>
+<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="keyword">const</span> uint32_t numHitBuckets = configK - numUnhitBuckets;</div>
+<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">return</span> HarmonicNumbers<A>::getBitMapEstimate(configK, numHitBuckets);</div>
+<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span>}</div>
+<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span><span class="comment">//In C: again-two-registers.c hhb_get_raw_estimate L1167</span></div>
+<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span><span class="keywordtype">double</span> HllArray<A>::getHllRawEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">double</span> correctionFactor;</div>
+<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 4) { correctionFactor = 0.673; }</div>
+<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 5) { correctionFactor = 0.697; }</div>
+<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 6) { correctionFactor = 0.709; }</div>
+<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">else</span> { correctionFactor = 0.7213 / (1.0 + (1.079 / configK)); }</div>
+<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keyword">const</span> <span class="keywordtype">double</span> hyperEst = (correctionFactor * configK * configK) / (kxq0_ + kxq1_);</div>
+<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">return</span> hyperEst;</div>
+<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span>}</div>
+<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span><span class="keywordtype">void</span> HllArray<A>::setRebuildKxqCurminFlag(<span class="keywordtype">bool</span> rebuild) {</div>
+<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> rebuild_kxq_curmin_ = rebuild;</div>
+<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span>}</div>
+<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> </div>
+<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span><span class="keywordtype">bool</span> HllArray<A>::isRebuildKxqCurminFlag()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">return</span> rebuild_kxq_curmin_;</div>
+<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span>}</div>
+<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span><span class="keywordtype">void</span> HllArray<A>::check_rebuild_kxq_cur_min() {</div>
+<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">if</span> (!rebuild_kxq_curmin_) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="comment">// the deferred rebuild is only ever set on an HLL_8 union gadget. Guarding here also keeps</span></div>
+<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="comment">// this from ever rewriting curMin_ on an HLL_4 array, whose nibbles are stored relative to it.</span></div>
+<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span> (this->getCurMode() != hll_mode::HLL || this->getTgtHllType() != target_hll_type::HLL_8) {</div>
+<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> </div>
+<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> uint32_t num_zeros = 0;</div>
+<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keywordtype">double</span> kxq0 = 1 << this->lgConfigK_;</div>
+<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordtype">double</span> kxq1 = 0;</div>
+<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> </div>
+<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keyword">auto</span> it = this->begin(<span class="keyword">true</span>); <span class="comment">// want all slots, including the empty ones</span></div>
+<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keyword">const</span> <span class="keyword">auto</span> end = this->end();</div>
+<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">while</span> (it != end) {</div>
+<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> uint8_t v = HllUtil<A>::getValue(*it);</div>
+<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">if</span> (v > 0) {</div>
+<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">if</span> (v < 32) { kxq0 += INVERSE_POWERS_OF_2[v] - 1.0; }</div>
+<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">else</span> { kxq1 += INVERSE_POWERS_OF_2[v] - 1.0; }</div>
+<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> ++num_zeros;</div>
+<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> }</div>
+<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> ++it;</div>
+<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> }</div>
+<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> kxq0_ = kxq0;</div>
+<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> kxq1_ = kxq1;</div>
+<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// HLL_8 convention: curMin is always 0 and numAtCurMin is the number of zero registers.</span></div>
+<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <span class="comment">// That is the representation the incremental update path maintains, so the rebuilt state is</span></div>
+<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="comment">// indistinguishable from it and the timing of this rebuild is not observable in the image.</span></div>
+<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> curMin_ = 0;</div>
+<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> numAtCurMin_ = num_zeros;</div>
+<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="comment">// HipAccum is not affected</span></div>
+<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> </div>
+<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span>}</div>
+<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> </div>
+<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span><span class="keyword">typename</span> HllArray<A>::const_iterator HllArray<A>::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">return</span> const_iterator(hllByteArr_.data(), 1 << this->lgConfigK_, 0, this->tgtHllType_, <span class="keyword">nullptr</span>, 0, all);</div>
+<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span>}</div>
+<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> </div>
+<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><span class="keyword">typename</span> HllArray<A>::const_iterator HllArray<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">return</span> const_iterator(hllByteArr_.data(), 1 << this->lgConfigK_, 1 << this->lgConfigK_, this->tgtHllType_, <span class="keyword">nullptr</span>, 0, <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span>}</div>
+<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> </div>
+<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span>HllArray<A>::const_iterator::const_iterator(<span class="keyword">const</span> uint8_t* array, uint32_t array_size, uint32_t index, target_hll_type hll_type, <span class="keyword">const</span> AuxHashMap<A>* exceptions, uint8_t offset, <span class="keywordtype">bool</span> all):</div>
+<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span>array_(array), array_size_(array_size), index_(index), hll_type_(hll_type), exceptions_(exceptions), offset_(offset), all_(all)</div>
+<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span>{</div>
+<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">while</span> (index_ < array_size_) {</div>
+<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> value_ = get_value(array_, index_, hll_type_, exceptions_, offset_);</div>
+<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">if</span> (all_ || value_ != hll_constants::EMPTY) { <span class="keywordflow">break</span>; }</div>
+<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> ++index_;</div>
+<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> }</div>
+<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span>}</div>
+<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> </div>
+<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span><span class="keyword">typename</span> HllArray<A>::const_iterator& HllArray<A>::const_iterator::operator++() {</div>
+<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">while</span> (++index_ < array_size_) {</div>
+<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> value_ = get_value(array_, index_, hll_type_, exceptions_, offset_);</div>
+<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">if</span> (all_ || value_ != hll_constants::EMPTY) { <span class="keywordflow">break</span>; }</div>
+<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> }</div>
+<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span>}</div>
+<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> </div>
+<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span><span class="keywordtype">bool</span> HllArray<A>::const_iterator::operator!=(<span class="keyword">const</span> const_iterator& other)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">return</span> index_ != other.index_;</div>
+<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span>}</div>
+<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> </div>
+<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span><span class="keyword">auto</span> HllArray<A>::const_iterator::operator*() const -> reference {</div>
+<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">return</span> HllUtil<A>::pair(index_, value_);</div>
+<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span>}</div>
+<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> </div>
+<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span>uint8_t HllArray<A>::const_iterator::get_value(<span class="keyword">const</span> uint8_t* array, uint32_t index, target_hll_type hll_type, <span class="keyword">const</span> AuxHashMap<A>* exceptions, uint8_t offset) {</div>
+<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="comment">// TODO: we should be able to improve efficiency here by reading multiple bytes at a time</span></div>
+<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> <span class="comment">// for HLL4 and HLL6</span></div>
+<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">if</span> (hll_type == target_hll_type::HLL_4) {</div>
+<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> uint8_t value = array[index >> 1];</div>
+<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keywordflow">if</span> ((index & 1) > 0) { <span class="comment">// odd</span></div>
+<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> value >>= 4;</div>
+<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> value &= hll_constants::loNibbleMask;</div>
+<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> }</div>
+<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">if</span> (value == hll_constants::AUX_TOKEN) { <span class="comment">// exception</span></div>
+<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">return</span> exceptions->mustFindValueFor(index);</div>
+<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> }</div>
+<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">return</span> value + offset;</div>
+<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hll_type == target_hll_type::HLL_6) {</div>
+<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_bit = index * 6;</div>
+<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keyword">const</span> uint8_t shift = start_bit & 0x7;</div>
+<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> byte_idx = start_bit >> 3;</div>
+<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keyword">const</span> uint16_t two_byte_val = (array[byte_idx + 1] << 8) | array[byte_idx];</div>
+<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">return</span> (two_byte_val >> shift) & hll_constants::VAL_MASK_6;</div>
+<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> }</div>
+<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="comment">// HLL_8</span></div>
+<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">return</span> array[index];</div>
+<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span>}</div>
+<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span>A HllArray<A>::getAllocator()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">return</span> hllByteArr_.get_allocator();</div>
+<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span>}</div>
+<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> </div>
+<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span>}</div>
+<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> </div>
+<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span><span class="preprocessor">#endif </span><span class="comment">// _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:74</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition</b> hll.hpp:73</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_array_8hpp_source.html b/docs/5.3.0/_hll_array_8hpp_source.html
new file mode 100644
index 00000000..35e23b2e
--- /dev/null
+++ b/docs/5.3.0/_hll_array_8hpp_source.html
@@ -0,0 +1,260 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllArray.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllArray.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLARRAY_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLARRAY_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>AuxHashMap;</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>HllArray : <span class="keyword">public</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl</a><A> {</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">using </span>vector_bytes = std::vector<uint8_t, typename std::allocator_traits<A>::template rebind_alloc<uint8_t>>;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> HllArray(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">explicit</span> HllArray(<span class="keyword">const</span> HllArray& other, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">static</span> HllArray* newHll(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">static</span> HllArray* newHll(std::istream& is, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">virtual</span> vector_bytes serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> serialize(std::ostream& os, <span class="keywordtype">bool</span> compact) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">virtual</span> ~HllArray() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">virtual</span> HllArray* copy() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">virtual</span> HllArray* copyAs(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon) = 0;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getCompositeEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getLowerBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getUpperBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">inline</span> uint8_t getCurMin() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">inline</span> uint32_t getNumAtCurMin() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> getHipAccum() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">virtual</span> uint32_t getCompactSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isOutOfOrderFlag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isEmpty() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCompact() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> putOutOfOrderFlag(<span class="keywordtype">bool</span> flag);</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> getKxQ0() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> getKxQ1() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> putCurMin(uint8_t curMin);</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> putHipAccum(<span class="keywordtype">double</span> hipAccum);</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> putKxQ0(<span class="keywordtype">double</span> kxq0);</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> putKxQ1(<span class="keywordtype">double</span> kxq1);</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> putNumAtCurMin(uint32_t numAtCurMin);</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">static</span> uint32_t hllArrBytes(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, uint8_t lgConfigK);</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">static</span> uint32_t hll4ArrBytes(uint8_t lgConfigK);</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">static</span> uint32_t hll6ArrBytes(uint8_t lgConfigK);</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">static</span> uint32_t hll8ArrBytes(uint8_t lgConfigK);</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">virtual</span> AuxHashMap<A>* getAuxHashMap() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">void</span> setRebuildKxqCurminFlag(<span class="keywordtype">bool</span> rebuild);</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">bool</span> isRebuildKxqCurminFlag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">class </span>const_iterator;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">virtual</span> const_iterator begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">virtual</span> const_iterator end() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">virtual</span> A getAllocator() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">const</span> vector_bytes& getHllArray() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">void</span> hipAndKxQIncrementalUpdate(uint8_t oldValue, uint8_t newValue);</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">double</span> getHllBitMapEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">double</span> getHllRawEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">double</span> hipAccum_;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">double</span> kxq0_;</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">double</span> kxq1_;</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> vector_bytes hllByteArr_; <span class="comment">//init by sub-classes</span></div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> uint8_t curMin_; <span class="comment">//always zero for Hll6 and Hll8, only tracked by Hll4Array</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> uint32_t numAtCurMin_; <span class="comment">//interpreted as num zeros when curMin == 0</span></div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">bool</span> oooFlag_; <span class="comment">//Out-Of-Order Flag</span></div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">bool</span> rebuild_kxq_curmin_; <span class="comment">// flag to recompute</span></div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory<A>;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span>};</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="keyword">class </span>HllArray<A>::const_iterator {</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">using </span>iterator_category = std::input_iterator_tag;</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">using </span>value_type = uint32_t;</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">using </span>difference_type = void;</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">using </span>pointer = uint32_t*;</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">using </span>reference = uint32_t;</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> const_iterator(<span class="keyword">const</span> uint8_t* array, uint32_t array_slze, uint32_t index, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> hll_type, <span class="keyword">const</span> AuxHashMap<A>* exceptions, uint8_t offset, <span class="keywordtype">bool</span> all);</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> const_iterator& operator++();</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> const_iterator& other) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> reference operator*() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="keyword">private</span>:</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">const</span> uint8_t* array_;</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> uint32_t array_size_;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> uint32_t index_;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> hll_type_;</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> AuxHashMap<A>* exceptions_;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> uint8_t offset_;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">bool</span> all_;</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> uint8_t value_; <span class="comment">// cached value to avoid computing in operator++ and in operator*()</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">static</span> <span class="keyword">inline</span> uint8_t get_value(<span class="keyword">const</span> uint8_t* array, uint32_t index, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> hll_type, <span class="keyword">const</span> AuxHashMap<A>* exceptions, uint8_t offset);</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span>};</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>}</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="preprocessor">#endif </span><span class="comment">/* _HLLARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_sketch-internal_8hpp_source.html b/docs/5.3.0/_hll_sketch-internal_8hpp_source.html
new file mode 100644
index 00000000..d52f2b33
--- /dev/null
+++ b/docs/5.3.0/_hll_sketch-internal_8hpp_source.html
@@ -0,0 +1,572 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllSketch-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllSketch-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLSKETCH_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLSKETCH_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "hll.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "HllSketchImplFactory.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include "common_defs.hpp"</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include <cstdio></span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#include <cstdlib></span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include <string></span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> int64_t longBytes;</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> doubleBytes;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>} longDoubleUnion;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>hll_sketch_alloc<A>::hll_sketch_alloc(uint8_t lg_config_k, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgt_type, <span class="keywordtype">bool</span> start_full_size, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> HllUtil<A>::checkLgK(lg_config_k);</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">if</span> (start_full_size) {</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> sketch_impl = HllSketchImplFactory<A>::newHll(lg_config_k, tgt_type, allocator);</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<CouponList<A>> clAlloc;</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> sketch_impl = <span class="keyword">new</span> (clAlloc(allocator).allocate(1)) CouponList<A>(lg_config_k, tgt_type, hll_mode::LIST, allocator);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>}</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>hll_sketch_alloc<A> hll_sketch_alloc<A>::deserialize(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* impl = HllSketchImplFactory<A>::deserialize(is, allocator);</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> hll_sketch_alloc<A>(impl);</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>}</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>hll_sketch_alloc<A> hll_sketch_alloc<A>::deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* impl = HllSketchImplFactory<A>::deserialize(bytes, len, allocator);</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">return</span> hll_sketch_alloc<A>(impl);</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span>}</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>hll_sketch_alloc<A>::~hll_sketch_alloc() {</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (sketch_impl != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> sketch_impl->get_deleter()(sketch_impl);</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>}</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>hll_sketch_alloc<A>::hll_sketch_alloc(<span class="keyword">const</span> hll_sketch_alloc<A>& that) :</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> sketch_impl(that.sketch_impl->copy())</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span>{}</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>hll_sketch_alloc<A>::hll_sketch_alloc(<span class="keyword">const</span> hll_sketch_alloc<A>& that, target_hll_type tgt_type) :</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> sketch_impl(that.sketch_impl->copyAs(tgt_type))</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span>{}</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>hll_sketch_alloc<A>::hll_sketch_alloc(hll_sketch_alloc<A>&& that) noexcept :</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> sketch_impl(<span class="keyword">nullptr</span>)</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>{</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> std::swap(sketch_impl, that.sketch_impl);</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>}</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>hll_sketch_alloc<A>::hll_sketch_alloc(HllSketchImpl<A>* that) :</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> sketch_impl(that)</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>{}</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>hll_sketch_alloc<A>& hll_sketch_alloc<A>::operator=(<span class="keyword">const</span> hll_sketch_alloc<A>& other) {</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> sketch_impl->get_deleter()(sketch_impl);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> sketch_impl = other.sketch_impl->copy();</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span>}</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span>hll_sketch_alloc<A>& hll_sketch_alloc<A>::operator=(hll_sketch_alloc<A>&& other) {</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> std::swap(sketch_impl, other.sketch_impl);</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::reset(<span class="keywordtype">bool</span> full_size) {</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> sketch_impl = sketch_impl->reset(full_size);</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>}</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keyword">const</span> std::string& datum) {</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (datum.empty()) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> HashState hashResult;</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> HllUtil<A>::hash(datum.c_str(), datum.length(), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span>}</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint64_t datum) {</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// no sign extension with 64 bits so no need to cast to signed value</span></div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> HashState hashResult;</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> HllUtil<A>::hash(&datum, <span class="keyword">sizeof</span>(uint64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span>}</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint32_t datum) {</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> update(<span class="keyword">static_cast<</span>int32_t<span class="keyword">></span>(datum));</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span>}</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint16_t datum) {</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> update(<span class="keyword">static_cast<</span>int16_t<span class="keyword">></span>(datum));</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>}</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint8_t datum) {</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> update(<span class="keyword">static_cast<</span>int8_t<span class="keyword">></span>(datum));</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int64_t datum) {</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> HashState hashResult;</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> HllUtil<A>::hash(&datum, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span>}</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int32_t datum) {</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">const</span> int64_t val = <span class="keyword">static_cast<</span>int64_t<span class="keyword">></span>(datum);</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> HashState hashResult;</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> HllUtil<A>::hash(&val, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>}</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int16_t datum) {</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">const</span> int64_t val = <span class="keyword">static_cast<</span>int64_t<span class="keyword">></span>(datum);</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> HashState hashResult;</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> HllUtil<A>::hash(&val, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span>}</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int8_t datum) {</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">const</span> int64_t val = <span class="keyword">static_cast<</span>int64_t<span class="keyword">></span>(datum);</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> HashState hashResult;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> HllUtil<A>::hash(&val, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span>}</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keywordtype">double</span> datum) {</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> longDoubleUnion d;</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> d.doubleBytes = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(datum);</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span> (datum == 0.0) {</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> d.doubleBytes = 0.0; <span class="comment">// canonicalize -0.0 to 0.0</span></div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::isnan(d.doubleBytes)) {</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> d.longBytes = 0x7ff8000000000000L; <span class="comment">// canonicalize NaN using value from Java's Double.doubleToLongBits()</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> HashState hashResult;</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> HllUtil<A>::hash(&d, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span>}</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keywordtype">float</span> datum) {</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> longDoubleUnion d;</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> d.doubleBytes = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(datum);</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">if</span> (datum == 0.0) {</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> d.doubleBytes = 0.0; <span class="comment">// canonicalize -0.0 to 0.0</span></div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::isnan(d.doubleBytes)) {</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> d.longBytes = 0x7ff8000000000000L; <span class="comment">// canonicalize NaN using value from Java's Double.doubleToLongBits()</span></div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> HashState hashResult;</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> HllUtil<A>::hash(&d, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span>}</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keyword">const</span> <span class="keywordtype">void</span>* data, <span class="keywordtype">size_t</span> lengthBytes) {</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> (data == <span class="keyword">nullptr</span>) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> HashState hashResult;</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> HllUtil<A>::hash(data, lengthBytes, DEFAULT_SEED, hashResult);</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span>}</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::coupon_update(uint32_t coupon) {</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span> (coupon == hll_constants::EMPTY) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> HllSketchImpl<A>* result = this->sketch_impl->couponUpdate(coupon);</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span> (result != this->sketch_impl) {</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> this->sketch_impl->get_deleter()(this->sketch_impl);</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> this->sketch_impl = result;</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>}</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::serialize_compact(std::ostream& os)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">return</span> sketch_impl->serialize(os, <span class="keyword">true</span>);</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span>}</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="keywordtype">void</span> hll_sketch_alloc<A>::serialize_updatable(std::ostream& os)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">return</span> sketch_impl->serialize(os, <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span>}</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="keyword">auto</span> hll_sketch_alloc<A>::serialize_compact(<span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -> vector_bytes {</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">return</span> sketch_impl->serialize(<span class="keyword">true</span>, header_size_bytes);</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span>}</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="keyword">auto</span> hll_sketch_alloc<A>::serialize_updatable() const -> vector_bytes {</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> sketch_impl->serialize(<span class="keyword">false</span>, 0);</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span>}</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span>string<A> hll_sketch_alloc<A>::to_string(<span class="keyword">const</span> <span class="keywordtype">bool</span> summary,</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> detail,</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> aux_detail,</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// Using a temporary stream for implementation here does not comply with AllocatorAwareContainer requirements.</span></div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// The stream does not support passing an allocator instance, and alternatives are complicated.</span></div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> std::stringstream os;</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span> (summary) {</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> os << <span class="stringliteral">"### HLL sketch summary:"</span> << std::endl</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> << <span class="stringliteral">" Log Config K : "</span> << std::to_string(get_lg_config_k()) << std::endl</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> << <span class="stringliteral">" Hll Target : "</span> << type_as_string() << std::endl</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> << <span class="stringliteral">" Current Mode : "</span> << mode_as_string() << std::endl</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> << <span class="stringliteral">" LB : "</span> << get_lower_bound(1) << std::endl</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> << <span class="stringliteral">" Estimate : "</span> << get_estimate() << std::endl</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> << <span class="stringliteral">" UB : "</span> << get_upper_bound(1) << std::endl</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> << <span class="stringliteral">" OutOfOrder flag: "</span> << (is_out_of_order_flag() ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>) << std::endl;</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span> (get_current_mode() == HLL) {</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> HllArray<A>* hllArray = (HllArray<A>*) sketch_impl;</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> os << <span class="stringliteral">" CurMin : "</span> << std::to_string(hllArray->getCurMin()) << std::endl</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> << <span class="stringliteral">" NumAtCurMin : "</span> << hllArray->getNumAtCurMin() << std::endl</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> << <span class="stringliteral">" HipAccum : "</span> << hllArray->getHipAccum() << std::endl</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> << <span class="stringliteral">" KxQ0 : "</span> << hllArray->getKxQ0() << std::endl</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> << <span class="stringliteral">" KxQ1 : "</span> << hllArray->getKxQ1() << std::endl;</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span> (get_target_type() == HLL_4) {</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">const</span> Hll4Array<A>* hll4_ptr = <span class="keyword">static_cast<</span><span class="keyword">const </span>Hll4Array<A>*<span class="keyword">></span>(sketch_impl);</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> os << <span class="stringliteral">" Aux table? : "</span> << (hll4_ptr->getAuxHashMap() != <span class="keyword">nullptr</span> ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>) << std::endl;</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> os << <span class="stringliteral">" Coupon count : "</span></div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> << std::to_string(((CouponList<A>*) sketch_impl)->getCouponCount()) << std::endl;</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> }</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> os << <span class="stringliteral">"### End HLL sketch summary"</span> << std::endl;</div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> }</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span> (detail) {</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> os << <span class="stringliteral">"### HLL sketch data detail:"</span> << std::endl;</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span> (get_current_mode() == HLL) {</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">const</span> HllArray<A>* hll_ptr = <span class="keyword">static_cast<</span><span class="keyword">const </span>HllArray<A>*<span class="keyword">></span>(sketch_impl);</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> os << std::left << std::setw(10) << <span class="stringliteral">"Slot"</span> << std::setw(6) << <span class="stringliteral">"Value"</span> << std::endl;</div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keyword">auto</span> it = hll_ptr->begin(all);</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">while</span> (it != hll_ptr->end()) {</div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> os << std::setw(10) << HllUtil<A>::getLow26(*it);</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> os << std::setw(6) << HllUtil<A>::getValue(*it);</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> os << std::endl;</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> ++it;</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">const</span> CouponList<A>* list_ptr = <span class="keyword">static_cast<</span><span class="keyword">const </span>CouponList<A>*<span class="keyword">></span>(sketch_impl);</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> os << std::left;</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> os << std::setw(10) << <span class="stringliteral">"Index"</span>;</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> os << std::setw(10) << <span class="stringliteral">"Key"</span>;</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> os << std::setw(10) << <span class="stringliteral">"Slot"</span>;</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> os << std::setw(6) << <span class="stringliteral">"Value"</span>;</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> os << std::endl;</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">auto</span> it = list_ptr->begin(all);</div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordtype">int</span> mask = (1 << get_lg_config_k()) - 1;</div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">while</span> (it != list_ptr->end()) {</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> os << std::setw(10) << i;</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> os << std::setw(10) << HllUtil<A>::getLow26(*it);</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> os << std::setw(10) << (HllUtil<A>::getLow26(*it) & mask);</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> os << std::setw(6) << HllUtil<A>::getValue(*it);</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> os << std::endl;</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> ++it;</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> ++i;</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> os << <span class="stringliteral">"### End HLL sketch data detail"</span> << std::endl;</div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span> (aux_detail) {</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span> ((get_current_mode() == HLL) && (get_target_type() == HLL_4)) {</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">const</span> Hll4Array<A>* hll4_ptr = <span class="keyword">static_cast<</span><span class="keyword">const </span>Hll4Array<A>*<span class="keyword">></span>(sketch_impl);</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">const</span> AuxHashMap<A>* aux_ptr = hll4_ptr->getAuxHashMap();</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">if</span> (aux_ptr != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> os << <span class="stringliteral">"### HLL sketch aux detail:"</span> << std::endl;</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> os << std::left;</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> os << std::setw(10) << <span class="stringliteral">"Index"</span>;</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> os << std::setw(10) << <span class="stringliteral">"Key"</span>;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> os << std::setw(10) << <span class="stringliteral">"Slot"</span>;</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> os << std::setw(6) << <span class="stringliteral">"Value"</span>;</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> os << std::endl;</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">auto</span> it = aux_ptr->begin(all);</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keywordtype">int</span> mask = (1 << get_lg_config_k()) - 1;</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">while</span> (it != aux_ptr->end()) {</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> os << std::setw(10) << i;</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> os << std::setw(10) << HllUtil<A>::getLow26(*it);</div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> os << std::setw(10) << (HllUtil<A>::getLow26(*it) & mask);</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> os << std::setw(6) << HllUtil<A>::getValue(*it);</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> os << std::endl;</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> ++it;</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> ++i;</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> }</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> os << <span class="stringliteral">"### End HLL sketch aux detail"</span> << std::endl;</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> }</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> string<A>(os.str().c_str(), sketch_impl->getAllocator());</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>}</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="keywordtype">double</span> hll_sketch_alloc<A>::get_estimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">return</span> sketch_impl->getEstimate();</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span>}</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span><span class="keywordtype">double</span> hll_sketch_alloc<A>::get_composite_estimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">return</span> sketch_impl->getCompositeEstimate();</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span>}</div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span><span class="keywordtype">double</span> hll_sketch_alloc<A>::get_lower_bound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">return</span> sketch_impl->getLowerBound(numStdDev);</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span>}</div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="keywordtype">double</span> hll_sketch_alloc<A>::get_upper_bound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">return</span> sketch_impl->getUpperBound(numStdDev);</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span>}</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span>hll_mode hll_sketch_alloc<A>::get_current_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">return</span> sketch_impl->getCurMode();</div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span>}</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span>uint8_t hll_sketch_alloc<A>::get_lg_config_k()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">return</span> sketch_impl->getLgConfigK();</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span>}</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> hll_sketch_alloc<A>::get_target_type()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">return</span> sketch_impl->getTgtHllType();</div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span>}</div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_out_of_order_flag()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">return</span> sketch_impl->isOutOfOrderFlag();</div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span>}</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_estimation_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span>}</div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span>uint32_t hll_sketch_alloc<A>::get_updatable_serialization_bytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">return</span> sketch_impl->getUpdatableSerializationBytes();</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span>}</div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>uint32_t hll_sketch_alloc<A>::get_compact_serialization_bytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">return</span> sketch_impl->getCompactSerializationBytes();</div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span>}</div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span><span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_compact()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">return</span> sketch_impl->isCompact();</div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span>}</div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span><span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_empty()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">return</span> sketch_impl->isEmpty();</div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span>}</div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span>std::string hll_sketch_alloc<A>::type_as_string()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">switch</span> (sketch_impl->getTgtHllType()) {</div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">case</span> target_hll_type::HLL_4:</div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL_4"</span>);</div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">case</span> target_hll_type::HLL_6:</div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL_6"</span>);</div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">case</span> target_hll_type::HLL_8:</div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL_8"</span>);</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Sketch state error: Invalid target_hll_type"</span>);</div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> }</div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span>}</div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span>std::string hll_sketch_alloc<A>::mode_as_string()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">switch</span> (sketch_impl->getCurMode()) {</div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">case</span> LIST:</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">return</span> std::string(<span class="stringliteral">"LIST"</span>);</div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">case</span> SET:</div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">return</span> std::string(<span class="stringliteral">"SET"</span>);</div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">case</span> HLL:</div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL"</span>);</div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Sketch state error: Invalid hll_mode"</span>);</div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> }</div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span>}</div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span>uint32_t hll_sketch_alloc<A>::get_max_updatable_serialization_bytes(uint8_t lg_config_k,</div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="keyword">const</span> target_hll_type tgtHllType) {</div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> uint32_t arrBytes;</div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span> (tgtHllType == target_hll_type::HLL_4) {</div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keyword">const</span> uint32_t auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[lg_config_k];</div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> arrBytes = HllArray<A>::hll4ArrBytes(lg_config_k) + auxBytes;</div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tgtHllType == target_hll_type::HLL_6) {</div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> arrBytes = HllArray<A>::hll6ArrBytes(lg_config_k);</div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> } <span class="keywordflow">else</span> { <span class="comment">//HLL_8</span></div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> arrBytes = HllArray<A>::hll8ArrBytes(lg_config_k);</div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> }</div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + arrBytes;</div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span>}</div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span><span class="keywordtype">double</span> hll_sketch_alloc<A>::get_rel_err(<span class="keywordtype">bool</span> upperBound, <span class="keywordtype">bool</span> unioned,</div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> uint8_t lg_config_k, uint8_t numStdDev) {</div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">return</span> HllUtil<A>::getRelErr(upperBound, unioned, lg_config_k, numStdDev);</div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span>}</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span>}</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span><span class="preprocessor">#endif </span><span class="comment">// _HLLSKETCH_INTERNAL_HPP_</span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_sketch_impl-internal_8hpp_source.html b/docs/5.3.0/_hll_sketch_impl-internal_8hpp_source.html
new file mode 100644
index 00000000..bf9c8a74
--- /dev/null
+++ b/docs/5.3.0/_hll_sketch_impl-internal_8hpp_source.html
@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllSketchImpl-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllSketchImpl-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLSKETCHIMPL_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLSKETCHIMPL_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "HllSketchImplFactory.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>HllSketchImpl<A>::HllSketchImpl(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType,</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> hll_mode mode)</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> : lgConfigK_(lgConfigK),</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> tgtHllType_(tgtHllType),</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> mode_(mode)</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>{</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>}</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>HllSketchImpl<A>::~HllSketchImpl() {</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>}</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> HllSketchImpl<A>::extractTgtHllType(uint8_t modeByte) {</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">switch</span> ((modeByte >> 2) & 0x3) {</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">return</span> target_hll_type::HLL_4;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> target_hll_type::HLL_6;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> target_hll_type::HLL_8;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid target HLL type"</span>);</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> }</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>}</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>hll_mode HllSketchImpl<A>::extractCurMode(uint8_t modeByte) {</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">switch</span> (modeByte & 0x3) {</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> hll_mode::LIST;</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">return</span> hll_mode::SET;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">return</span> hll_mode::HLL;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid current sketch mode"</span>);</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>}</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>uint8_t HllSketchImpl<A>::makeFlagsByte(<span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> uint8_t flags = 0;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> flags |= (isEmpty() ? hll_constants::EMPTY_FLAG_MASK : 0);</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> flags |= (compact ? hll_constants::COMPACT_FLAG_MASK : 0);</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> flags |= (isOutOfOrderFlag() ? hll_constants::OUT_OF_ORDER_FLAG_MASK : 0);</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// bit 32 is reserved: see RESERVED_FLAG_MASK_32 in HllUtil.hpp</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> flags;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>}</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">// lo2bits = curMode, next 2 bits = tgtHllType</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">// Dec Lo4Bits TgtHllType, CurMode</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// 0 0000 HLL_4, LIST</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment">// 1 0001 HLL_4, SET</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment">// 2 0010 HLL_4, HLL</span></div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment">// 4 0100 HLL_6, LIST</span></div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment">// 5 0101 HLL_6, SET</span></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment">// 6 0110 HLL_6, HLL</span></div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment">// 8 1000 HLL_8, LIST</span></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment">// 9 1001 HLL_8, SET</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment">// 10 1010 HLL_8, HLL</span></div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>uint8_t HllSketchImpl<A>::makeModeByte()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> uint8_t <span class="keywordtype">byte</span> = 0;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">switch</span> (mode_) {</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">case</span> LIST:</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">byte</span> = 0;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">case</span> SET:</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">byte</span> = 1;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">case</span> HLL:</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">byte</span> = 2;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">switch</span> (tgtHllType_) {</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">byte</span> |= (0 << 2); <span class="comment">// for completeness</span></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">byte</span> |= (1 << 2);</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">byte</span> |= (2 << 2); </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">return</span> byte;</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>}</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span>HllSketchImpl<A>* HllSketchImpl<A>::reset(<span class="keywordtype">bool</span> full_size) {</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> HllSketchImplFactory<A>::reset(<span class="keyword">this</span>, full_size);</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>}</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> HllSketchImpl<A>::getTgtHllType()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> tgtHllType_;</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span>}</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span>uint8_t HllSketchImpl<A>::getLgConfigK()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span> lgConfigK_;</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span>}</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>hll_mode HllSketchImpl<A>::getCurMode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> mode_;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span>}</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor">#endif </span><span class="comment">// _HLLSKETCHIMPL_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:74</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition</b> hll.hpp:73</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_sketch_impl_8hpp_source.html b/docs/5.3.0/_hll_sketch_impl_8hpp_source.html
new file mode 100644
index 00000000..9546a53e
--- /dev/null
+++ b/docs/5.3.0/_hll_sketch_impl_8hpp_source.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllSketchImpl.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllSketchImpl.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLSKETCHIMPL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLSKETCHIMPL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "hll.hpp"</span> <span class="comment">// for TgtHllType</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00031" data-start="{" data-end="};">
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classdatasketches_1_1_hll_sketch_impl.html"> 31</a></span><span class="keyword">class </span>HllSketchImpl {</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">using </span>vector_bytes = std::vector<uint8_t, typename std::allocator_traits<A>::template rebind_alloc<uint8_t>>;</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> HllSketchImpl(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode);</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">virtual</span> ~HllSketchImpl();</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> serialize(std::ostream& os, <span class="keywordtype">bool</span> compact) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">virtual</span> vector_bytes serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">virtual</span> HllSketchImpl* copy() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">virtual</span> HllSketchImpl* copyAs(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> HllSketchImpl<A>* reset(<span class="keywordtype">bool</span> full_size);</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">virtual</span> std::function<void(HllSketchImpl<A>*)> get_deleter() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">virtual</span> HllSketchImpl* couponUpdate(uint32_t coupon) = 0;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> hll_mode getCurMode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getEstimate() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getCompositeEstimate() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getUpperBound(uint8_t numStdDev) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getLowerBound(uint8_t numStdDev) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">inline</span> uint8_t getLgConfigK() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> getTgtHllType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">virtual</span> uint32_t getCompactSerializationBytes() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCompact() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isEmpty() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isOutOfOrderFlag() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag) = 0;</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">virtual</span> A getAllocator() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">static</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> extractTgtHllType(uint8_t modeByte);</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">static</span> hll_mode extractCurMode(uint8_t modeByte);</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> uint8_t makeFlagsByte(<span class="keywordtype">bool</span> compact) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> uint8_t makeModeByte() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> uint8_t lgConfigK_;</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType_;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">const</span> hll_mode mode_;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span>};</div>
+</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>}</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="preprocessor">#endif </span><span class="comment">// _HLLSKETCHIMPL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_sketch_impl_factory_8hpp_source.html b/docs/5.3.0/_hll_sketch_impl_factory_8hpp_source.html
new file mode 100644
index 00000000..142de8c9
--- /dev/null
+++ b/docs/5.3.0/_hll_sketch_impl_factory_8hpp_source.html
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllSketchImplFactory.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllSketchImplFactory.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLSKETCHIMPLFACTORY_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLSKETCHIMPLFACTORY_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include "CouponHashSet.hpp"</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include "Hll4Array.hpp"</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#include "Hll6Array.hpp"</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include "Hll8Array.hpp"</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">class </span>HllSketchImplFactory final {</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">static</span> HllSketchImpl<A>* deserialize(std::istream& os, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">static</span> HllSketchImpl<A>* deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static</span> CouponHashSet<A>* promoteListToSet(<span class="keyword">const</span> CouponList<A>& list);</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">static</span> HllArray<A>* promoteListOrSetToHll(<span class="keyword">const</span> CouponList<A>& list);</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">static</span> HllArray<A>* newHll(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// resets the input impl, deleting the input pointer and returning a new pointer</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// full_size selects the state to reset to: an empty HLL array, or LIST (coupon) mode</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> HllSketchImpl<A>* reset(HllSketchImpl<A>* impl, <span class="keywordtype">bool</span> full_size);</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> Hll4Array<A>* convertToHll4(<span class="keyword">const</span> HllArray<A>& srcHllArr);</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> Hll6Array<A>* convertToHll6(<span class="keyword">const</span> HllArray<A>& srcHllArr);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> Hll8Array<A>* convertToHll8(<span class="keyword">const</span> HllArray<A>& srcHllArr);</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>};</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>CouponHashSet<A>* HllSketchImplFactory<A>::promoteListToSet(<span class="keyword">const</span> CouponList<A>& list) {</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">using </span>ChsAlloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<CouponHashSet<A>>;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> CouponHashSet<A>* chSet = <span class="keyword">new</span> (ChsAlloc(list.getAllocator()).allocate(1)) CouponHashSet<A>(list.getLgConfigK(), list.getTgtHllType(), list.getAllocator());</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: list) {</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> chSet->couponUpdate(coupon);</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> chSet;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>}</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>HllArray<A>* HllSketchImplFactory<A>::promoteListOrSetToHll(<span class="keyword">const</span> CouponList<A>& src) {</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> HllArray<A>* tgtHllArr = HllSketchImplFactory<A>::newHll(src.getLgConfigK(), src.getTgtHllType(), src.getAllocator());</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> tgtHllArr->putKxQ0(1 << src.getLgConfigK());</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: src) {</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> tgtHllArr->couponUpdate(coupon);</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> tgtHllArr->putHipAccum(src.getEstimate());</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> tgtHllArr->putOutOfOrderFlag(<span class="keyword">false</span>);</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> tgtHllArr;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>}</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* HllSketchImplFactory<A>::deserialize(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// we'll hand off the sketch based on PreInts so we don't need</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// to move the stream pointer back and forth -- perhaps somewhat fragile?</span></div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">const</span> uint8_t preInts = <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(is.peek());</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (preInts == hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">return</span> HllArray<A>::newHll(is, allocator);</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> CouponHashSet<A>::newSet(is, allocator);</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">return</span> CouponList<A>::newList(is, allocator);</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize unknown object type"</span>);</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>}</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* HllSketchImplFactory<A>::deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// read current mode directly</span></div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> uint8_t preInts = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(bytes)[0];</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (preInts == hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> HllArray<A>::newHll(bytes, len, allocator);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> CouponHashSet<A>::newSet(bytes, len, allocator);</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> CouponList<A>::newList(bytes, len, allocator);</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize unknown object type"</span>);</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>HllArray<A>* HllSketchImplFactory<A>::newHll(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">using </span>Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll8Array<A>>;</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll8Alloc(allocator).allocate(1)) Hll8Array<A>(lgConfigK, allocator);</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">using </span>Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll6Array<A>>;</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll6Alloc(allocator).allocate(1)) Hll6Array<A>(lgConfigK, allocator);</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">using </span>Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll4Array<A>>;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll4Alloc(allocator).allocate(1)) Hll4Array<A>(lgConfigK, allocator);</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Invalid target_hll_type"</span>);</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>}</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* HllSketchImplFactory<A>::reset(<a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* impl, <span class="keywordtype">bool</span> full_size) {</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (full_size) {</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> HllArray<A>* hll = newHll(impl->getLgConfigK(), impl->getTgtHllType(), impl->getAllocator());</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> impl->get_deleter()(impl);</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> hll;</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">using </span>ClAlloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<CouponList<A>>;</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> CouponList<A>* cl = <span class="keyword">new</span> (ClAlloc(impl->getAllocator()).allocate(1)) CouponList<A>(impl->getLgConfigK(), impl->getTgtHllType(), hll_mode::LIST, impl->getAllocator());</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> impl->get_deleter()(impl);</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> cl;</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span>}</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>Hll4Array<A>* HllSketchImplFactory<A>::convertToHll4(<span class="keyword">const</span> HllArray<A>& srcHllArr) {</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">using </span>Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll4Array<A>>;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll4Alloc(srcHllArr.getAllocator()).allocate(1)) Hll4Array<A>(srcHllArr);</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span>}</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span>Hll6Array<A>* HllSketchImplFactory<A>::convertToHll6(<span class="keyword">const</span> HllArray<A>& srcHllArr) {</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">using </span>Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll6Array<A>>;</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll6Alloc(srcHllArr.getAllocator()).allocate(1)) Hll6Array<A>(srcHllArr);</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span>Hll8Array<A>* HllSketchImplFactory<A>::convertToHll8(<span class="keyword">const</span> HllArray<A>& srcHllArr) {</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">using </span>Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll8Array<A>>;</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll8Alloc(srcHllArr.getAllocator()).allocate(1)) Hll8Array<A>(srcHllArr);</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span>}</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span>}</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#endif </span><span class="comment">/* _HLLSKETCHIMPLFACTORY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:74</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition</b> hll.hpp:73</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_union-internal_8hpp_source.html b/docs/5.3.0/_hll_union-internal_8hpp_source.html
new file mode 100644
index 00000000..d98e4677
--- /dev/null
+++ b/docs/5.3.0/_hll_union-internal_8hpp_source.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllUnion-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllUnion-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLUNION_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLUNION_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "hll.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include <string></span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00035" data-start="{" data-end="}">
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#abdb81912e4fcd2547e27c0165affbb99"> 35</a></span><a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#abdb81912e4fcd2547e27c0165affbb99">hll_union_alloc<A>::hll_union_alloc</a>(uint8_t lg_max_k, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> lg_max_k_(HllUtil<A>::checkLgK(lg_max_k)),</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> gadget_(lg_max_k, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, false, allocator)</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>{}</div>
+</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00041" data-start="{" data-end="}">
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a505bdafe096c4fc8adef4f8438b2da25"> 41</a></span>hll_sketch_alloc<A> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a505bdafe096c4fc8adef4f8438b2da25">hll_union_alloc<A>::get_result</a>(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> targ [...]
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL) {</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">static_cast<</span>HllArray<A>*<span class="keyword">></span>(gadget_.sketch_impl)->check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> }</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> hll_sketch_alloc<A>(gadget_, target_type);</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>}</div>
+</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00049" data-start="{" data-end="}">
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065"> 49</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(<span class="keyword">const</span> hll_sketch_alloc<A>& sketch) {</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span> (sketch.is_empty()) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> union_impl(sketch, lg_max_k_);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
+</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00055" data-start="{" data-end="}">
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a6562d6c6a8b6055ce297a03d46f9e23b"> 55</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(hll_sketch_alloc<A>&& sketch) {</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (sketch.is_empty()) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span> (gadget_.is_empty() && sketch.get_target_type() == <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a> && sketch.get_lg_config_k() <= lg_max_k_) {</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span> (sketch.get_current_mode() == HLL || sketch.get_lg_config_k() == lg_max_k_) {</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> gadget_ = std::move(sketch);</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> union_impl(sketch, lg_max_k_);</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>}</div>
+</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00066" data-start="{" data-end="}">
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a40375beffaefdf495fec673ff596a71c"> 66</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(<span class="keyword">const</span> std::string& datum) {</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>}</div>
+</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00071" data-start="{" data-end="}">
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#af14c2db5c2ecc7e9da0d04129ddec191"> 71</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint64_t datum) {</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div>
+</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00076" data-start="{" data-end="}">
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a83364bb88e67a91a9f22df5ae7efaa16"> 76</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint32_t datum) {</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>}</div>
+</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00081" data-start="{" data-end="}">
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a24f3f71760ab41d4a4b619c87f99bc98"> 81</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint16_t datum) {</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>}</div>
+</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00086" data-start="{" data-end="}">
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#aedf970792cde586f899d91f043a709f0"> 86</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint8_t datum) {</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>}</div>
+</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00091" data-start="{" data-end="}">
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#aeaa0aaa15ce0bf0012592d845c299ab6"> 91</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int64_t datum) {</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>}</div>
+</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00096" data-start="{" data-end="}">
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a9e6b068da685bb154d212032bed3d83d"> 96</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int32_t datum) {</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>}</div>
+</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00101" data-start="{" data-end="}">
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a90f9920c71e1cbdd6934882c1195e8e8"> 101</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int16_t datum) {</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span>}</div>
+</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a45f5fd3eab94f833da2d5713bcd0e217"> 106</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int8_t datum) {</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
+</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00111" data-start="{" data-end="}">
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#ae4839a6377b3352c0a63538fb74feb35"> 111</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(<span class="keywordtype">double</span> datum) {</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span>}</div>
+</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00116" data-start="{" data-end="}">
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a628d1f56e70ab9fdc5b2bbce80fa8b05"> 116</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(<span class="keywordtype">float</span> datum) {</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> gadget_.update(datum);</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>}</div>
+</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00121" data-start="{" data-end="}">
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#abd154da2b10bd1dbcbbbdcd8e411328d"> 121</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* data, <span class="keywordtype">size_t</s [...]
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> gadget_.update(data, length_bytes);</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>}</div>
+</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="keywordtype">void</span> hll_union_alloc<A>::coupon_update(uint32_t coupon) {</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span> (coupon == HllUtil<A>::EMPTY) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> HllSketchImpl<A>* result = gadget_.sketch_impl->coupon_update(coupon);</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (result != gadget_.sketch_impl) {</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span> (gadget_.sketch_impl != <span class="keyword">nullptr</span>) { gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); }</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> gadget_.sketch_impl = result;</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span>}</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00136" data-start="{" data-end="}">
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a2afb71f2ef2d82290be4c8eafc08f2a2"> 136</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a2afb71f2ef2d82290be4c8eafc08f2a2">hll_union_alloc<A>::get_estimate</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL) {</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">static_cast<</span>HllArray<A>*<span class="keyword">></span>(gadget_.sketch_impl)->check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> gadget_.get_estimate();</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span>}</div>
+</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00144" data-start="{" data-end="}">
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a1d6c3cd1e88796786ea124a7aed3800d"> 144</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a1d6c3cd1e88796786ea124a7aed3800d">hll_union_alloc<A>::get_composite_estimate</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL) {</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">static_cast<</span>HllArray<A>*<span class="keyword">></span>(gadget_.sketch_impl)->check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> gadget_.get_composite_estimate();</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span>}</div>
+</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00152" data-start="{" data-end="}">
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#ab6cbf0e7b9ad7dc653d8cb7bc02e8ee4"> 152</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#ab6cbf0e7b9ad7dc653d8cb7bc02e8ee4">hll_union_alloc<A>::get_lower_bound</a>(uint8_t num_std_dev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL) {</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">static_cast<</span>HllArray<A>*<span class="keyword">></span>(gadget_.sketch_impl)->check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">return</span> gadget_.get_lower_bound(num_std_dev);</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>}</div>
+</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00160" data-start="{" data-end="}">
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#afb6dfbdd1229e025d57402ac22c1cd2c"> 160</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#afb6dfbdd1229e025d57402ac22c1cd2c">hll_union_alloc<A>::get_upper_bound</a>(uint8_t num_std_dev)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL) {</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">static_cast<</span>HllArray<A>*<span class="keyword">></span>(gadget_.sketch_impl)->check_rebuild_kxq_cur_min();</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">return</span> gadget_.get_upper_bound(num_std_dev);</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span>}</div>
+</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00168" data-start="{" data-end="}">
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#aacaad8ccad500578a2cae9bef58ad436"> 168</a></span>uint8_t <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#aacaad8ccad500578a2cae9bef58ad436">hll_union_alloc<A>::get_lg_config_k</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> gadget_.get_lg_config_k();</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span>}</div>
+</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00173" data-start="{" data-end="}">
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#ad20897c5c8bd47f5d4005989bead0e55"> 173</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#ad20897c5c8bd47f5d4005989bead0e55">hll_union_alloc<A>::reset</a>() {</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// always coupon collection mode: the gadget is an internal detail and must not</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// inherit a full-size state from whatever sketches happen to have been unioned in</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> gadget_.reset(<span class="keyword">false</span>);</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span>}</div>
+</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00180" data-start="{" data-end="}">
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a5a2b7a58dc85678d08752945ff655362"> 180</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a5a2b7a58dc85678d08752945ff655362">hll_union_alloc<A>::is_empty</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> gadget_.is_empty();</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span>}</div>
+</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="keywordtype">bool</span> hll_union_alloc<A>::is_out_of_order_flag()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span> gadget_.is_out_of_order_flag();</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>}</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>hll_mode hll_union_alloc<A>::get_current_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">return</span> gadget_.get_current_mode();</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span>}</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="keywordtype">bool</span> hll_union_alloc<A>::is_estimation_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">return</span> gadget_.is_estimation_mode();</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span>}</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00200" data-start="{" data-end="}">
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a0387c920d914fe59fd3c4c53a9a99093"> 200</a></span><a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#a0387c920d914fe59fd3c4c53a9a99093">hll_union_alloc<A>::get_target_type</a>()<span class="keyword"> c [...]
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">target_hll_type::HLL_8</a>;</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span>}</div>
+</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="foldopen" id="foldopen00205" data-start="{" data-end="}">
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#af1abb48488246839a8732c9f20e3f7db"> 205</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classdatasketches_1_1hll__union__alloc.html#af1abb48488246839a8732c9f20e3f7db">hll_union_alloc<A>::get_rel_err</a>(<span class="keywordtype">bool</span> upper_bound, <span class="keywordtype">bool</span> unioned,</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> uint8_t lg_config_k, uint8_t num_std_dev) {</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">return</span> HllUtil<A>::getRelErr(upper_bound, unioned, lg_config_k, num_std_dev);</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span>}</div>
+</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* hll_union_alloc<A>::copy_or_downsample(<span class="keyword">const</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* src_impl, uint8_t tgt_lg_k) {</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span> (src_impl->getCurMode() != HLL) {</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Attempt to downsample non-HLL sketch"</span>);</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">const</span> HllArray<A>* src = <span class="keyword">static_cast<</span><span class="keyword">const </span>HllArray<A>*<span class="keyword">></span>(src_impl);</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">const</span> <span class="keywordtype">int</span> src_lg_k = src->getLgConfigK();</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span> (src_lg_k <= tgt_lg_k) {</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">return</span> src->copyAs(<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>);</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> std::allocator_traits<A>::template rebind_alloc<Hll8Array<A>> hll8Alloc;</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> Hll8Array<A>* tgtHllArr = <span class="keyword">new</span> (hll8Alloc(src->getAllocator()).allocate(1)) Hll8Array<A>(tgt_lg_k, src->getAllocator());</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> tgtHllArr->mergeHll(*src);</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="comment">//both of these are required for isomorphism</span></div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> tgtHllArr->putHipAccum(src->getHipAccum());</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> tgtHllArr->putOutOfOrderFlag(src->isOutOfOrderFlag());</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> tgtHllArr;</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>}</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="keyword">inline</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* hll_union_alloc<A>::leak_free_coupon_update(<a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* impl, uint32_t coupon) {</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* result = impl->couponUpdate(coupon);</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (result != impl) {</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> impl->get_deleter()(impl);</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span>}</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="keywordtype">void</span> hll_union_alloc<A>::union_impl(<span class="keyword">const</span> hll_sketch_alloc<A>& sketch, uint8_t lg_max_k) {</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">const</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* src_impl = sketch.sketch_impl; <span class="comment">//default</span></div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_class" href="classdatasketches_1_1_hll_sketch_impl.html">HllSketchImpl<A></a>* dst_impl = gadget_.sketch_impl; <span class="comment">//default</span></div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span> (src_impl->getCurMode() == LIST || src_impl->getCurMode() == SET) {</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span> (dst_impl->isEmpty() && src_impl->getLgConfigK() == dst_impl->getLgConfigK()) {</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> dst_impl = src_impl->copyAs(<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>);</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">const</span> CouponList<A>* src = <span class="keyword">static_cast<</span><span class="keyword">const </span>CouponList<A>*<span class="keyword">></span>(src_impl);</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> coupon: *src) {</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> dst_impl = leak_free_coupon_update(dst_impl, coupon); <span class="comment">//assignment required</span></div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!dst_impl->isEmpty()) { <span class="comment">// src is HLL</span></div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span> (dst_impl->getCurMode() == LIST || dst_impl->getCurMode() == SET) {</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// swap so that src is LIST or SET, tgt is HLL</span></div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="comment">// use lg_max_k because LIST has effective K of 2^26</span></div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">const</span> CouponList<A>* src = <span class="keyword">static_cast<</span><span class="keyword">const </span>CouponList<A>*<span class="keyword">></span>(dst_impl);</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> dst_impl = copy_or_downsample(src_impl, lg_max_k);</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(dst_impl)->mergeList(*src);</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> } <span class="keywordflow">else</span> { <span class="comment">// gadget is HLL</span></div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span> (src_impl->getLgConfigK() < dst_impl->getLgConfigK()) {</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> dst_impl = copy_or_downsample(dst_impl, sketch.get_lg_config_k());</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">const</span> HllArray<A>* src = <span class="keyword">static_cast<</span><span class="keyword">const </span>HllArray<A>*<span class="keyword">></span>(src_impl);</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(dst_impl)->mergeHll(*src);</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> dst_impl->putOutOfOrderFlag(<span class="keyword">true</span>);</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(dst_impl)->putHipAccum(0);</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> } <span class="keywordflow">else</span> { <span class="comment">// src is HLL, gadget is empty</span></div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> dst_impl = copy_or_downsample(src_impl, lg_max_k);</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> }</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> gadget_.sketch_impl = dst_impl; <span class="comment">// gadget replaced</span></div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span>}</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>}</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="preprocessor">#endif </span><span class="comment">// _HLLUNION_INTERNAL_HPP_</span></div>
+<div class="ttc" id="aclassdatasketches_1_1_hll_sketch_impl_html"><div class="ttname"><a href="classdatasketches_1_1_hll_sketch_impl.html">datasketches::HllSketchImpl</a></div><div class="ttdoc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly im...</div><div class="ttdef"><b>Definition</b> HllSketchImpl.hpp:31</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_a0387c920d914fe59fd3c4c53a9a99093"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#a0387c920d914fe59fd3c4c53a9a99093">datasketches::hll_union_alloc::get_target_type</a></div><div class="ttdeci">target_hll_type get_target_type() const</div><div class="ttdoc">Returns the union's target HLL mode (from target_hll_type).</div><div class="ttdef"><b>Definition</b> HllUnion-internal.hpp:200</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_a1d6c3cd1e88796786ea124a7aed3800d"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#a1d6c3cd1e88796786ea124a7aed3800d">datasketches::hll_union_alloc::get_composite_estimate</a></div><div class="ttdeci">double get_composite_estimate() const</div><div class="ttdoc">This is less accurate than the get_estimate() method and is automatically used when the union has gon...</div><div class="ttdef"><b>Defini [...]
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_a2afb71f2ef2d82290be4c8eafc08f2a2"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#a2afb71f2ef2d82290be4c8eafc08f2a2">datasketches::hll_union_alloc::get_estimate</a></div><div class="ttdeci">double get_estimate() const</div><div class="ttdoc">Returns the current cardinality estimate.</div><div class="ttdef"><b>Definition</b> HllUnion-internal.hpp:136</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_a3af0c80a1b31f0e5dd32d140943bf065"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">datasketches::hll_union_alloc::update</a></div><div class="ttdeci">void update(const hll_sketch_alloc< A > &sketch)</div><div class="ttdoc">Update this union operator with the given sketch.</div><div class="ttdef"><b>Definition</b> HllUnion-internal.hpp:49</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_a505bdafe096c4fc8adef4f8438b2da25"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#a505bdafe096c4fc8adef4f8438b2da25">datasketches::hll_union_alloc::get_result</a></div><div class="ttdeci">hll_sketch_alloc< A > get_result(target_hll_type tgt_type=HLL_4) const</div><div class="ttdoc">Returns the result of this union operator with the specified target_hll_type.</div><div class="ttdef"><b>Defini [...]
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_a5a2b7a58dc85678d08752945ff655362"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#a5a2b7a58dc85678d08752945ff655362">datasketches::hll_union_alloc::is_empty</a></div><div class="ttdeci">bool is_empty() const</div><div class="ttdoc">Indicates if the union is currently empty.</div><div class="ttdef"><b>Definition</b> HllUnion-internal.hpp:180</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_aacaad8ccad500578a2cae9bef58ad436"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#aacaad8ccad500578a2cae9bef58ad436">datasketches::hll_union_alloc::get_lg_config_k</a></div><div class="ttdeci">uint8_t get_lg_config_k() const</div><div class="ttdoc">Returns union's configured lg_k value.</div><div class="ttdef"><b>Definition</b> HllUnion-internal.hpp:168</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_ab6cbf0e7b9ad7dc653d8cb7bc02e8ee4"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#ab6cbf0e7b9ad7dc653d8cb7bc02e8ee4">datasketches::hll_union_alloc::get_lower_bound</a></div><div class="ttdeci">double get_lower_bound(uint8_t num_std_dev) const</div><div class="ttdoc">Returns the approximate lower error bound given the specified number of standard deviations.</div><div class="ttdef"><b>Definition</b [...]
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_abdb81912e4fcd2547e27c0165affbb99"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#abdb81912e4fcd2547e27c0165affbb99">datasketches::hll_union_alloc::hll_union_alloc</a></div><div class="ttdeci">hll_union_alloc(uint8_t lg_max_k, const A &allocator=A())</div><div class="ttdoc">Construct an hll_union operator with the given maximum log2 of k.</div><div class="ttdef"><b>Definition</b> HllUnion-inte [...]
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_ad20897c5c8bd47f5d4005989bead0e55"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#ad20897c5c8bd47f5d4005989bead0e55">datasketches::hll_union_alloc::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the union to an empty state in coupon collection mode.</div><div class="ttdef"><b>Definition</b> HllUnion-internal.hpp:173</div></div>
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_af1abb48488246839a8732c9f20e3f7db"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#af1abb48488246839a8732c9f20e3f7db">datasketches::hll_union_alloc::get_rel_err</a></div><div class="ttdeci">static double get_rel_err(bool upper_bound, bool unioned, uint8_t lg_config_k, uint8_t num_std_dev)</div><div class="ttdoc">Gets the current (approximate) Relative Error (RE) asymptotic values given several para [...]
+<div class="ttc" id="aclassdatasketches_1_1hll__union__alloc_html_afb6dfbdd1229e025d57402ac22c1cd2c"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html#afb6dfbdd1229e025d57402ac22c1cd2c">datasketches::hll_union_alloc::get_upper_bound</a></div><div class="ttdeci">double get_upper_bound(uint8_t num_std_dev) const</div><div class="ttdoc">Returns the approximate upper error bound given the specified number of standard deviations.</div><div class="ttdef"><b>Definition</b [...]
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_hll_util_8hpp_source.html b/docs/5.3.0/_hll_util_8hpp_source.html
new file mode 100644
index 00000000..1896d80a
--- /dev/null
+++ b/docs/5.3.0/_hll_util_8hpp_source.html
@@ -0,0 +1,343 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/HllUtil.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">HllUtil.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _HLLUTIL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _HLLUTIL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "MurmurHash3.h"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include "RelativeErrorTables.hpp"</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include "count_zeros.hpp"</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include "common_defs.hpp"</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include "ceiling_power_of_2.hpp"</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#include <string></span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="keyword">enum</span> hll_mode { LIST = 0, SET, HLL };</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">namespace </span>hll_constants {</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// preamble stuff</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t SER_VER = 1;</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t FAMILY_ID = 7;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t EMPTY_FLAG_MASK = 4;</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t COMPACT_FLAG_MASK = 8;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t OUT_OF_ORDER_FLAG_MASK = 16;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// Bit 32 is RESERVED and must not be written or interpreted.</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// It was formerly FULL_SIZE_FLAG_MASK here, while datasketches-java uses the same bit as</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// REBUILD_CURMIN_NUM_KXQ_MASK for its union gadget. The two meanings collided across</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// implementations, so this side no longer writes or reads it. Do not reuse: bits 64 and 128</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// are free.</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t RESERVED_FLAG_MASK_32 = 32;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// Deprecated alias for the bit above, retained for source compatibility. Do not use.</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">// Added 2026-09-07 (#521), first shipping in the release after 5.2.0. No [[deprecated]]:</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">// this library targets C++11, so the alias warns no one.</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t FULL_SIZE_FLAG_MASK = RESERVED_FLAG_MASK_32;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t PREAMBLE_INTS_BYTE = 0;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t SER_VER_BYTE = 1;</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t FAMILY_BYTE = 2;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t LG_K_BYTE = 3;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t LG_ARR_BYTE = 4;</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t FLAGS_BYTE = 5;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t LIST_COUNT_BYTE = 6;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t HLL_CUR_MIN_BYTE = 6;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t MODE_BYTE = 7; <span class="comment">// lo2bits = curMode, next 2 bits = tgtHllMode</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment">// Coupon List</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t LIST_INT_ARR_START = 8;</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t LIST_PREINTS = 2;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment">// Coupon Hash Set</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t HASH_SET_COUNT_INT = 8;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t HASH_SET_INT_ARR_START = 12;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t HASH_SET_PREINTS = 3;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment">// HLL</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t HLL_PREINTS = 10;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t HLL_BYTE_ARR_START = 40;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t HIP_ACCUM_DOUBLE = 8;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t KXQ0_DOUBLE = 16;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t KXQ1_DOUBLE = 24;</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t CUR_MIN_COUNT_INT = 32;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t AUX_COUNT_INT = 36;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t EMPTY_SKETCH_SIZE_BYTES = 8;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment">// other HllUtil stuff</span></div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t KEY_BITS_26 = 26;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t VAL_BITS_6 = 6;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t KEY_MASK_26 = (1 << KEY_BITS_26) - 1;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t VAL_MASK_6 = (1 << VAL_BITS_6) - 1;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t EMPTY = 0;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t MIN_LOG_K = 4;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t MAX_LOG_K = 21;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> HLL_HIP_RSE_FACTOR = 0.8325546111576977; <span class="comment">// sqrt(ln(2))</span></div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> HLL_NON_HIP_RSE_FACTOR = 1.0389617614136892; <span class="comment">// sqrt((3 * ln(2)) - 1)</span></div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> COUPON_RSE_FACTOR = 0.409; <span class="comment">// at transition point not the asymptote</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> COUPON_RSE = COUPON_RSE_FACTOR / (1 << 13);</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t LG_INIT_LIST_SIZE = 3;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t LG_INIT_SET_SIZE = 5;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t RESIZE_NUMER = 3;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t RESIZE_DENOM = 4;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t loNibbleMask = 0x0f;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t hiNibbleMask = 0xf0;</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t AUX_TOKEN = 0xf;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span></div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="keyword">static</span> <span class="keyword">const</span> uint8_t LG_AUX_ARR_INTS[] = {</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> 0, 2, 2, 2, 2, 2, 2, 3, 3, 3, <span class="comment">// 0 - 9</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, <span class="comment">// 10-19</span></div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> 12, 13, 14, 15, 16, 17, 18 <span class="comment">// 20-26</span></div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>};</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>} <span class="comment">// namespace hll_constants</span></div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">// template provides internal consistency and allows static float values</span></div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">// but we don't use the template parameter anywhere</span></div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="keyword">template</span><<span class="keyword">typename</span> A = std::allocator<u<span class="keywordtype">int</span>8_t> ></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="keyword">class </span>HllUtil final {</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">static</span> uint32_t coupon(<span class="keyword">const</span> uint64_t hash[]);</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">static</span> uint32_t coupon(<span class="keyword">const</span> HashState& hashState);</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hash(<span class="keyword">const</span> <span class="keywordtype">void</span>* key, <span class="keywordtype">size_t</span> keyLen, uint64_t seed, HashState& result);</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">static</span> uint8_t checkLgK(uint8_t lgK);</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">static</span> <span class="keywordtype">void</span> checkMemSize(uint64_t minBytes, uint64_t capBytes);</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> checkNumStdDev(uint8_t numStdDev);</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">static</span> uint32_t pair(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">static</span> uint32_t getLow26(uint32_t coupon);</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">static</span> uint8_t getValue(uint32_t coupon);</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">static</span> uint8_t simpleIntLog2(uint32_t n); <span class="comment">// n must be power of 2</span></div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">static</span> uint8_t computeLgArrInts(hll_mode mode, uint32_t count, uint8_t lgConfigK);</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">static</span> <span class="keywordtype">double</span> getRelErr(<span class="keywordtype">bool</span> upperBound, <span class="keywordtype">bool</span> unioned, uint8_t lgConfigK, uint8_t numStdDev);</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>};</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="keyword">inline</span> uint32_t HllUtil<A>::coupon(<span class="keyword">const</span> uint64_t hash[]) {</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> uint32_t addr26 = hash[0] & hll_constants::KEY_MASK_26;</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> uint8_t lz = count_leading_zeros_in_u64(hash[1]);</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> uint8_t value = ((lz > 62 ? 62 : lz) + 1); </div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">return</span> (value << hll_constants::KEY_BITS_26) | addr26;</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span>}</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keyword">inline</span> uint32_t HllUtil<A>::coupon(<span class="keyword">const</span> HashState& hashState) {</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> uint32_t addr26 = (int) (hashState.h1 & hll_constants::KEY_MASK_26);</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> uint8_t lz = count_leading_zeros_in_u64(hashState.h2); </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> uint8_t value = ((lz > 62 ? 62 : lz) + 1); </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> (value << hll_constants::KEY_BITS_26) | addr26;</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span>}</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="keyword">inline</span> <span class="keywordtype">void</span> HllUtil<A>::hash(<span class="keyword">const</span> <span class="keywordtype">void</span>* key, <span class="keywordtype">size_t</span> keyLen, uint64_t seed, HashState& result) {</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> MurmurHash3_x64_128(key, keyLen, seed, result);</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span>}</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="keyword">inline</span> uint8_t HllUtil<A>::checkLgK(uint8_t lgK) {</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span> ((lgK >= hll_constants::MIN_LOG_K) && (lgK <= hll_constants::MAX_LOG_K)) {</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">return</span> lgK;</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid value of k: "</span> + std::to_string(lgK));</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span>}</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="keyword">inline</span> <span class="keywordtype">double</span> HllUtil<A>::getRelErr(<span class="keywordtype">bool</span> upperBound, <span class="keywordtype">bool</span> unioned,</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> uint8_t lgConfigK, uint8_t numStdDev) {</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> checkLgK(lgConfigK);</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (lgConfigK > 12) {</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">const</span> <span class="keywordtype">double</span> rseFactor = unioned ?</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> hll_constants::HLL_NON_HIP_RSE_FACTOR : hll_constants::HLL_HIP_RSE_FACTOR;</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">const</span> uint32_t configK = 1 << lgConfigK;</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">return</span> (upperBound ? -1 : 1) * (numStdDev * rseFactor) / sqrt(configK);</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> RelativeErrorTables<A>::getRelErr(upperBound, unioned, lgConfigK, numStdDev);</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>}</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="keyword">inline</span> <span class="keywordtype">void</span> HllUtil<A>::checkMemSize(uint64_t minBytes, uint64_t capBytes) {</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> (capBytes < minBytes) {</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Given destination array is not large enough: "</span> + std::to_string(capBytes));</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>}</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="keyword">inline</span> <span class="keywordtype">void</span> HllUtil<A>::checkNumStdDev(uint8_t numStdDev) {</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">if</span> ((numStdDev < 1) || (numStdDev > 3)) {</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"NumStdDev may not be less than 1 or greater than 3."</span>);</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span>}</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="keyword">inline</span> uint32_t HllUtil<A>::pair(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> (value << hll_constants::KEY_BITS_26) | (slotNo & hll_constants::KEY_MASK_26);</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span>}</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="keyword">inline</span> uint32_t HllUtil<A>::getLow26(uint32_t coupon) {</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">return</span> coupon & hll_constants::KEY_MASK_26;</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span>}</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="keyword">inline</span> uint8_t HllUtil<A>::getValue(uint32_t coupon) {</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">return</span> coupon >> hll_constants::KEY_BITS_26;</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span>}</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="keyword">inline</span> uint8_t HllUtil<A>::simpleIntLog2(uint32_t n) {</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span> (n == 0) {</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"cannot take log of 0"</span>);</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">return</span> count_trailing_zeros_in_u32(n);</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>}</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="keyword">inline</span> uint8_t HllUtil<A>::computeLgArrInts(hll_mode mode, uint32_t count, uint8_t lgConfigK) {</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// assume value missing and recompute</span></div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span> (mode == LIST) { <span class="keywordflow">return</span> hll_constants::LG_INIT_LIST_SIZE; }</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> uint32_t ceilPwr2 = ceiling_power_of_2(count);</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span> ((hll_constants::RESIZE_DENOM * count) > (hll_constants::RESIZE_NUMER * ceilPwr2)) { ceilPwr2 <<= 1;}</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">if</span> (mode == SET) {</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">return</span> std::max(hll_constants::LG_INIT_SET_SIZE, HllUtil<A>::simpleIntLog2(ceilPwr2));</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> }</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="comment">//only used for HLL4</span></div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">return</span> std::max(hll_constants::LG_AUX_ARR_INTS[lgConfigK], HllUtil<A>::simpleIntLog2(ceilPwr2));</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span>}</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span>}</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="preprocessor">#endif </span><span class="comment">/* _HLLUTIL_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_murmur_hash3_8h_source.html b/docs/5.3.0/_murmur_hash3_8h_source.html
new file mode 100644
index 00000000..3f22c3cc
--- /dev/null
+++ b/docs/5.3.0/_murmur_hash3_8h_source.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: common/include/MurmurHash3.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>common</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">MurmurHash3.h</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Minimally modified from Austin Applebee's code:</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// * Removed MurmurHash3_x86_32 and MurmurHash3_x86_128</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// * Changed input seed in MurmurHash3_x64_128 to uint64_t</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// * Define and use HashState reference to return result</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// * Made entire hash function defined inline</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// * Added compute_seed_hash</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// MurmurHash3 was written by Austin Appleby, and is placed in the public</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// domain. The author hereby disclaims copyright to this source code.</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// Note - The x86 and x64 versions do _not_ produce the same results, as the</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">// algorithms are optimized for their respective platforms. You can still</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">// compile and run any of them on any platform, but your performance with the</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">// non-native version will be less than optimal.</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef _MURMURHASH3_H_</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define _MURMURHASH3_H_</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// Platform-specific functions and macros</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// Microsoft Visual Studio</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#if defined(_MSC_VER)</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> uint8_t;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uint32_t;</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#define MURMUR3_FORCE_INLINE __forceinline</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#define MURMUR3_ROTL64(x,y) _rotl64(x,y)</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#define MURMUR3_BIG_CONSTANT(x) (x)</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">// Other compilers</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#else </span><span class="comment">// defined(_MSC_VER)</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#include <stdint.h></span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#define MURMUR3_FORCE_INLINE inline __attribute__((always_inline))</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keyword">inline</span> uint64_t rotl64 ( uint64_t x, int8_t r )</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>{</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">return</span> (x << r) | (x >> (64 - r));</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span>}</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#define MURMUR3_ROTL64(x,y) rotl64(x,y)</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#define MURMUR3_BIG_CONSTANT(x) (x##LLU)</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#endif </span><span class="comment">// !defined(_MSC_VER)</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">// Return type - Using C++ reference for return type which should allow better</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">// compiler optimization than a void* pointer</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> uint64_t h1;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> uint64_t h2;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>} HashState;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment">// Block read - if your platform needs to do endian-swapping or can only</span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment">// handle aligned reads, do the conversion here</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>MURMUR3_FORCE_INLINE uint64_t getblock64 ( <span class="keyword">const</span> uint8_t * p, <span class="keywordtype">size_t</span> i )</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>{</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> uint64_t res;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> memcpy(&res, p + i * <span class="keyword">sizeof</span>(uint64_t), <span class="keyword">sizeof</span>(res));</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> res;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>}</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">// Finalization mix - force all bits of a hash block to avalanche</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>MURMUR3_FORCE_INLINE uint64_t fmix64 ( uint64_t k )</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>{</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> k ^= k >> 33;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> k *= MURMUR3_BIG_CONSTANT(0xff51afd7ed558ccd);</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> k ^= k >> 33;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> k *= MURMUR3_BIG_CONSTANT(0xc4ceb9fe1a85ec53);</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> k ^= k >> 33;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">return</span> k;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>}</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span>MURMUR3_FORCE_INLINE <span class="keywordtype">void</span> MurmurHash3_x64_128(<span class="keyword">const</span> <span class="keywordtype">void</span>* key, <span class="keywordtype">size_t</span> lenBytes,</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> uint64_t seed, HashState& out) {</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">static</span> <span class="keyword">const</span> uint64_t c1 = MURMUR3_BIG_CONSTANT(0x87c37b91114253d5);</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">static</span> <span class="keyword">const</span> uint64_t c2 = MURMUR3_BIG_CONSTANT(0x4cf5ad432745937f);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">const</span> uint8_t* data = (<span class="keyword">const</span> uint8_t*)key;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> out.h1 = seed;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> out.h2 = seed;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// Number of full 128-bit blocks of 16 bytes.</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// Possible exclusion of a remainder of up to 15 bytes.</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> nblocks = lenBytes >> 4; <span class="comment">// bytes / 16</span></div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// Process the 128-bit blocks (the body) into the hash</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < nblocks; ++i) { <span class="comment">// 16 bytes per block</span></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> uint64_t k1 = getblock64(data, i * 2 + 0);</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> uint64_t k2 = getblock64(data, i * 2 + 1);</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> out.h1 = MURMUR3_ROTL64(out.h1,27);</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> out.h1 += out.h2;</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> out.h1 = out.h1*5+0x52dce729;</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> out.h2 = MURMUR3_ROTL64(out.h2,31);</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> out.h2 += out.h1;</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> out.h2 = out.h2*5+0x38495ab5;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// tail</span></div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">const</span> uint8_t * tail = (<span class="keyword">const</span> uint8_t*)(data + (nblocks << 4));</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> uint64_t k1 = 0;</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> uint64_t k2 = 0;</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">switch</span>(lenBytes & 15)</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> {</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">case</span> 15: k2 ^= ((uint64_t)tail[14]) << 48; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">case</span> 14: k2 ^= ((uint64_t)tail[13]) << 40; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">case</span> 13: k2 ^= ((uint64_t)tail[12]) << 32; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">case</span> 12: k2 ^= ((uint64_t)tail[11]) << 24; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">case</span> 11: k2 ^= ((uint64_t)tail[10]) << 16; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">case</span> 10: k2 ^= ((uint64_t)tail[ 9]) << 8; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">case</span> 9: k2 ^= ((uint64_t)tail[ 8]) << 0;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">case</span> 8: k1 ^= ((uint64_t)tail[ 7]) << 56; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">case</span> 7: k1 ^= ((uint64_t)tail[ 6]) << 48; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">case</span> 6: k1 ^= ((uint64_t)tail[ 5]) << 40; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">case</span> 5: k1 ^= ((uint64_t)tail[ 4]) << 32; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">case</span> 4: k1 ^= ((uint64_t)tail[ 3]) << 24; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">case</span> 3: k1 ^= ((uint64_t)tail[ 2]) << 16; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">case</span> 2: k1 ^= ((uint64_t)tail[ 1]) << 8; <span class="comment">// falls through</span></div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">case</span> 1: k1 ^= ((uint64_t)tail[ 0]) << 0;</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> };</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="comment">//----------</span></div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// finalization</span></div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> out.h1 ^= lenBytes;</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> out.h2 ^= lenBytes;</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> out.h1 += out.h2;</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> out.h2 += out.h1;</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> out.h1 = fmix64(out.h1);</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> out.h2 = fmix64(out.h2);</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> out.h1 += out.h2;</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> out.h2 += out.h1;</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span>}</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>MURMUR3_FORCE_INLINE uint16_t compute_seed_hash(uint64_t seed) {</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> HashState hashes;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> MurmurHash3_x64_128(&seed, <span class="keyword">sizeof</span>(seed), 0, hashes);</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uint16_t<span class="keyword">></span>(hashes.h1 & 0xffff);</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span>}</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor">#undef MURMUR3_FORCE_INLINE</span></div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="preprocessor">#undef MURMUR3_ROTL64</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor">#undef MURMUR3_BIG_CONSTANT</span></div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="preprocessor">#endif </span><span class="comment">// _MURMURHASH3_H_</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_relative_error_tables-internal_8hpp_source.html b/docs/5.3.0/_relative_error_tables-internal_8hpp_source.html
new file mode 100644
index 00000000..9efac903
--- /dev/null
+++ b/docs/5.3.0/_relative_error_tables-internal_8hpp_source.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/RelativeErrorTables-internal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">RelativeErrorTables-internal.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _RELATIVEERRORTABLES_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _RELATIVEERRORTABLES_INTERNAL_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include "RelativeErrorTables.hpp"</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">//case 0</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">static</span> <span class="keywordtype">double</span> HIP_LB[] = <span class="comment">//sd 1, 2, 3</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> { <span class="comment">//Q(.84134), Q(.97725), Q(.99865) respectively</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> 0.207316195, 0.502865572, 0.882303765, <span class="comment">//4</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> 0.146981579, 0.335426881, 0.557052, <span class="comment">//5</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> 0.104026721, 0.227683872, 0.365888317, <span class="comment">//6</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> 0.073614601, 0.156781585, 0.245740374, <span class="comment">//7</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> 0.05205248, 0.108783763, 0.168030442, <span class="comment">//8</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> 0.036770852, 0.075727545, 0.11593785, <span class="comment">//9</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> 0.025990219, 0.053145536, 0.080772263, <span class="comment">//10</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> 0.018373987, 0.037266176, 0.056271814, <span class="comment">//11</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> 0.012936253, 0.02613829, 0.039387631, <span class="comment">//12</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> };</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">//case 1</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="keyword">static</span> <span class="keywordtype">double</span> HIP_UB[] = <span class="comment">//sd 1, 2, 3</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> { <span class="comment">//Q(.15866), Q(.02275), Q(.00135) respectively</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> -0.207805347, -0.355574279, -0.475535095, <span class="comment">//4</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> -0.146988328, -0.262390832, -0.360864026, <span class="comment">//5</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> -0.103877775, -0.191503663, -0.269311582, <span class="comment">//6</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> -0.073452978, -0.138513438, -0.198487447, <span class="comment">//7</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> -0.051982806, -0.099703123, -0.144128618, <span class="comment">//8</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> -0.036768609, -0.07138158, -0.104430324, <span class="comment">//9</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> -0.025991325, -0.050854296, -0.0748143, <span class="comment">//10</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> -0.01834533, -0.036121138, -0.05327616, <span class="comment">//11</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> -0.012920332, -0.025572893, -0.037896952, <span class="comment">//12</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> };</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">//case 2</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keyword">static</span> <span class="keywordtype">double</span> NON_HIP_LB[] = <span class="comment">//sd 1, 2, 3`</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> { <span class="comment">//Q(.84134), Q(.97725), Q(.99865) respectively</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> 0.254409839, 0.682266712, 1.304022158, <span class="comment">//4</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> 0.181817353, 0.443389054, 0.778776219, <span class="comment">//5</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> 0.129432281, 0.295782195, 0.49252279, <span class="comment">//6</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> 0.091640655, 0.201175925, 0.323664385, <span class="comment">//7</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> 0.064858051, 0.138523393, 0.218805328, <span class="comment">//8</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> 0.045851855, 0.095925072, 0.148635751, <span class="comment">//9</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> 0.032454144, 0.067009668, 0.102660669, <span class="comment">//10</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> 0.022921382, 0.046868565, 0.071307398, <span class="comment">//11</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> 0.016155679, 0.032825719, 0.049677541 <span class="comment">//12</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> };</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">//case 3</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keyword">static</span> <span class="keywordtype">double</span> NON_HIP_UB[] = <span class="comment">//sd 1, 2, 3</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> { <span class="comment">//Q(.15866), Q(.02275), Q(.00135) respectively</span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> -0.256980172, -0.411905944, -0.52651057, <span class="comment">//4</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> -0.182332109, -0.310275547, -0.412660505, <span class="comment">//5</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> -0.129314228, -0.230142294, -0.315636197, <span class="comment">//6</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> -0.091584836, -0.16834013, -0.236346847, <span class="comment">//7</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> -0.06487411, -0.122045231, -0.174112107, <span class="comment">//8</span></div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> -0.04591465, -0.08784505, -0.126917615, <span class="comment">//9</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> -0.032433119, -0.062897613, -0.091862929, <span class="comment">//10</span></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> -0.022960633, -0.044875401, -0.065736049, <span class="comment">//11</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> -0.016186662, -0.031827816, -0.046973459 <span class="comment">//12</span></div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> };</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">double</span> RelativeErrorTables<A>::getRelErr(<span class="keyword">const</span> <span class="keywordtype">bool</span> upperBound, <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag,</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lgK, <span class="keyword">const</span> <span class="keywordtype">int</span> stdDev) {</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">const</span> <span class="keywordtype">int</span> idx = ((lgK - 4) * 3) + (stdDev - 1);</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (oooFlag ? 2 : 0) | (upperBound ? 1 : 0);</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">double</span> f = 0;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">case</span> 0 : { <span class="comment">// HIP, LB</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> f = HIP_LB[idx];</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">case</span> 1 : { <span class="comment">// HIP, UB</span></div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> f = HIP_UB[idx];</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">case</span> 2 : { <span class="comment">// NON_HIP, LB</span></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> f = NON_HIP_LB[idx];</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">case</span> 3 : { <span class="comment">// NON_HIP, UB</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> f = NON_HIP_UB[idx];</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> f;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>}</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor">#endif </span><span class="comment">// _RELATIVEERRORTABLES_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/_relative_error_tables_8hpp_source.html b/docs/5.3.0/_relative_error_tables_8hpp_source.html
new file mode 100644
index 00000000..66498b6e
--- /dev/null
+++ b/docs/5.3.0/_relative_error_tables_8hpp_source.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: hll/include/RelativeErrorTables.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>hll</b></li><li class="navelem"><b>include</b></li> </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle"><div class="title">RelativeErrorTables.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * "License"); you may not use this file except in compliance</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> *</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * under the License.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> */</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef _RELATIVEERRORTABLES_HPP_</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define _RELATIVEERRORTABLES_HPP_</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <memory></span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">template</span><<span class="keyword">typename</span> A = std::allocator<u<span class="keywordtype">int</span>8_t>></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>RelativeErrorTables {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> <span class="keywordtype">double</span> getRelErr(<span class="keywordtype">bool</span> upperBound, <span class="keywordtype">bool</span> oooFlag,</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> lgK, <span class="keywordtype">int</span> stdDev);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>}</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#include "RelativeErrorTables-internal.hpp"</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#endif </span><span class="comment">/* _RELATIVEERRORTABLES_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/annotated.html b/docs/5.3.0/annotated.html
new file mode 100644
index 00000000..c24a0540
--- /dev/null
+++ b/docs/5.3.0/annotated.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Class List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span class="spacer"> </span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacedatasketches.html" target="_self">datasketches</a></td><td class="desc">DataSketches namespace </td></tr>
+<tr id="row_0_0_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1array__tuple__a__not__b.html" target="_self">array_tuple_a_not_b</a></td><td class="desc">Array tuple A-not-B </td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1array__tuple__intersection.html" target="_self">array_tuple_intersection</a></td><td class="desc">Array tuple intersection </td></tr>
+<tr id="row_0_2_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1array__tuple__union.html" target="_self">array_tuple_union</a></td><td class="desc">Array tuple union </td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1base__theta__sketch__alloc.html" target="_self">base_theta_sketch_alloc</a></td><td class="desc">Abstract base class for Theta sketch </td></tr>
+<tr id="row_0_4_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1bounds__binomial__proportions.html" target="_self">bounds_binomial_proportions</a></td><td class="desc">Confidence intervals for binomial proportions </td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1bounds__on__ratios__in__sampled__sets.html" target="_self">bounds_on_ratios_in_sampled_sets</a></td><td class="desc">Bounds on ratios in sampled sets </td></tr>
+<tr id="row_0_6_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1bounds__on__ratios__in__theta__sketched__sets.html" target="_self">bounds_on_ratios_in_theta_sketched_sets</a></td><td class="desc">Bounds on ratios in Theta sketched sets </td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1compact__array__tuple__sketch.html" target="_self">compact_array_tuple_sketch</a></td><td class="desc">Compact array tuple sketch </td></tr>
+<tr id="row_0_8_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1compact__theta__sketch__alloc.html" target="_self">compact_theta_sketch_alloc</a></td><td class="desc">Compact Theta sketch </td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1compact__tuple__sketch.html" target="_self">compact_tuple_sketch</a></td><td class="desc">Compact Tuple sketch </td></tr>
+<tr id="row_0_10_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1count__min__sketch.html" target="_self">count_min_sketch</a></td><td class="desc">C++ implementation of the CountMin sketch data structure of Cormode and Muthukrishnan </td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1cpc__sketch__alloc.html" target="_self">cpc_sketch_alloc</a></td><td class="desc">High performance C++ implementation of Compressed Probabilistic Counting (CPC) Sketch </td></tr>
+<tr id="row_0_12_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1cpc__union__alloc.html" target="_self">cpc_union_alloc</a></td><td class="desc">High performance C++ implementation of Compressed Probabilistic Counting (CPC) Union </td></tr>
+<tr id="row_0_13_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdatasketches_1_1default__array__tuple__union__policy.html" target="_self">default_array_tuple_union_policy</a></td><td class="desc">Default array tuple union policy </td></tr>
+<tr id="row_0_14_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1default__array__tuple__update__policy.html" target="_self">default_array_tuple_update_policy</a></td><td class="desc">Default array tuple update policy </td></tr>
+<tr id="row_0_15_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1density__sketch.html" target="_self">density_sketch</a></td><td class="desc">Density sketch </td></tr>
+<tr id="row_0_16_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1ebpps__sketch.html" target="_self">ebpps_sketch</a></td><td class="desc">An implementation of an Exact and Bounded Sampling Proportional to Size sketch </td></tr>
+<tr id="row_0_17_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1frequent__items__sketch.html" target="_self">frequent_items_sketch</a></td><td class="desc">Frequent Items sketch </td></tr>
+<tr id="row_0_17_0_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1frequent__items__sketch_1_1row.html" target="_self">row</a></td><td class="desc">Row in the output from <a class="el" href="classdatasketches_1_1frequent__items__sketch.html#a5412230c8878e0cc1be2c6940512f508" title="Returns an array of rows tha [...]
+<tr id="row_0_18_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1hll__union__alloc.html" target="_self">hll_union_alloc</a></td><td class="desc">This performs union operations for HLL sketches </td></tr>
+<tr id="row_0_19_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1_hll_sketch_impl.html" target="_self">HllSketchImpl</a></td><td class="desc">This is a high performance implementation of Phillipe Flajolet's HLL sketch but with significantly improved error behavior </td></tr>
+<tr id="row_0_20_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1jaccard__similarity__base.html" target="_self">jaccard_similarity_base</a></td><td class="desc">Base class for Jaccard similarity </td></tr>
+<tr id="row_0_21_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1kll__sketch.html" target="_self">kll_sketch</a></td><td class="desc">Implementation of a very compact quantiles sketch with lazy compaction scheme and nearly optimal accuracy per retained item </td></tr>
+<tr id="row_0_22_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1kolmogorov__smirnov.html" target="_self">kolmogorov_smirnov</a></td><td class="desc">Kolmogorov-Smirnov test for KLL or Quantiles sketches </td></tr>
+<tr id="row_0_23_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1quantiles__sketch.html" target="_self">quantiles_sketch</a></td><td class="desc">This is a stochastic streaming sketch that enables near-real time analysis of the approximate distribution from a very large stream in a single pass </td></tr>
+<tr id="row_0_24_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1quantiles__sorted__view.html" target="_self">quantiles_sorted_view</a></td><td class="desc">Sorted view for quantiles sketches (REQ, KLL and Quantiles) </td></tr>
+<tr id="row_0_25_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1req__sketch.html" target="_self">req_sketch</a></td><td class="desc">Relative Error Quantiles Sketch </td></tr>
+<tr id="row_0_26_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdatasketches_1_1serde.html" target="_self">serde</a></td><td class="desc">Interface for serializing and deserializing items </td></tr>
+<tr id="row_0_27_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdatasketches_1_1serde_3_01std_1_1string_01_4.html" target="_self">serde< std::string ></a></td><td class="desc">Serde for std::string items </td></tr>
+<tr id="row_0_28_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdatasketches_1_1serde_3_01_t_00_01typename_01std_1_1enable__if_3_01std_1_1is__arithmetic_347673b6d71d4024e7fa2496d7f8ee293.html" target="_self">serde< T, typename std::enable_if< std::is_arithmetic< T >::value >::type ></a></td><td class="desc">Serde for all fixed-size arithm [...]
+<tr id="row_0_29_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1theta__a__not__b__alloc.html" target="_self">theta_a_not_b_alloc</a></td><td class="desc">Theta A-not-B (set difference) </td></tr>
+<tr id="row_0_30_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1theta__base__builder.html" target="_self">theta_base_builder</a></td><td class="desc">Theta base builder </td></tr>
+<tr id="row_0_31_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1theta__intersection__alloc.html" target="_self">theta_intersection_alloc</a></td><td class="desc">Theta intersection </td></tr>
+<tr id="row_0_32_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1theta__sketch__alloc.html" target="_self">theta_sketch_alloc</a></td><td class="desc">Base class for the Theta Sketch, a generalization of the Kth Minimum Value (KMV) sketch </td></tr>
+<tr id="row_0_33_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1theta__union__alloc.html" target="_self">theta_union_alloc</a></td><td class="desc">Theta Union </td></tr>
+<tr id="row_0_33_0_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1theta__union__alloc_1_1builder.html" target="_self">builder</a></td><td class="desc">Theta union builder </td></tr>
+<tr id="row_0_34_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1tuple__a__not__b.html" target="_self">tuple_a_not_b</a></td><td class="desc">Tuple A-not-B </td></tr>
+<tr id="row_0_35_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1tuple__base__builder.html" target="_self">tuple_base_builder</a></td><td class="desc">Tuple base builder </td></tr>
+<tr id="row_0_36_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1tuple__intersection.html" target="_self">tuple_intersection</a></td><td class="desc">Tuple intersection </td></tr>
+<tr id="row_0_37_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1tuple__sketch.html" target="_self">tuple_sketch</a></td><td class="desc">Base class for Tuple sketch </td></tr>
+<tr id="row_0_38_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1tuple__union.html" target="_self">tuple_union</a></td><td class="desc">Tuple Union </td></tr>
+<tr id="row_0_38_0_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1tuple__union_1_1builder.html" target="_self">builder</a></td><td class="desc">Tuple union builder </td></tr>
+<tr id="row_0_39_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1update__array__tuple__sketch.html" target="_self">update_array_tuple_sketch</a></td><td class="desc">Update array tuple sketch </td></tr>
+<tr id="row_0_39_0_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1update__array__tuple__sketch_1_1builder.html" target="_self">builder</a></td><td class="desc">Update array tuple sketch builder </td></tr>
+<tr id="row_0_40_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1update__theta__sketch__alloc.html" target="_self">update_theta_sketch_alloc</a></td><td class="desc">Update Theta sketch </td></tr>
+<tr id="row_0_40_0_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1update__theta__sketch__alloc_1_1builder.html" target="_self">builder</a></td><td class="desc">Update Theta sketch builder </td></tr>
+<tr id="row_0_41_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1update__tuple__sketch.html" target="_self">update_tuple_sketch</a></td><td class="desc">Update Tuple sketch </td></tr>
+<tr id="row_0_41_0_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1update__tuple__sketch_1_1builder.html" target="_self">builder</a></td><td class="desc">Update Tuple sketch builder </td></tr>
+<tr id="row_0_42_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1var__opt__sketch.html" target="_self">var_opt_sketch</a></td><td class="desc">This sketch samples data from a stream of items </td></tr>
+<tr id="row_0_43_" class="even"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1var__opt__union.html" target="_self">var_opt_union</a></td><td class="desc">Provides a unioning operation over <a class="el" href="classdatasketches_1_1var__opt__sketch.html" title="This sketch samples data from a stream of items.">var_opt_sketch</a> objects </td></tr>
+<tr id="row_0_44_" class="odd"><td class="entry"><span class="spacer"> </span><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1wrapped__compact__theta__sketch__alloc.html" target="_self">wrapped_compact_theta_sketch_alloc</a></td><td class="desc">Wrapped Compact Theta sketch </td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span class="spacer"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_x_x_hash64.html" target="_self">XXHash64</a></td><td class="desc">XXHash (64 bit), based on Yann Collet's descriptions, see <a href="http://cyan4973.github.io/xxHash/">http://cyan4973.github.io/xxHash/</a> </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/5.3.0/array__of__doubles__sketch_8hpp_source.html b/docs/5.3.0/array__of__doubles__sketch_8hpp_source.html
new file mode 100644
index 00000000..115e3b90
--- /dev/null
+++ b/docs/5.3.0/array__of__doubles__sketch_8hpp_source.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_of_doubles_sketch.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+ "relPath": "",
+ "generateTreeView": false,
+ "searchEngine": true,
+ "serverBasedSearch": false,
+ "disableIndex": false,
+ "dynamicMenus": true,
+ "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+ <ul class="sm sm-dox" id="main-menu">
+ <li id="searchBoxPos2">
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+ <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+ </span>
+ </div>
+ </li>
+ </ul>
... 102353 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org