You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by gi...@apache.org on 2024/03/07 21:10:51 UTC
(datasketches-cpp) branch gh-pages updated: deploy: 7934d4c680c0417154f91005e4eb6775a48292da
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/datasketches-cpp.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new 5c94ee4 deploy: 7934d4c680c0417154f91005e4eb6775a48292da
5c94ee4 is described below
commit 5c94ee4ec1065c969c0b756a27594935e2e651d3
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Thu Mar 7 21:10:46 2024 +0000
deploy: 7934d4c680c0417154f91005e4eb6775a48292da
---
docs/5.0.1/AuxHashMap-internal_8hpp_source.html | 356 ++
docs/5.0.1/AuxHashMap_8hpp_source.html | 163 +
...teInterpolationXTable-internal_8hpp_source.html | 888 +++
.../CompositeInterpolationXTable_8hpp_source.html | 119 +
docs/5.0.1/CouponHashSet-internal_8hpp_source.html | 355 ++
docs/5.0.1/CouponHashSet_8hpp_source.html | 139 +
docs/5.0.1/CouponList-internal_8hpp_source.html | 463 ++
docs/5.0.1/CouponList_8hpp_source.html | 172 +
.../CubicInterpolation-internal_8hpp_source.html | 301 +
docs/5.0.1/CubicInterpolation_8hpp_source.html | 122 +
.../HarmonicNumbers-internal_8hpp_source.html | 169 +
docs/5.0.1/HarmonicNumbers_8hpp_source.html | 120 +
docs/5.0.1/Hll4Array-internal_8hpp_source.html | 429 ++
docs/5.0.1/Hll4Array_8hpp_source.html | 145 +
docs/5.0.1/Hll6Array-internal_8hpp_source.html | 206 +
docs/5.0.1/Hll6Array_8hpp_source.html | 133 +
docs/5.0.1/Hll8Array-internal_8hpp_source.html | 284 +
docs/5.0.1/Hll8Array_8hpp_source.html | 136 +
docs/5.0.1/HllArray-internal_8hpp_source.html | 781 +++
docs/5.0.1/HllArray_8hpp_source.html | 228 +
docs/5.0.1/HllSketch-internal_8hpp_source.html | 542 ++
docs/5.0.1/HllSketchImpl-internal_8hpp_source.html | 234 +
docs/5.0.1/HllSketchImplFactory_8hpp_source.html | 240 +
docs/5.0.1/HllSketchImpl_8hpp_source.html | 169 +
docs/5.0.1/HllUnion-internal_8hpp_source.html | 365 ++
docs/5.0.1/HllUtil_8hpp_source.html | 303 +
docs/5.0.1/MurmurHash3_8h_source.html | 260 +
.../RelativeErrorTables-internal_8hpp_source.html | 191 +
docs/5.0.1/RelativeErrorTables_8hpp_source.html | 117 +
docs/5.0.1/annotated.html | 130 +
.../array__of__doubles__sketch_8hpp_source.html | 132 +
.../5.0.1/array__tuple__a__not__b_8hpp_source.html | 131 +
.../array__tuple__a__not__b__impl_8hpp_source.html | 114 +
.../array__tuple__intersection_8hpp_source.html | 136 +
...ray__tuple__intersection__impl_8hpp_source.html | 114 +
docs/5.0.1/array__tuple__sketch_8hpp_source.html | 282 +
.../array__tuple__sketch__impl_8hpp_source.html | 318 +
docs/5.0.1/array__tuple__union_8hpp_source.html | 164 +
.../array__tuple__union__impl_8hpp_source.html | 122 +
docs/5.0.1/bc_s.png | Bin 0 -> 676 bytes
docs/5.0.1/bdwn.png | Bin 0 -> 147 bytes
docs/5.0.1/binomial__bounds_8hpp_source.html | 538 ++
docs/5.0.1/bit__packing_8hpp_source.html | 6358 ++++++++++++++++++++
.../bounds__binomial__proportions_8hpp_source.html | 252 +
..._on__ratios__in__sampled__sets_8hpp_source.html | 171 +
...ios__in__theta__sketched__sets_8hpp_source.html | 184 +
docs/5.0.1/ceiling__power__of__2_8hpp_source.html | 120 +
...classdatasketches_1_1HllSketchImpl-members.html | 80 +
docs/5.0.1/classdatasketches_1_1HllSketchImpl.html | 101 +
...ketches_1_1array__tuple__a__not__b-members.html | 83 +
...assdatasketches_1_1array__tuple__a__not__b.html | 207 +
...lassdatasketches_1_1array__tuple__a__not__b.png | Bin 0 -> 1100 bytes
...ches_1_1array__tuple__intersection-members.html | 86 +
...datasketches_1_1array__tuple__intersection.html | 208 +
...sdatasketches_1_1array__tuple__intersection.png | Bin 0 -> 1300 bytes
...atasketches_1_1array__tuple__union-members.html | 83 +
.../classdatasketches_1_1array__tuple__union.html | 118 +
.../classdatasketches_1_1array__tuple__union.png | Bin 0 -> 1531 bytes
...ches_1_1base__theta__sketch__alloc-members.html | 93 +
...datasketches_1_1base__theta__sketch__alloc.html | 429 ++
...s_1_1bounds__binomial__proportions-members.html | 86 +
...asketches_1_1bounds__binomial__proportions.html | 391 ++
...nds__on__ratios__in__sampled__sets-members.html | 86 +
...s_1_1bounds__on__ratios__in__sampled__sets.html | 365 ++
..._ratios__in__theta__sketched__sets-members.html | 84 +
...nds__on__ratios__in__theta__sketched__sets.html | 262 +
...s_1_1compact__array__tuple__sketch-members.html | 117 +
...asketches_1_1compact__array__tuple__sketch.html | 415 ++
...tasketches_1_1compact__array__tuple__sketch.png | Bin 0 -> 1876 bytes
...s_1_1compact__theta__sketch__alloc-members.html | 108 +
...asketches_1_1compact__theta__sketch__alloc.html | 840 +++
...tasketches_1_1compact__theta__sketch__alloc.png | Bin 0 -> 1601 bytes
...sketches_1_1compact__tuple__sketch-members.html | 111 +
...lassdatasketches_1_1compact__tuple__sketch.html | 944 +++
...classdatasketches_1_1compact__tuple__sketch.png | Bin 0 -> 1132 bytes
...datasketches_1_1count__min__sketch-members.html | 116 +
.../classdatasketches_1_1count__min__sketch.html | 1208 ++++
...datasketches_1_1cpc__sketch__alloc-members.html | 106 +
.../classdatasketches_1_1cpc__sketch__alloc.html | 889 +++
...sdatasketches_1_1cpc__union__alloc-members.html | 89 +
.../classdatasketches_1_1cpc__union__alloc.html | 370 ++
...ault__array__tuple__update__policy-members.html | 80 +
...s_1_1default__array__tuple__update__policy.html | 93 +
...assdatasketches_1_1density__sketch-members.html | 99 +
.../classdatasketches_1_1density__sketch.html | 643 ++
...classdatasketches_1_1ebpps__sketch-members.html | 103 +
docs/5.0.1/classdatasketches_1_1ebpps__sketch.html | 786 +++
...ketches_1_1frequent__items__sketch-members.html | 104 +
...assdatasketches_1_1frequent__items__sketch.html | 937 +++
..._1_1frequent__items__sketch_1_1row-members.html | 85 +
...sketches_1_1frequent__items__sketch_1_1row.html | 211 +
...sdatasketches_1_1hll__union__alloc-members.html | 106 +
.../classdatasketches_1_1hll__union__alloc.html | 850 +++
...tches_1_1jaccard__similarity__base-members.html | 85 +
...sdatasketches_1_1jaccard__similarity__base.html | 345 ++
.../classdatasketches_1_1kll__sketch-members.html | 115 +
docs/5.0.1/classdatasketches_1_1kll__sketch.html | 1327 ++++
...atasketches_1_1kolmogorov__smirnov-members.html | 84 +
.../classdatasketches_1_1kolmogorov__smirnov.html | 261 +
...sdatasketches_1_1quantiles__sketch-members.html | 114 +
.../classdatasketches_1_1quantiles__sketch.html | 1301 ++++
...ketches_1_1quantiles__sorted__view-members.html | 90 +
...assdatasketches_1_1quantiles__sorted__view.html | 368 ++
.../classdatasketches_1_1req__sketch-members.html | 117 +
docs/5.0.1/classdatasketches_1_1req__sketch.html | 1366 +++++
...ketches_1_1theta__a__not__b__alloc-members.html | 83 +
...assdatasketches_1_1theta__a__not__b__alloc.html | 199 +
...tasketches_1_1theta__base__builder-members.html | 86 +
.../classdatasketches_1_1theta__base__builder.html | 259 +
.../classdatasketches_1_1theta__base__builder.png | Bin 0 -> 1077 bytes
...ches_1_1theta__intersection__alloc-members.html | 85 +
...datasketches_1_1theta__intersection__alloc.html | 230 +
...tasketches_1_1theta__sketch__alloc-members.html | 97 +
.../classdatasketches_1_1theta__sketch__alloc.html | 269 +
.../classdatasketches_1_1theta__sketch__alloc.png | Bin 0 -> 1025 bytes
...atasketches_1_1theta__union__alloc-members.html | 84 +
.../classdatasketches_1_1theta__union__alloc.html | 172 +
..._1_1theta__union__alloc_1_1builder-members.html | 87 +
...sketches_1_1theta__union__alloc_1_1builder.html | 145 +
...asketches_1_1theta__union__alloc_1_1builder.png | Bin 0 -> 622 bytes
...ssdatasketches_1_1tuple__a__not__b-members.html | 83 +
.../classdatasketches_1_1tuple__a__not__b.html | 198 +
...tasketches_1_1tuple__base__builder-members.html | 86 +
.../classdatasketches_1_1tuple__base__builder.html | 123 +
.../classdatasketches_1_1tuple__base__builder.png | Bin 0 -> 1076 bytes
...atasketches_1_1tuple__intersection-members.html | 85 +
.../classdatasketches_1_1tuple__intersection.html | 237 +
...classdatasketches_1_1tuple__sketch-members.html | 99 +
docs/5.0.1/classdatasketches_1_1tuple__sketch.html | 636 ++
.../classdatasketches_1_1tuple__union-members.html | 84 +
docs/5.0.1/classdatasketches_1_1tuple__union.html | 172 +
...ketches_1_1tuple__union_1_1builder-members.html | 88 +
...assdatasketches_1_1tuple__union_1_1builder.html | 187 +
...lassdatasketches_1_1tuple__union_1_1builder.png | Bin 0 -> 981 bytes
...es_1_1update__array__tuple__sketch-members.html | 116 +
...tasketches_1_1update__array__tuple__sketch.html | 209 +
...atasketches_1_1update__array__tuple__sketch.png | Bin 0 -> 2436 bytes
...e__array__tuple__sketch_1_1builder-members.html | 88 +
...1_1update__array__tuple__sketch_1_1builder.html | 184 +
..._1_1update__array__tuple__sketch_1_1builder.png | Bin 0 -> 1289 bytes
...es_1_1update__theta__sketch__alloc-members.html | 118 +
...tasketches_1_1update__theta__sketch__alloc.html | 998 +++
...atasketches_1_1update__theta__sketch__alloc.png | Bin 0 -> 1599 bytes
...e__theta__sketch__alloc_1_1builder-members.html | 88 +
...1_1update__theta__sketch__alloc_1_1builder.html | 172 +
..._1_1update__theta__sketch__alloc_1_1builder.png | Bin 0 -> 666 bytes
...asketches_1_1update__tuple__sketch-members.html | 116 +
...classdatasketches_1_1update__tuple__sketch.html | 1080 ++++
.../classdatasketches_1_1update__tuple__sketch.png | Bin 0 -> 1238 bytes
..._1update__tuple__sketch_1_1builder-members.html | 88 +
...etches_1_1update__tuple__sketch_1_1builder.html | 187 +
...ketches_1_1update__tuple__sketch_1_1builder.png | Bin 0 -> 981 bytes
...ssdatasketches_1_1var__opt__sketch-members.html | 104 +
.../classdatasketches_1_1var__opt__sketch.html | 876 +++
...assdatasketches_1_1var__opt__union-members.html | 91 +
.../classdatasketches_1_1var__opt__union.html | 445 ++
...ped__compact__theta__sketch__alloc-members.html | 96 +
..._1_1wrapped__compact__theta__sketch__alloc.html | 395 ++
...s_1_1wrapped__compact__theta__sketch__alloc.png | Bin 0 -> 1129 bytes
docs/5.0.1/classes.html | 125 +
docs/5.0.1/closed.png | Bin 0 -> 132 bytes
docs/5.0.1/common__defs_8hpp_source.html | 184 +
...compact__theta__sketch__parser_8hpp_source.html | 152 +
...t__theta__sketch__parser__impl_8hpp_source.html | 233 +
docs/5.0.1/compression__data_8hpp_source.html | 6101 +++++++++++++++++++
.../conditional__back__inserter_8hpp_source.html | 147 +
docs/5.0.1/conditional__forward_8hpp_source.html | 161 +
docs/5.0.1/count__min_8hpp_source.html | 290 +
docs/5.0.1/count__min__impl_8hpp_source.html | 597 ++
docs/5.0.1/count__zeros_8hpp_source.html | 202 +
.../coupon__iterator-internal_8hpp_source.html | 135 +
docs/5.0.1/coupon__iterator_8hpp_source.html | 128 +
docs/5.0.1/cpc__common_8hpp_source.html | 144 +
docs/5.0.1/cpc__compressor_8hpp_source.html | 229 +
docs/5.0.1/cpc__compressor__impl_8hpp_source.html | 834 +++
docs/5.0.1/cpc__confidence_8hpp_source.html | 247 +
docs/5.0.1/cpc__sketch_8hpp_source.html | 272 +
docs/5.0.1/cpc__sketch__impl_8hpp_source.html | 949 +++
docs/5.0.1/cpc__union_8hpp_source.html | 169 +
docs/5.0.1/cpc__union__impl_8hpp_source.html | 437 ++
docs/5.0.1/cpc__util_8hpp_source.html | 218 +
docs/5.0.1/density__sketch_8hpp_source.html | 252 +
docs/5.0.1/density__sketch__impl_8hpp_source.html | 626 ++
.../dir_00b03cb5ae954e8a2b89b347e34477b0.html | 82 +
.../dir_0449671fe79755ed26e25ef166543162.html | 82 +
.../dir_0bcb9827d33186afae8dcf178a314956.html | 78 +
.../dir_0c72de7c01a0490d64173f294d65fe37.html | 78 +
.../dir_10f6c93aee96669dfb32574207aeb69c.html | 82 +
.../dir_11a63523d45f2cb33b1e510397fbe77e.html | 78 +
.../dir_11fbc4217d50ab21044e5ad6614aede5.html | 78 +
.../dir_135820457b1e8e8dc5343e26fb29c1f8.html | 82 +
.../dir_14b95f261231c5f650b9b0a09b57a6c5.html | 82 +
.../dir_2629d1132294f29f2b0f1e3bcedeca02.html | 82 +
.../dir_33f2f37c686242631bbdb651f95cf35d.html | 78 +
.../dir_3f8742d40c9573c3b90638004faf146b.html | 78 +
.../dir_577378e109fcef5e822b70d599376114.html | 78 +
.../dir_70f016e26945e18c18bc29cf7b499574.html | 78 +
.../dir_82f3a10095a8f2296c0cf5c491a57b02.html | 82 +
.../dir_aa059cbaaa7f4410839cee554e9ff9ba.html | 78 +
.../dir_bc45e258c7269dbde5716543a4c54103.html | 82 +
.../dir_bdd9a5d540de89e9fe90efdfc6973a4f.html | 82 +
.../dir_cd6dde39990e390e8133ccee011656ea.html | 82 +
.../dir_cf88e39abd5376065d05109bb16db9ef.html | 78 +
.../dir_e0b5a940fd5435f299127cc9babd5c8d.html | 78 +
.../dir_e96b5dfe115c13cdeb36484e37aec42e.html | 82 +
.../dir_f1edaa446c592ba78db5fad06a956381.html | 82 +
.../dir_fabb7854c43508dcbf81254d1daad42f.html | 78 +
docs/5.0.1/doc.png | Bin 0 -> 746 bytes
docs/5.0.1/doxygen.css | 1793 ++++++
docs/5.0.1/doxygen.svg | 26 +
docs/5.0.1/dynsections.js | 121 +
docs/5.0.1/ebpps__sample_8hpp_source.html | 232 +
docs/5.0.1/ebpps__sample__impl_8hpp_source.html | 618 ++
docs/5.0.1/ebpps__sketch_8hpp_source.html | 242 +
docs/5.0.1/ebpps__sketch__impl_8hpp_source.html | 629 ++
docs/5.0.1/files.html | 235 +
docs/5.0.1/folderclosed.png | Bin 0 -> 616 bytes
docs/5.0.1/folderopen.png | Bin 0 -> 597 bytes
.../5.0.1/frequent__items__sketch_8hpp_source.html | 273 +
.../frequent__items__sketch__impl_8hpp_source.html | 594 ++
docs/5.0.1/functions.html | 86 +
docs/5.0.1/functions_b.html | 104 +
docs/5.0.1/functions_c.html | 101 +
docs/5.0.1/functions_d.html | 101 +
docs/5.0.1/functions_e.html | 118 +
docs/5.0.1/functions_f.html | 77 +
docs/5.0.1/functions_func.html | 86 +
docs/5.0.1/functions_func_b.html | 104 +
docs/5.0.1/functions_func_c.html | 101 +
docs/5.0.1/functions_func_d.html | 101 +
docs/5.0.1/functions_func_e.html | 115 +
docs/5.0.1/functions_func_f.html | 77 +
docs/5.0.1/functions_func_g.html | 328 +
docs/5.0.1/functions_func_h.html | 81 +
docs/5.0.1/functions_func_i.html | 117 +
docs/5.0.1/functions_func_j.html | 77 +
docs/5.0.1/functions_func_k.html | 77 +
docs/5.0.1/functions_func_l.html | 78 +
docs/5.0.1/functions_func_m.html | 83 +
docs/5.0.1/functions_func_n.html | 77 +
docs/5.0.1/functions_func_o.html | 84 +
docs/5.0.1/functions_func_q.html | 77 +
docs/5.0.1/functions_func_r.html | 87 +
docs/5.0.1/functions_func_s.html | 124 +
docs/5.0.1/functions_func_t.html | 113 +
docs/5.0.1/functions_func_u.html | 101 +
docs/5.0.1/functions_func_v.html | 77 +
docs/5.0.1/functions_func_w.html | 77 +
docs/5.0.1/functions_g.html | 328 +
docs/5.0.1/functions_h.html | 81 +
docs/5.0.1/functions_i.html | 117 +
docs/5.0.1/functions_j.html | 77 +
docs/5.0.1/functions_k.html | 77 +
docs/5.0.1/functions_l.html | 78 +
docs/5.0.1/functions_m.html | 83 +
docs/5.0.1/functions_n.html | 77 +
docs/5.0.1/functions_o.html | 84 +
docs/5.0.1/functions_q.html | 82 +
docs/5.0.1/functions_r.html | 87 +
docs/5.0.1/functions_s.html | 124 +
docs/5.0.1/functions_t.html | 113 +
docs/5.0.1/functions_type.html | 80 +
docs/5.0.1/functions_u.html | 101 +
docs/5.0.1/functions_v.html | 77 +
docs/5.0.1/functions_w.html | 77 +
docs/5.0.1/hierarchy.html | 148 +
docs/5.0.1/hll_8hpp_source.html | 330 +
docs/5.0.1/hll_8private_8hpp_source.html | 110 +
docs/5.0.1/icon__estimator_8hpp_source.html | 353 ++
docs/5.0.1/index.html | 133 +
docs/5.0.1/inv__pow2__table_8hpp_source.html | 186 +
docs/5.0.1/jquery.js | 35 +
docs/5.0.1/kll__helper_8hpp_source.html | 193 +
docs/5.0.1/kll__helper__impl_8hpp_source.html | 403 ++
docs/5.0.1/kll__sketch_8hpp_source.html | 392 ++
docs/5.0.1/kll__sketch__impl_8hpp_source.html | 1157 ++++
docs/5.0.1/kolmogorov__smirnov_8hpp_source.html | 124 +
.../kolmogorov__smirnov__impl_8hpp_source.html | 157 +
docs/5.0.1/kxp__byte__lookup_8hpp_source.html | 160 +
docs/5.0.1/memory__operations_8hpp_source.html | 150 +
docs/5.0.1/menu.js | 51 +
docs/5.0.1/menudata.js | 101 +
docs/5.0.1/namespacedatasketches.html | 430 ++
.../namespacedatasketches_1_1cpc__constants.html | 101 +
.../namespacedatasketches_1_1ebpps__constants.html | 93 +
.../namespacedatasketches_1_1kll__constants.html | 101 +
...espacedatasketches_1_1quantiles__constants.html | 101 +
.../namespacedatasketches_1_1req__constants.html | 101 +
.../namespacedatasketches_1_1theta__constants.html | 117 +
...mespacedatasketches_1_1var__opt__constants.html | 97 +
docs/5.0.1/namespacemembers.html | 239 +
docs/5.0.1/namespacemembers_enum.html | 78 +
docs/5.0.1/namespacemembers_eval.html | 87 +
docs/5.0.1/namespacemembers_func.html | 75 +
docs/5.0.1/namespacemembers_type.html | 129 +
docs/5.0.1/namespacemembers_vars.html | 112 +
docs/5.0.1/namespaces.html | 137 +
docs/5.0.1/nav_f.png | Bin 0 -> 153 bytes
docs/5.0.1/nav_g.png | Bin 0 -> 95 bytes
docs/5.0.1/nav_h.png | Bin 0 -> 98 bytes
docs/5.0.1/open.png | Bin 0 -> 123 bytes
docs/5.0.1/optional_8hpp_source.html | 227 +
docs/5.0.1/quantiles__sketch_8hpp_source.html | 394 ++
.../5.0.1/quantiles__sketch__impl_8hpp_source.html | 1407 +++++
.../5.0.1/quantiles__sorted__view_8hpp_source.html | 251 +
.../quantiles__sorted__view__impl_8hpp_source.html | 208 +
docs/5.0.1/req__common_8hpp_source.html | 120 +
docs/5.0.1/req__compactor_8hpp_source.html | 218 +
docs/5.0.1/req__compactor__impl_8hpp_source.html | 610 ++
docs/5.0.1/req__sketch_8hpp_source.html | 340 ++
docs/5.0.1/req__sketch__impl_8hpp_source.html | 913 +++
.../reverse__purge__hash__map_8hpp_source.html | 212 +
...everse__purge__hash__map__impl_8hpp_source.html | 447 ++
docs/5.0.1/search/all_0.html | 37 +
docs/5.0.1/search/all_0.js | 12 +
docs/5.0.1/search/all_1.html | 37 +
docs/5.0.1/search/all_1.js | 11 +
docs/5.0.1/search/all_10.html | 37 +
docs/5.0.1/search/all_10.js | 7 +
docs/5.0.1/search/all_11.html | 37 +
docs/5.0.1/search/all_11.js | 17 +
docs/5.0.1/search/all_12.html | 37 +
docs/5.0.1/search/all_12.js | 32 +
docs/5.0.1/search/all_13.html | 37 +
docs/5.0.1/search/all_13.js | 11 +
docs/5.0.1/search/all_14.html | 37 +
docs/5.0.1/search/all_14.js | 7 +
docs/5.0.1/search/all_15.html | 37 +
docs/5.0.1/search/all_15.js | 6 +
docs/5.0.1/search/all_2.html | 37 +
docs/5.0.1/search/all_2.js | 17 +
docs/5.0.1/search/all_3.html | 37 +
docs/5.0.1/search/all_3.js | 23 +
docs/5.0.1/search/all_4.html | 37 +
docs/5.0.1/search/all_4.js | 13 +
docs/5.0.1/search/all_5.html | 37 +
docs/5.0.1/search/all_5.js | 5 +
docs/5.0.1/search/all_6.html | 37 +
docs/5.0.1/search/all_6.js | 52 +
docs/5.0.1/search/all_7.html | 37 +
docs/5.0.1/search/all_7.js | 12 +
docs/5.0.1/search/all_8.html | 37 +
docs/5.0.1/search/all_8.js | 9 +
docs/5.0.1/search/all_9.html | 37 +
docs/5.0.1/search/all_9.js | 5 +
docs/5.0.1/search/all_a.html | 37 +
docs/5.0.1/search/all_a.js | 5 +
docs/5.0.1/search/all_b.html | 37 +
docs/5.0.1/search/all_b.js | 4 +
docs/5.0.1/search/all_c.html | 37 +
docs/5.0.1/search/all_c.js | 10 +
docs/5.0.1/search/all_d.html | 37 +
docs/5.0.1/search/all_d.js | 6 +
docs/5.0.1/search/all_e.html | 37 +
docs/5.0.1/search/all_e.js | 4 +
docs/5.0.1/search/all_f.html | 37 +
docs/5.0.1/search/all_f.js | 8 +
docs/5.0.1/search/classes_0.html | 37 +
docs/5.0.1/search/classes_0.js | 6 +
docs/5.0.1/search/classes_1.html | 37 +
docs/5.0.1/search/classes_1.js | 9 +
docs/5.0.1/search/classes_2.html | 37 +
docs/5.0.1/search/classes_2.js | 10 +
docs/5.0.1/search/classes_3.html | 37 +
docs/5.0.1/search/classes_3.js | 7 +
docs/5.0.1/search/classes_4.html | 37 +
docs/5.0.1/search/classes_4.js | 4 +
docs/5.0.1/search/classes_5.html | 37 +
docs/5.0.1/search/classes_5.js | 4 +
docs/5.0.1/search/classes_6.html | 37 +
docs/5.0.1/search/classes_6.js | 6 +
docs/5.0.1/search/classes_7.html | 37 +
docs/5.0.1/search/classes_7.js | 4 +
docs/5.0.1/search/classes_8.html | 37 +
docs/5.0.1/search/classes_8.js | 5 +
docs/5.0.1/search/classes_9.html | 37 +
docs/5.0.1/search/classes_9.js | 7 +
docs/5.0.1/search/classes_a.html | 37 +
docs/5.0.1/search/classes_a.js | 5 +
docs/5.0.1/search/classes_b.html | 37 +
docs/5.0.1/search/classes_b.js | 6 +
docs/5.0.1/search/classes_c.html | 37 +
docs/5.0.1/search/classes_c.js | 23 +
docs/5.0.1/search/classes_d.html | 37 +
docs/5.0.1/search/classes_d.js | 7 +
docs/5.0.1/search/classes_e.html | 37 +
docs/5.0.1/search/classes_e.js | 7 +
docs/5.0.1/search/classes_f.html | 37 +
docs/5.0.1/search/classes_f.js | 4 +
docs/5.0.1/search/close.svg | 31 +
docs/5.0.1/search/enums_0.html | 37 +
docs/5.0.1/search/enums_0.js | 4 +
docs/5.0.1/search/enums_1.html | 37 +
docs/5.0.1/search/enums_1.js | 4 +
docs/5.0.1/search/enumvalues_0.html | 37 +
docs/5.0.1/search/enumvalues_0.js | 6 +
docs/5.0.1/search/enumvalues_1.html | 37 +
docs/5.0.1/search/enumvalues_1.js | 5 +
docs/5.0.1/search/functions_0.html | 37 +
docs/5.0.1/search/functions_0.js | 7 +
docs/5.0.1/search/functions_1.html | 37 +
docs/5.0.1/search/functions_1.js | 6 +
docs/5.0.1/search/functions_10.html | 37 +
docs/5.0.1/search/functions_10.js | 5 +
docs/5.0.1/search/functions_11.html | 37 +
docs/5.0.1/search/functions_11.js | 14 +
docs/5.0.1/search/functions_12.html | 37 +
docs/5.0.1/search/functions_12.js | 12 +
docs/5.0.1/search/functions_13.html | 37 +
docs/5.0.1/search/functions_13.js | 6 +
docs/5.0.1/search/functions_14.html | 37 +
docs/5.0.1/search/functions_14.js | 4 +
docs/5.0.1/search/functions_15.html | 37 +
docs/5.0.1/search/functions_15.js | 4 +
docs/5.0.1/search/functions_2.html | 37 +
docs/5.0.1/search/functions_2.js | 12 +
docs/5.0.1/search/functions_3.html | 37 +
docs/5.0.1/search/functions_3.js | 7 +
docs/5.0.1/search/functions_4.html | 37 +
docs/5.0.1/search/functions_4.js | 12 +
docs/5.0.1/search/functions_5.html | 37 +
docs/5.0.1/search/functions_5.js | 4 +
docs/5.0.1/search/functions_6.html | 37 +
docs/5.0.1/search/functions_6.js | 52 +
docs/5.0.1/search/functions_7.html | 37 +
docs/5.0.1/search/functions_7.js | 5 +
docs/5.0.1/search/functions_8.html | 37 +
docs/5.0.1/search/functions_8.js | 8 +
docs/5.0.1/search/functions_9.html | 37 +
docs/5.0.1/search/functions_9.js | 4 +
docs/5.0.1/search/functions_a.html | 37 +
docs/5.0.1/search/functions_a.js | 4 +
docs/5.0.1/search/functions_b.html | 37 +
docs/5.0.1/search/functions_b.js | 4 +
docs/5.0.1/search/functions_c.html | 37 +
docs/5.0.1/search/functions_c.js | 4 +
docs/5.0.1/search/functions_d.html | 37 +
docs/5.0.1/search/functions_d.js | 4 +
docs/5.0.1/search/functions_e.html | 37 +
docs/5.0.1/search/functions_e.js | 4 +
docs/5.0.1/search/functions_f.html | 37 +
docs/5.0.1/search/functions_f.js | 4 +
docs/5.0.1/search/mag_sel.svg | 74 +
docs/5.0.1/search/namespaces_0.html | 37 +
docs/5.0.1/search/namespaces_0.js | 11 +
docs/5.0.1/search/nomatches.html | 13 +
docs/5.0.1/search/pages_0.html | 37 +
docs/5.0.1/search/pages_0.js | 4 +
docs/5.0.1/search/search.css | 257 +
docs/5.0.1/search/search.js | 816 +++
docs/5.0.1/search/search_l.png | Bin 0 -> 567 bytes
docs/5.0.1/search/search_m.png | Bin 0 -> 158 bytes
docs/5.0.1/search/search_r.png | Bin 0 -> 553 bytes
docs/5.0.1/search/searchdata.js | 39 +
docs/5.0.1/search/typedefs_0.html | 37 +
docs/5.0.1/search/typedefs_0.js | 6 +
docs/5.0.1/search/typedefs_1.html | 37 +
docs/5.0.1/search/typedefs_1.js | 7 +
docs/5.0.1/search/typedefs_2.html | 37 +
docs/5.0.1/search/typedefs_2.js | 5 +
docs/5.0.1/search/typedefs_3.html | 37 +
docs/5.0.1/search/typedefs_3.js | 4 +
docs/5.0.1/search/typedefs_4.html | 37 +
docs/5.0.1/search/typedefs_4.js | 5 +
docs/5.0.1/search/typedefs_5.html | 37 +
docs/5.0.1/search/typedefs_5.js | 4 +
docs/5.0.1/search/typedefs_6.html | 37 +
docs/5.0.1/search/typedefs_6.js | 4 +
docs/5.0.1/search/typedefs_7.html | 37 +
docs/5.0.1/search/typedefs_7.js | 7 +
docs/5.0.1/search/typedefs_8.html | 37 +
docs/5.0.1/search/typedefs_8.js | 5 +
docs/5.0.1/search/typedefs_9.html | 37 +
docs/5.0.1/search/typedefs_9.js | 4 +
docs/5.0.1/search/variables_0.html | 37 +
docs/5.0.1/search/variables_0.js | 6 +
docs/5.0.1/search/variables_1.html | 37 +
docs/5.0.1/search/variables_1.js | 4 +
docs/5.0.1/search/variables_2.html | 37 +
docs/5.0.1/search/variables_2.js | 9 +
docs/5.0.1/serde_8hpp_source.html | 290 +
docs/5.0.1/splitbar.png | Bin 0 -> 314 bytes
...fault__array__tuple__union__policy-members.html | 80 +
...es_1_1default__array__tuple__union__policy.html | 93 +
.../5.0.1/structdatasketches_1_1serde-members.html | 86 +
docs/5.0.1/structdatasketches_1_1serde.html | 331 +
...thmetic_3_54408b64e8a7918b8a177594393deb4e.html | 317 +
...thmetic_3_b88db3e3815ed62e4ec1d940d0f8fcc8.html | 85 +
...es_1_1serde_3_01std_1_1string_01_4-members.html | 86 +
...tasketches_1_1serde_3_01std_1_1string_01_4.html | 369 ++
docs/5.0.1/sync_off.png | Bin 0 -> 853 bytes
docs/5.0.1/sync_on.png | Bin 0 -> 845 bytes
docs/5.0.1/tab_a.png | Bin 0 -> 142 bytes
docs/5.0.1/tab_b.png | Bin 0 -> 169 bytes
docs/5.0.1/tab_h.png | Bin 0 -> 177 bytes
docs/5.0.1/tab_s.png | Bin 0 -> 184 bytes
docs/5.0.1/tabs.css | 1 +
docs/5.0.1/theta__a__not__b_8hpp_source.html | 138 +
docs/5.0.1/theta__a__not__b__impl_8hpp_source.html | 123 +
docs/5.0.1/theta__comparators_8hpp_source.html | 127 +
docs/5.0.1/theta__constants_8hpp_source.html | 124 +
docs/5.0.1/theta__helpers_8hpp_source.html | 151 +
docs/5.0.1/theta__intersection_8hpp_source.html | 154 +
.../theta__intersection__base_8hpp_source.html | 138 +
...heta__intersection__base__impl_8hpp_source.html | 202 +
.../theta__intersection__impl_8hpp_source.html | 132 +
.../theta__jaccard__similarity_8hpp_source.html | 117 +
...eta__jaccard__similarity__base_8hpp_source.html | 198 +
.../theta__set__difference__base_8hpp_source.html | 133 +
...a__set__difference__base__impl_8hpp_source.html | 165 +
docs/5.0.1/theta__sketch_8hpp_source.html | 478 ++
docs/5.0.1/theta__sketch__impl_8hpp_source.html | 1007 ++++
docs/5.0.1/theta__union_8hpp_source.html | 170 +
docs/5.0.1/theta__union__base_8hpp_source.html | 141 +
.../theta__union__base__impl_8hpp_source.html | 175 +
docs/5.0.1/theta__union__impl_8hpp_source.html | 141 +
.../theta__update__sketch__base_8hpp_source.html | 312 +
...ta__update__sketch__base__impl_8hpp_source.html | 524 ++
docs/5.0.1/tuple__a__not__b_8hpp_source.html | 136 +
docs/5.0.1/tuple__a__not__b__impl_8hpp_source.html | 114 +
docs/5.0.1/tuple__intersection_8hpp_source.html | 170 +
.../tuple__intersection__impl_8hpp_source.html | 127 +
.../tuple__jaccard__similarity_8hpp_source.html | 119 +
docs/5.0.1/tuple__sketch_8hpp_source.html | 487 ++
docs/5.0.1/tuple__sketch__impl_8hpp_source.html | 714 +++
docs/5.0.1/tuple__union_8hpp_source.html | 183 +
docs/5.0.1/tuple__union__impl_8hpp_source.html | 137 +
docs/5.0.1/u32__table_8hpp_source.html | 164 +
docs/5.0.1/u32__table__impl_8hpp_source.html | 345 ++
docs/5.0.1/var__opt__sketch_8hpp_source.html | 430 ++
docs/5.0.1/var__opt__sketch__impl_8hpp_source.html | 1837 ++++++
docs/5.0.1/var__opt__union_8hpp_source.html | 271 +
docs/5.0.1/var__opt__union__impl_8hpp_source.html | 721 +++
533 files changed, 97457 insertions(+)
diff --git a/docs/5.0.1/AuxHashMap-internal_8hpp_source.html b/docs/5.0.1/AuxHashMap-internal_8hpp_source.html
new file mode 100644
index 0000000..3e45324
--- /dev/null
+++ b/docs/5.0.1/AuxHashMap-internal_8hpp_source.html
@@ -0,0 +1,356 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "AuxHashMap.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00032"></a><span class="lineno"> 32</span> lgConfigK(lgConfigK),</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> lgAuxArrInts(lgAuxArrInts),</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> auxCount(0),</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> entries(1ULL << lgAuxArrInts, 0, allocator)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {}</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00041"></a><span class="lineno"> 41</span> }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00050"></a><span class="lineno"> 50</span>  uint8_t lgConfigK,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a 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 name="l00053"></a><span class="lineno"> 53</span>  uint8_t lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a 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 name="l00055"></a><span class="lineno"> 55</span>  lgArrInts = HllUtil<A>::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> uint32_t configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  AuxHashMap<A>* auxHashMap;</div>
+<div class="line"><a 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 name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (srcCompact) {</div>
+<div class="line"><a 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 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 name="l00067"></a><span class="lineno"> 67</span>  }</div>
+<div class="line"><a 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 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 name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
+<div class="line"><a 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 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 name="l00073"></a><span class="lineno"> 73</span>  auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  uint32_t itemsToRead = 1 << lgAuxArrInts;</div>
+<div class="line"><a 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 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 name="l00079"></a><span class="lineno"> 79</span>  }</div>
+<div class="line"><a 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 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 name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
+<div class="line"><a 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 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 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 name="l00086"></a><span class="lineno"> 86</span>  auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">if</span> (auxHashMap->getAuxCount() != auxCount) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  make_deleter()(auxHashMap);</div>
+<div class="line"><a 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 name="l00093"></a><span class="lineno"> 93</span>  }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">return</span> auxHashMap; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> AuxHashMap<A>* AuxHashMap<A>::deserialize(std::istream& is, uint8_t lgConfigK,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a 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 name="l00102"></a><span class="lineno"> 102</span>  uint8_t lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a 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 name="l00104"></a><span class="lineno"> 104</span>  lgArrInts = HllUtil<A>::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a 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 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 name="l00111"></a><span class="lineno"> 111</span>  aux_hash_map_ptr aux_ptr(auxHashMap, auxHashMap->make_deleter());</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> uint32_t configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> (srcCompact) {</div>
+<div class="line"><a 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 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 name="l00118"></a><span class="lineno"> 118</span>  uint32_t slotNo = HllUtil<A>::getLow26(pair) & configKmask;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  uint8_t value = HllUtil<A>::getValue(pair);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">const</span> uint32_t itemsToRead = 1 << lgAuxArrInts;</div>
+<div class="line"><a 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 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 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 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 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 name="l00129"></a><span class="lineno"> 129</span>  auxHashMap->mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (auxHashMap->getAuxCount() != auxCount) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  make_deleter()(auxHashMap);</div>
+<div class="line"><a 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 name="l00136"></a><span class="lineno"> 136</span>  }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">return</span> aux_ptr.release();</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> std::function<void(AuxHashMap<A>*)> AuxHashMap<A>::make_deleter() {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">return</span> [](AuxHashMap<A>* ptr) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  ahmAlloc alloc(ptr->entries.get_allocator());</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  ptr->~AuxHashMap();</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  alloc.deallocate(ptr, 1);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  };</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> AuxHashMap<A>* AuxHashMap<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a 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 name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> uint32_t AuxHashMap<A>::getAuxCount()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> auxCount;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> uint32_t* AuxHashMap<A>::getAuxIntArr(){</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> entries.data();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> uint8_t AuxHashMap<A>::getLgAuxArrInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> lgAuxArrInts;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> uint32_t AuxHashMap<A>::getCompactSizeBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> auxCount << 2;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> uint32_t AuxHashMap<A>::getUpdatableSizeBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">return</span> 4 << lgAuxArrInts;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (index >= 0) {</div>
+<div class="line"><a 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 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 name="l00187"></a><span class="lineno"> 187</span>  }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">// found empty entry</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  entries[~index] = entry_pair;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  ++auxCount;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  checkGrow();</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (index >= 0) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> HllUtil<A>::getValue(entries[index]);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  </div>
+<div class="line"><a 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 name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (idx >= 0) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  entries[idx] = HllUtil<A>::pair(slotNo, value);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div>
+<div class="line"><a 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 name="l00214"></a><span class="lineno"> 214</span>  + <span class="stringliteral">", Value: "</span> + std::to_string(value));</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">void</span> AuxHashMap<A>::checkGrow() {</div>
+<div class="line"><a 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 name="l00220"></a><span class="lineno"> 220</span>  growAuxSpace();</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">void</span> AuxHashMap<A>::growAuxSpace() {</div>
+<div class="line"><a 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 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 name="l00228"></a><span class="lineno"> 228</span>  vector_int entries_new(newArrLen, 0, entries.get_allocator());</div>
+<div class="line"><a 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 name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">const</span> uint32_t fetched = entries[i];</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="comment">// find empty in new array</span></div>
+<div class="line"><a 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 name="l00234"></a><span class="lineno"> 234</span>  entries_new[~idx] = fetched;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  entries = std::move(entries_new);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  </div>
+<div class="line"><a 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 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 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 name="l00243"></a><span class="lineno"> 243</span> <span class="comment">//Continues searching.</span></div>
+<div class="line"><a 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 name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00247"></a><span class="lineno"> 247</span>  <span class="keyword">const</span> uint32_t auxArrMask = (1 << lgAuxArrInts) - 1;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> uint32_t configKmask = (1 << lgConfigK) - 1;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  uint32_t probe = slotNo & auxArrMask;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keyword">const</span> uint32_t arrVal = auxArr[probe];</div>
+<div class="line"><a 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 name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div>
+<div class="line"><a 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 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 name="l00258"></a><span class="lineno"> 258</span>  }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> uint32_t stride = (slotNo >> lgAuxArrInts) | 1;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  probe = (probe + stride) & auxArrMask;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  } <span class="keywordflow">while</span> (probe != loopIndex);</div>
+<div class="line"><a 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 name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> coupon_iterator<A> AuxHashMap<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a 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 name="l00273"></a><span class="lineno"> 273</span> }</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/AuxHashMap_8hpp_source.html b/docs/5.0.1/AuxHashMap_8hpp_source.html
new file mode 100644
index 0000000..9465d4b
--- /dev/null
+++ b/docs/5.0.1/AuxHashMap_8hpp_source.html
@@ -0,0 +1,163 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _AUXHASHMAP_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _AUXHASHMAP_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <functional></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "coupon_iterator.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">class </span>AuxHashMap final {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 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 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 name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a 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 name="l00039"></a><span class="lineno"> 39</span>  uint8_t lgConfigK,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a 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 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 name="l00043"></a><span class="lineno"> 43</span>  uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a 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 name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">virtual</span> ~AuxHashMap() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  AuxHashMap* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  uint32_t getUpdatableSizeBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  uint32_t getCompactSizeBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  uint32_t getAuxCount() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  uint32_t* getAuxIntArr();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  uint8_t getLgAuxArrInts() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
+<div class="line"><a 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 name="l00057"></a><span class="lineno"> 57</span>  coupon_iterator<A> end() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div>
+<div class="line"><a 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 name="l00060"></a><span class="lineno"> 60</span>  uint8_t mustFindValueFor(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a 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 name="l00062"></a><span class="lineno"> 62</span>  </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a 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 name="l00065"></a><span class="lineno"> 65</span>  </div>
+<div class="line"><a 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 name="l00067"></a><span class="lineno"> 67</span>  </div>
+<div class="line"><a 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 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 name="l00070"></a><span class="lineno"> 70</span>  </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordtype">void</span> checkGrow();</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">void</span> growAuxSpace();</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">const</span> uint8_t lgConfigK;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  uint8_t lgAuxArrInts;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  uint32_t auxCount;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  vector_int entries;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> };</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#include "AuxHashMap-internal.hpp"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CompositeInterpolationXTable-internal_8hpp_source.html b/docs/5.0.1/CompositeInterpolationXTable-internal_8hpp_source.html
new file mode 100644
index 0000000..f3d66b8
--- /dev/null
+++ b/docs/5.0.1/CompositeInterpolationXTable-internal_8hpp_source.html
@@ -0,0 +1,888 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "CompositeInterpolationXTable.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <exception></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a 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 name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a 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 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 name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> uint32_t CompositeInterpolationXTable<A>::get_y_stride(uint8_t logK) {</div>
+<div class="line"><a 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 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 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 name="l00044"></a><span class="lineno"> 44</span>  + std::to_string(logK));</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> uint32_t CompositeInterpolationXTable<A>::get_x_arr_length() {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> numXArrValues;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a 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 name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  10.767999803534, 11.237701481774, 11.722738717438, 12.223246391222,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  12.739366773787, 13.271184824495, 13.818759686650, 14.382159835785,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  14.961390904922, 15.556414447178, 16.167227058768, 16.793705840034,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  17.435831011559, 18.093368824077, 18.766214022468, 19.454114555153,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  20.156877376380, 20.874309118151, 21.606085061388, 22.351926834624,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  23.111406651437, 23.884222842419, 24.669953053285, 25.468324695415,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  26.278740385032, 27.100807701976, 27.934264623663, 28.778498012717,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  29.633064579479, 30.497559091830, 31.371415928956, 32.254248998304,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  33.145649456017, 34.045084140394, 34.952069032314, 35.866210502243,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  36.787128772113, 37.714316067007, 38.647432342061, 39.586020708848,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  40.529738186256, 41.478377527525, 42.431435504179, 43.388619067416,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  44.349650659292, 45.314111448463, 46.281805382722, 47.252472240229,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  48.225969481651, 49.202042512440, 50.180350422249, 51.160761480664,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  52.143032445587, 53.127233235412, 54.112986437616, 55.100182392694,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  56.088558030701, 57.078156023607, 58.068788167275, 59.060493030644,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  60.053033784417, 61.046284072738, 62.040286486621, 63.034929032992,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  64.030027371399, 65.025588917110, 66.021614945599, 67.018177418440,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  68.015186786528, 69.012467972526, 70.010014322660, 71.007638150468,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  72.005472777573, 73.003558069130, 74.001925061314, 75.000323809106,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  75.998875046818, 76.997735309722, 77.996356820987, 78.995236661037,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  79.994185446564, 80.993179953574, 81.991936172868, 82.991277726952,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  83.990564675011, 84.990016215330, 85.989354175963, 86.988664031183,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  87.988038383374, 88.987487931153, 89.987011275632, 90.986376635228,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  91.985802667485, 92.985125933965, 93.984894049744, 94.984597185523,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  95.984374633793, 96.983987641198, 97.983728001025, 98.983151114601,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  99.982917278162, 100.982752268263, 101.982610588914, 102.982425129077,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  103.982425883214, 104.982193814993, 105.982188025268, 106.982005912713,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  107.981949640254, 108.981777381902, 109.981767708570, 110.981785341504,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  111.981686149156, 112.981635012054, 113.981557303839, 114.981412817204,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  115.981636136290, 116.981451847734, 117.981619278961, 118.981656205677,</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  119.981462628717, 120.981648197593, 121.981672839888, 122.981536601882,</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  123.981424780957, 124.981245233627, 125.981297203177, 126.981469882453,</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  127.981420558510, 128.981470958251, 129.981803124940, 130.981454077005,</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  131.981307772677, 132.981136552712, 133.981060440468, 134.980764897921,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  135.980250123519, 136.979947889981, 137.979778713731, 138.979651075854,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  139.979521006237, 140.979619490143, 141.979418214464, 142.979378742690,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  143.979006714929, 144.978789085341, 145.978940618746, 146.978699584620,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  147.978509489139, 148.978375065557, 149.978382007245, 150.978320879037,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  151.978431501891, 152.978357310224, 153.978079953131, 154.977867908315,</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  155.977897282267, 156.977732141540, 157.977285841428, 158.977381755450,</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  159.977107808858, 160.976898092463, 161.976945065052, 162.976415653211,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  163.976063254486, 164.976168718176, 165.976009634854, 166.975746910144,</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  167.975365498336, 168.975302031315, 169.975145815395, 170.975048401084,</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  171.974904933990, 172.974962856090, 173.974307743427, 174.974505556696,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  175.974404122880, 176.974154794798, 177.973936891006, 178.973909768514,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  179.973629325330, 180.973396428571, 181.973041798012, 182.972922327014,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  183.972453839631, 184.972389341638, 185.971978290400, 186.971721489488,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  187.971610992921, 188.971432541974, 189.970886522529, 190.970636748690,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  191.970543849249, 192.970222044828, 193.969945219163, 194.969816174441,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  195.969660267113, 196.969306217626, 197.969283141670, 198.968952697752,</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  199.968650726389, 200.968771498143, 201.969063388798, 202.968624157712,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  203.968385122471, 204.968459873029, 205.968253426841, 206.968128284823,</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  207.968002441937, 208.967981887571, 209.967853843352, 210.967653026858,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  211.967601511385, 212.967479077297, 213.967293002672, 214.967265475369,</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  215.967098197208, 216.966915139758, 217.966680984700, 218.966156974161,</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  219.965788928685, 220.965578199561, 221.965550145047, 222.965055562297,</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  223.965041228123, 224.965088576052, 225.964951649635, 226.964837079061,</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  227.964949815142, 228.964753278386, 229.964358666956, 230.964158288467,</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  231.964118659643, 232.964105599719, 233.964013041408, 234.963810178150,</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  235.963847138572, 236.963634735645, 237.963596910032, 238.963659218725,</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  239.963498440155, 240.963445597658, 241.963141291971, 242.962684055746,</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  243.962664757583, 244.962762174588, 245.962862664373, 246.962595237647,</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  247.962493432533, 248.962292518484, 249.962622934132, 250.962187495200,</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  251.962038306920, 252.961926735684, 253.961867248643, 254.961699581530,</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  255.961371028199</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> },</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// log K = 5</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  22.304000309384, 23.261989079230, 24.249656493833, 25.267226901899,</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  26.314781734430, 27.392414068382, 28.500177845081, 29.638044883897,</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  30.805888087516, 32.003714838418, 33.231360682863, 34.488477823483,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  35.774924122967, 37.090293268866, 38.434292452116, 39.806594197334,</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  41.206691028159, 42.634002763091, 44.088065403269, 45.568286128520,</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  47.074066947685, 48.604745105475, 50.159729872619, 51.738339282229,</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  53.339805618020, 54.963435280656, 56.608464119077, 58.274038434156,</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  59.959403900602, 61.663926660982, 63.386737477574, 65.127093833107,</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  66.884091606686, 68.656959698762, 70.445052178435, 72.247581860591,</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  74.063607663774, 75.892531705810, 77.733879994604, 79.586788509372,</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  81.450593478752, 83.324645303244, 85.208482496209, 87.101116685537,</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  89.002152917959, 90.911090999940, 92.827275073114, 94.750224301260,</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  96.679773715696, 98.615214511699, 100.556211548644, 102.502148428334,</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  104.452899214344, 106.407767504404, 108.366625832228, 110.329564692634,</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  112.295481742874, 114.264715056639, 116.236769512562, 118.211214593179,</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  120.188376370012, 122.167746134232, 124.148833002551, 126.131612799989,</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  128.116072530208, 130.102155735854, 132.089449244974, 134.077816832908,</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  136.067404409248, 138.057703527432, 140.049350564796, 142.041756984355,</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  144.034780624078, 146.028584459531, 148.022894428003, 150.017952482368,</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  152.013358245376, 154.009157360372, 156.005076955043, 158.001501688538,</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  159.998043891849, 161.995141096448, 163.992507770330, 165.990019741406,</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  167.987379363144, 169.985323168231, 171.983371903769, 173.981134136378,</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  175.979306888599, 177.977458741010, 179.975994045101, 181.974478508488,</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  183.973329438036, 185.972061903815, 187.971014174496, 189.969582278901,</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  191.968450510061, 193.967607022497, 195.966726931677, 197.965915341472,</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  199.964910588293, 201.964427852336, 203.964308576556, 205.963778587196,</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  207.963244179225, 209.962423156859, 211.961859295409, 213.961171237132,</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  215.960624048009, 217.959980906604, 219.959156277574, 221.958692298143,</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  223.958335010302, 225.958329061602, 227.957722024027, 229.957134954397,</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  231.956897929205, 233.956901572571, 235.956650770311, 237.956593290745,</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  239.956700470895, 241.956192761863, 243.956003327600, 245.955794901574,</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  247.955501305446, 249.954960233132, 251.954510187803, 253.954252376340,</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  255.954011943050, 257.953388008439, 259.953139524693, 261.952918466928,</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  263.952432910213, 265.952485387126, 267.952763908808, 269.952510701682,</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  271.952383356830, 273.951921008979, 275.951766755515, 277.951697578478,</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  279.951700548755, 281.951805228218, 283.951934023417, 285.952140722678,</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  287.952063941231, 289.951717207670, 291.951294241955, 293.950937111819,</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  295.950900506385, 297.950320403388, 299.949546547128, 301.949474819234,</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  303.949155377395, 305.948725010033, 307.948408553357, 309.948120512731,</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  311.947897212148, 313.947738181662, 315.947255247579, 317.946631669691,</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  319.946302193308, 321.945855881155, 323.945603079048, 325.944930145876,</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  327.945048538923, 329.944795565500, 331.944227346318, 333.943705422222,</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  335.943231918970, 337.942333069602, 339.942354997227, 341.941890952026,</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  343.941346276351, 345.940653575739, 347.940019001109, 349.940026817951,</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  351.938944534275, 353.938172407151, 355.937584534690, 357.937041224148,</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  359.936673631279, 361.936179855216, 363.936105840596, 365.935367434940,</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  367.935295315770, 369.934793960370, 371.934314961518, 373.933949277377,</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  375.933420587284, 377.933148188654, 379.932379363314, 381.931900192237,</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  383.930951130857, 385.930667541762, 387.930025971711, 389.929529183966,</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  391.929116798157, 393.928361940635, 395.927673611921, 397.927111110912,</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  399.926483516685, 401.925799510661, 403.924918492428, 405.924540208915,</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  407.924014467935, 409.923779779206, 411.922979548363, 413.922515268061,</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  415.922148908645, 417.921643066153, 419.921126587639, 421.920766647684,</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  423.920642824255, 425.920411492484, 427.920603679205, 429.920445437023,</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  431.920286509746, 433.919789058392, 435.919408587813, 437.918873200300,</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  439.918417416574, 441.918192491069, 443.918376503567, 445.917692006023,</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  447.917132642691, 449.917217997363, 451.916924115487, 453.916662151474,</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  455.916485288107, 457.915879851633, 459.915842501592, 461.915547354915,</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  463.914995141359, 465.914585759187, 467.914144928428, 469.913956069337,</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  471.913046082896, 473.912468624617, 475.912322983182, 477.912118100240,</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  479.911923664773, 481.911518944025, 483.911023761757, 485.910386539830,</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  487.910092345284, 489.910153786770, 491.909575245360, 493.908973823502,</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  495.908577061168, 497.908550221055, 499.908127020659, 501.907710605296,</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  503.907806972566, 505.907336571662, 507.907081330259, 509.906648846180,</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  511.906201574892</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> },</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// log K = 6</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> {</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  45.375999854524, 46.820948326168, 48.298703712049, 49.809402685314,</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  51.353165756275, 52.929933710602, 54.539893242468, 56.183033892089,</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  57.859217068495, 59.568519998303, 61.310801009963, 63.085886926328,</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  64.893798324934, 66.734230191052, 68.607173306372, 70.512210309984,</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  72.449265953981, 74.418007054647, 76.417910710559, 78.448929349152,</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  80.510585932256, 82.602514696500, 84.724061528721, 86.875166381330,</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  89.055217833675, 91.263852803721, 93.500342620773, 95.764451518395,</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  98.055566319691, 100.373234086043, 102.716794393386, 105.085599217566,</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  107.479363461004, 109.897282858060, 112.338907676111, 114.803401103124,</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  117.290259931022, 119.799265623507, 122.329323908482, 124.879681624600,</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  127.450299022993, 130.040239267142, 132.648756733593, 135.275366525219,</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  137.919720233989, 140.580778017562, 143.258128898839, 145.951552244700,</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  148.660145472460, 151.383257444852, 154.120434694643, 156.871202914301,</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  159.634634288797, 162.410377522877, 165.198249005575, 167.997420145534,</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  170.807579918337, 173.628020587905, 176.458633641294, 179.298282098581,</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  182.147449731726, 185.005094444186, 187.870899328937, 190.744709255561,</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  193.625572419776, 196.513740460772, 199.408599560293, 202.309940032246,</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  205.217132295894, 208.129828601313, 211.047995735211, 213.970919426104,</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  216.899109829571, 219.832024990852, 222.769136305806, 225.710258431247,</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  228.655217514772, 231.603984417526, 234.555642012353, 237.510635882749,</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  240.468820458907, 243.429903849174, 246.393192036307, 249.359251612075,</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  252.327416912482, 255.297598046767, 258.269777722144, 261.244337060733,</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  264.219958654591, 267.197643910088, 270.177202282129, 273.157339433786,</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  276.139287129066, 279.122276848731, 282.107226383752, 285.092136000673,</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  288.078230550129, 291.065256815999, 294.053160971001, 297.042401030971,</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  300.031784889467, 303.022502412860, 306.013581138287, 309.005124942334,</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  311.996910583050, 314.989635544162, 317.982189300799, 320.975762085573,</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  323.969719809182, 326.963672522149, 329.958419674913, 332.953046205989,</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  335.948338966110, 338.943201657934, 341.938798787180, 344.935321901459,</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  347.931089897905, 350.927355153871, 353.923731760523, 356.920383399325,</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  359.916863372939, 362.914245241722, 365.911216314347, 368.908636150615,</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  371.905028432797, 374.901981729273, 377.899718967915, 380.897391911925,</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  383.894945428721, 386.892974193389, 389.890517424427, 392.889050804732,</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  395.886893560179, 398.884852345719, 401.883235933616, 404.881805247652,</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  407.880049402262, 410.878410789472, 413.876755787854, 416.875140105536,</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  419.873758096660, 422.872739431833, 425.871627898739, 428.870663138631,</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  431.869475472357, 434.868378059774, 437.867537661532, 440.866274620049,</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  443.865086570094, 446.864282236320, 449.863630871851, 452.862772062678,</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  455.861877807413, 458.860680461949, 461.859728874700, 464.858478829514,</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  467.857314559298, 470.856707830759, 473.855641079729, 476.854880576501,</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  479.853812351976, 482.852666825246, 485.851471230749, 488.850997731659,</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  491.850420535006, 494.849118717584, 497.848645341646, 500.848230362352,</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  503.847546143645, 506.847285358235, 509.846275998715, 512.845599444922,</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  515.845441684852, 518.844522015985, 521.843923976006, 524.843281639782,</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  527.842399994830, 530.841152548296, 533.840788827465, 536.840058715879,</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  539.839578267778, 542.839076801367, 545.838441853502, 548.837925005355,</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  551.837456112430, 554.837041819817, 557.836916936797, 560.836116071833,</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  563.834832988710, 566.834107840572, 569.832763471368, 572.831700689757,</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  575.832050680783, 578.831190216307, 581.831249402778, 584.830325442080,</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  587.828993643112, 590.827962761832, 593.827454067745, 596.825833598259,</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  599.824193205007, 602.822806340644, 605.822276069352, 608.821423024191,</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  611.820006110523, 614.819016304854, 617.818220240160, 620.817311827644,</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  623.816286470744, 626.815211383752, 629.815077535810, 632.813925717940,</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  635.813392704099, 638.812424935595, 641.811289306882, 644.809932622788,</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  647.808609610738, 650.807771758015, 653.806851303878, 656.805452367508,</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  659.804133900742, 662.803103749985, 665.801910649522, 668.800969589926,</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  671.798796938405, 674.798110719805, 677.797843657187, 680.797711918663,</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  683.796449689643, 686.794998006462, 689.794205385109, 692.792836542916,</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  695.792195299304, 698.790778974184, 701.790704644168, 704.790168225574,</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  707.789261680438, 710.788674453657, 713.787207421297, 716.786043303658,</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  719.784740017888, 722.783523691482, 725.782739693893, 728.781695938105,</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  731.780295310459, 734.778719103047, 737.778056368816, 740.777014963309,</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  743.776470087777, 746.774710218241, 749.773897180146, 752.772555359445,</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  755.771799417720, 758.770328749569, 761.768940347768, 764.768630836408,</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  767.767399121425</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> },</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// log K = 7</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00292"></a><span class="lineno"> 292</span>  1280.019972</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> },</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// log K = 8</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00328"></a><span class="lineno"> 328</span>  2559.904334</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> },</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">// log K = 9</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00364"></a><span class="lineno"> 364</span>  5119.772474</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> },</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment">// log K = 10</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00400"></a><span class="lineno"> 400</span>  10239.429671</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> },</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment">// log K = 11</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00436"></a><span class="lineno"> 436</span>  20478.803179</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> },</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">// log K = 12</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00472"></a><span class="lineno"> 472</span>  40957.707784</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> },</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">// log K = 13</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00508"></a><span class="lineno"> 508</span>  81915.550079</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> },</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">// log K = 14</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00544"></a><span class="lineno"> 544</span>  163830.422631</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> },</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment">// log K = 15</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00580"></a><span class="lineno"> 580</span>  327660.786948</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> },</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// log K = 16</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00616"></a><span class="lineno"> 616</span>  655323.267522</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> },</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment">// log K = 17</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00652"></a><span class="lineno"> 652</span>  1310646.540340</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> },</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">// log K = 18</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00688"></a><span class="lineno"> 688</span>  2621295.625004</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> },</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment">// log K = 19</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00724"></a><span class="lineno"> 724</span>  5242591.881577</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> },</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="comment">// log K = 20</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00760"></a><span class="lineno"> 760</span>  10485173.027410</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> },</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="comment">// log K = 21</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> {</div>
+<div class="line"><a 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 name="l00796"></a><span class="lineno"> 796</span>  20970344.006053</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> };</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  </div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 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 name="l00805"></a><span class="lineno"> 805</span>  + std::to_string(logK));</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  }</div>
+<div class="line"><a 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 name="l00808"></a><span class="lineno"> 808</span> }</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  </div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> }</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CompositeInterpolationXTable_8hpp_source.html b/docs/5.0.1/CompositeInterpolationXTable_8hpp_source.html
new file mode 100644
index 0000000..7cc7192
--- /dev/null
+++ b/docs/5.0.1/CompositeInterpolationXTable_8hpp_source.html
@@ -0,0 +1,119 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a 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 name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span>CompositeInterpolationXTable {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a 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 name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">static</span> uint32_t get_x_arr_length();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> };</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "CompositeInterpolationXTable-internal.hpp"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CouponHashSet-internal_8hpp_source.html b/docs/5.0.1/CouponHashSet-internal_8hpp_source.html
new file mode 100644
index 0000000..ac2ef48
--- /dev/null
+++ b/docs/5.0.1/CouponHashSet-internal_8hpp_source.html
@@ -0,0 +1,355 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "CouponHashSet.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <exception></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> CouponHashSet<A>::CouponHashSet(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  : CouponList<A>(lgConfigK, tgtHllType, hll_mode::SET, allocator)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (lgConfigK <= 7) {</div>
+<div class="line"><a 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 name="l00040"></a><span class="lineno"> 40</span>  + std::to_string(lgConfigK));</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00046"></a><span class="lineno"> 46</span>  : CouponList<A>(that, tgtHllType) {}</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a 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 name="l00052"></a><span class="lineno"> 52</span>  ChsAlloc chsa(chs->getAllocator());</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  chs->~CouponHashSet();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  chsa.deallocate(chs, 1);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  };</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 name="l00062"></a><span class="lineno"> 62</span>  }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
+<div class="line"><a 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 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 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 name="l00067"></a><span class="lineno"> 67</span>  }</div>
+<div class="line"><a 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 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 name="l00070"></a><span class="lineno"> 70</span>  }</div>
+<div class="line"><a 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 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 name="l00073"></a><span class="lineno"> 73</span>  }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div>
+<div class="line"><a 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 name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (mode != SET) {</div>
+<div class="line"><a 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 name="l00078"></a><span class="lineno"> 78</span>  }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
+<div class="line"><a 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 name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">if</span> (lgK <= 7) {</div>
+<div class="line"><a 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 name="l00085"></a><span class="lineno"> 85</span>  + std::to_string(lgK));</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  } </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  uint8_t lgArrInts = data[hll_constants::LG_ARR_BYTE];</div>
+<div class="line"><a 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) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  uint32_t couponCount;</div>
+<div class="line"><a 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 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 name="l00093"></a><span class="lineno"> 93</span>  lgArrInts = HllUtil<>::computeLgArrInts(SET, couponCount, lgK);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">// Don't set couponCount in sketch here;</span></div>
+<div class="line"><a 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 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 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 name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span> (len < expectedLength) {</div>
+<div class="line"><a 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 name="l00101"></a><span class="lineno"> 101</span>  + <span class="stringliteral">", found: "</span> + std::to_string(len));</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  ChsAlloc chsa(allocator);</div>
+<div class="line"><a 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 name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (compactFlag) {</div>
+<div class="line"><a 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 name="l00109"></a><span class="lineno"> 109</span>  uint32_t coupon;</div>
+<div class="line"><a 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 name="l00111"></a><span class="lineno"> 111</span>  std::memcpy(&coupon, curPos, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  sketch->couponUpdate(coupon);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  sketch->coupons_.resize(1ULL << lgArrInts);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  sketch->couponCount_ = couponCount;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  std::memcpy(sketch->coupons_.data(),</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  data + hll_constants::HASH_SET_INT_ARR_START,</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00127"></a><span class="lineno"> 127</span>  uint8_t listHeader[8];</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div>
+<div class="line"><a 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 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 name="l00132"></a><span class="lineno"> 132</span>  }</div>
+<div class="line"><a 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 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 name="l00135"></a><span class="lineno"> 135</span>  }</div>
+<div class="line"><a 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 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 name="l00138"></a><span class="lineno"> 138</span>  }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  hll_mode mode = HllSketchImpl<A>::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (mode != SET) {</div>
+<div class="line"><a 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 name="l00143"></a><span class="lineno"> 143</span>  }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  </div>
+<div class="line"><a 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 name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">if</span> (lgK <= 7) {</div>
+<div class="line"><a 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 name="l00150"></a><span class="lineno"> 150</span>  + std::to_string(lgK));</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  uint8_t lgArrInts = listHeader[hll_constants::LG_ARR_BYTE];</div>
+<div class="line"><a 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) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a 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 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 name="l00157"></a><span class="lineno"> 157</span>  lgArrInts = HllUtil<>::computeLgArrInts(SET, couponCount, lgK);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  ChsAlloc chsa(allocator);</div>
+<div class="line"><a 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 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 name="l00163"></a><span class="lineno"> 163</span>  coupon_hash_set_ptr ptr(sketch, sketch->get_deleter());</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// Don't set couponCount here;</span></div>
+<div class="line"><a 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 name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (compactFlag) {</div>
+<div class="line"><a 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 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 name="l00170"></a><span class="lineno"> 170</span>  sketch->couponUpdate(coupon);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  sketch->coupons_.resize(1ULL << lgArrInts);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  sketch->couponCount_ = couponCount;</div>
+<div class="line"><a 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 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 name="l00177"></a><span class="lineno"> 177</span>  } </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">if</span> (!is.good())</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"error reading from std::istream"</span>); </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> ptr.release();</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> CouponHashSet<A>* CouponHashSet<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  ChsAlloc chsa(this->coupons_.get_allocator());</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</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 name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> CouponHashSet<A>* CouponHashSet<A>::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  ChsAlloc chsa(this->coupons_.get_allocator());</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</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 name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> HllSketchImpl<A>* CouponHashSet<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</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 name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">const</span> int32_t index = find<A>(this->coupons_.data(), lgCouponArrInts, coupon);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (index >= 0) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// found duplicate, ignore</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  this->coupons_[~index] = coupon; <span class="comment">// found empty</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  ++this->couponCount_;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">if</span> (checkGrowOrPromote()) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> this->promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> uint32_t CouponHashSet<A>::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> hll_constants::HASH_SET_INT_ARR_START;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> uint8_t CouponHashSet<A>::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> hll_constants::HASH_SET_PREINTS;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">bool</span> CouponHashSet<A>::checkGrowOrPromote() {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</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 name="l00225"></a><span class="lineno"> 225</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 name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (lgCouponArrInts == (this->lgConfigK_ - 3)) { <span class="comment">// at max size</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// promote to HLL</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  growHashSet(lgCouponArrInts + 1);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">void</span> CouponHashSet<A>::growHashSet(uint8_t tgtLgCoupArrSize) {</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keyword">const</span> uint32_t tgtLen = 1 << tgtLgCoupArrSize;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  vector_int coupons_new(tgtLen, 0, this->coupons_.get_allocator());</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</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 name="l00240"></a><span class="lineno"> 240</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 name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">const</span> uint32_t fetched = this->coupons_[i];</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</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 name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">if</span> (idx < 0) { <span class="comment">// found EMPTY</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  coupons_new[~idx] = fetched; <span class="comment">// insert</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Error: Found duplicate coupon"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  this->coupons_ = std::move(coupons_new);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</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 name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> uint32_t arrMask = (1 << lgArrInts) - 1;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  uint32_t probe = coupon & arrMask;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> uint32_t couponAtIdx = array[probe];</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (coupon == couponAtIdx) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span> probe; <span class="comment">//duplicate</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> uint32_t stride = ((coupon & hll_constants::KEY_MASK_26) >> lgArrInts) | 1;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  probe = (probe + stride) & arrMask;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  } <span class="keywordflow">while</span> (probe != loopIndex);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</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 name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> }</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CouponHashSet_8hpp_source.html b/docs/5.0.1/CouponHashSet_8hpp_source.html
new file mode 100644
index 0000000..d0d289f
--- /dev/null
+++ b/docs/5.0.1/CouponHashSet_8hpp_source.html
@@ -0,0 +1,139 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COUPONHASHSET_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _COUPONHASHSET_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 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 name="l00032"></a><span class="lineno"> 32</span>  CouponHashSet(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  CouponHashSet(<span class="keyword">const</span> CouponHashSet& that, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">virtual</span> ~CouponHashSet() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a 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 name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">protected</span>:</div>
+<div class="line"><a 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 name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a 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 name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">virtual</span> CouponHashSet* copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a 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 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 name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a 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 name="l00050"></a><span class="lineno"> 50</span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a 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 name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordtype">bool</span> checkGrowOrPromote();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordtype">void</span> growHashSet(uint8_t tgtLgCoupArrSize);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> };</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CouponList-internal_8hpp_source.html b/docs/5.0.1/CouponList-internal_8hpp_source.html
new file mode 100644
index 0000000..981c5b7
--- /dev/null
+++ b/docs/5.0.1/CouponList-internal_8hpp_source.html
@@ -0,0 +1,463 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "CubicInterpolation.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "count_zeros.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> CouponList<A>::CouponList(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> HllSketchImpl<A>(lgConfigK, tgtHllType, mode, false),</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> couponCount_(0),</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> oooFlag_(false),</div>
+<div class="line"><a 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 name="l00040"></a><span class="lineno"> 40</span> {}</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00044"></a><span class="lineno"> 44</span> HllSketchImpl<A>(that.lgConfigK_, tgtHllType, that.mode_, false),</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> couponCount_(that.couponCount_),</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> oooFlag_(that.oooFlag_),</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> coupons_(that.coupons_)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {}</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a 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 name="l00054"></a><span class="lineno"> 54</span>  ClAlloc cla(cl->getAllocator());</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  cl->~CouponList();</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  cla.deallocate(cl, 1);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  };</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> CouponList<A>* CouponList<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  ClAlloc cla(coupons_.get_allocator());</div>
+<div class="line"><a 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 name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00068"></a><span class="lineno"> 68</span>  ClAlloc cla(coupons_.get_allocator());</div>
+<div class="line"><a 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 name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 name="l00076"></a><span class="lineno"> 76</span>  }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div>
+<div class="line"><a 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 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 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 name="l00081"></a><span class="lineno"> 81</span>  }</div>
+<div class="line"><a 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 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 name="l00084"></a><span class="lineno"> 84</span>  }</div>
+<div class="line"><a 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 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 name="l00087"></a><span class="lineno"> 87</span>  }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  hll_mode mode = HllSketchImpl<A>::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">if</span> (mode != LIST) {</div>
+<div class="line"><a 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 name="l00092"></a><span class="lineno"> 92</span>  }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div>
+<div class="line"><a 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 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) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a 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) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a 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) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  </div>
+<div class="line"><a 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 name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">const</span> uint32_t couponsInArray = (compact ? couponCount : (1 << HllUtil<A>::computeLgArrInts(LIST, couponCount, lgK)));</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</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 name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (len < expectedLength) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</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 name="l00106"></a><span class="lineno"> 106</span>  + <span class="stringliteral">", found: "</span> + std::to_string(len));</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  ClAlloc cla(allocator);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  CouponList<A>* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList<A>(lgK, tgtHllType, mode, allocator);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  sketch->couponCount_ = couponCount;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  sketch->putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (!emptyFlag) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// only need to read valid coupons, unlike in stream case</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</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 name="l00117"></a><span class="lineno"> 117</span>  }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> CouponList<A>* CouponList<A>::newList(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  uint8_t listHeader[8];</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</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 name="l00129"></a><span class="lineno"> 129</span>  }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</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 name="l00135"></a><span class="lineno"> 135</span>  }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  hll_mode mode = HllSketchImpl<A>::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">if</span> (mode != LIST) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</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 name="l00140"></a><span class="lineno"> 140</span>  }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::EMPTY_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  ClAlloc cla(allocator);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  CouponList<A>* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList<A>(lgK, tgtHllType, mode, allocator);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">using</span> coupon_list_ptr = std::unique_ptr<CouponList<A>, std::function<void(HllSketchImpl<A>*)>>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  coupon_list_ptr ptr(sketch, sketch->get_deleter());</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">const</span> uint32_t couponCount = listHeader[hll_constants::LIST_COUNT_BYTE];</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  sketch->couponCount_ = couponCount;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  sketch->putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">if</span> (!emptyFlag) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// For stream processing, need to read entire number written to stream so read</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="comment">// pointer ends up set correctly.</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="comment">// If not compact, still need to read empty items even though in order.</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</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 name="l00162"></a><span class="lineno"> 162</span>  read(is, sketch->coupons_.data(), numToRead * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">if</span> (!is.good())</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"error reading from std::istream"</span>); </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> ptr.release();</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</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 name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</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 name="l00178"></a><span class="lineno"> 178</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 name="l00179"></a><span class="lineno"> 179</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 name="l00180"></a><span class="lineno"> 180</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 name="l00181"></a><span class="lineno"> 181</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 name="l00182"></a><span class="lineno"> 182</span>  bytes[hll_constants::FLAGS_BYTE] = this->makeFlagsByte(compact);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</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 name="l00184"></a><span class="lineno"> 184</span>  bytes[hll_constants::MODE_BYTE] = this->makeModeByte();</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (this->mode_ == SET) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  std::memcpy(bytes + hll_constants::HASH_SET_COUNT_INT, &couponCount_, <span class="keyword">sizeof</span>(couponCount_));</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">// coupons</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// isCompact() is always false for now</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  std::memcpy(bytes + getMemDataStart(), coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  bytes += getMemDataStart(); <span class="comment">// reusing pointer for incremental writes</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *<span class="keyword">this</span>) {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  std::memcpy(bytes, &coupon, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  bytes += <span class="keyword">sizeof</span>(coupon);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Impossible condition when serializing"</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">return</span> byteArr;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</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 name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">// header</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  write(os, preInts);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">const</span> uint8_t serialVersion(hll_constants::SER_VER);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  write(os, serialVersion);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">const</span> uint8_t familyId(hll_constants::FAMILY_ID);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  write(os, familyId);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">const</span> uint8_t lgKByte = this->lgConfigK_;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  write(os, lgKByte);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</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 name="l00226"></a><span class="lineno"> 226</span>  write(os, lgArrIntsByte);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">const</span> uint8_t flagsByte = this->makeFlagsByte(compact);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  write(os, flagsByte);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (this->mode_ == LIST) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</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 name="l00232"></a><span class="lineno"> 232</span>  write(os, listCount);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  } <span class="keywordflow">else</span> { <span class="comment">// mode == SET</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">const</span> uint8_t unused = 0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  write(os, unused);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">const</span> uint8_t modeByte = this->makeModeByte();</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  write(os, modeByte);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">if</span> (this->mode_ == SET) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// writing as int, already stored as int</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  write(os, couponCount_);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// coupons</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// isCompact() is always false for now</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  write(os, coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *<span class="keyword">this</span>) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  write(os, coupon);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Impossible condition when serializing"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> HllSketchImpl<A>* CouponList<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</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 name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">const</span> uint32_t couponAtIdx = coupons_[i];</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  coupons_[i] = coupon; <span class="comment">// the actual update</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  ++couponCount_;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</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 name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">if</span> (this->lgConfigK_ < 8) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">return</span> promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">return</span> promoteHeapListToSet(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// cell not empty</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (couponAtIdx == coupon) {</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// duplicate</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// cell not empty and not a duplicate, continue</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</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 name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</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 name="l00294"></a><span class="lineno"> 294</span>  </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">double</span> CouponList<A>::getEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation<A>::usingXAndYTables(couponCount_);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">return</span> fmax(est, couponCount_);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">double</span> CouponList<A>::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation<A>::usingXAndYTables(couponCount_);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</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 name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordtype">double</span> CouponList<A>::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation<A>::usingXAndYTables(couponCount_);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</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 name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</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 name="l00319"></a><span class="lineno"> 319</span>  </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> uint32_t CouponList<A>::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</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 name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> uint32_t CouponList<A>::getCouponCount()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> couponCount_;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> uint32_t CouponList<A>::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> getMemDataStart() + (couponCount_ << 2);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> uint32_t CouponList<A>::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> hll_constants::LIST_INT_ARR_START;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> uint8_t CouponList<A>::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span> hll_constants::LIST_PREINTS;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> }</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</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 name="l00347"></a><span class="lineno"> 347</span>  </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</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 name="l00350"></a><span class="lineno"> 350</span>  </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">void</span> CouponList<A>::putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag) {</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  oooFlag_ = oooFlag;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> A CouponList<A>::getAllocator()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">return</span> coupons_.get_allocator();</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> HllSketchImpl<A>* CouponList<A>::promoteHeapListToSet(CouponList& list) {</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> HllSketchImplFactory<A>::promoteListToSet(list);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> HllSketchImpl<A>* CouponList<A>::promoteHeapListOrSetToHll(CouponList& src) {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">return</span> HllSketchImplFactory<A>::promoteListOrSetToHll(src);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> coupon_iterator<A> CouponList<A>::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">return</span> coupon_iterator<A>(coupons_.data(), coupons_.size(), 0, all);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> coupon_iterator<A> CouponList<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</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 name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor">#endif </span><span class="comment">// _COUPONLIST_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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CouponList_8hpp_source.html b/docs/5.0.1/CouponList_8hpp_source.html
new file mode 100644
index 0000000..c5da8be
--- /dev/null
+++ b/docs/5.0.1/CouponList_8hpp_source.html
@@ -0,0 +1,172 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COUPONLIST_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _COUPONLIST_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "coupon_iterator.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">class </span>HllSketchImplFactory;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">class </span>CouponList : <span class="keyword">public</span> HllSketchImpl<A> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  CouponList(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  CouponList(<span class="keyword">const</span> CouponList& that, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a 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 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 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 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 name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">virtual</span> ~CouponList() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a 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 name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a 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 name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">virtual</span> CouponList* copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">virtual</span> HllSketchImpl<A>* couponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a 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 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 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 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 name="l00058"></a><span class="lineno"> 58</span>  </div>
+<div class="line"><a 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 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 name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a 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 name="l00063"></a><span class="lineno"> 63</span>  coupon_iterator<A> end() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">protected</span>:</div>
+<div class="line"><a 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 name="l00067"></a><span class="lineno"> 67</span>  </div>
+<div class="line"><a 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 name="l00069"></a><span class="lineno"> 69</span>  </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  HllSketchImpl<A>* promoteHeapListToSet(CouponList& list);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  HllSketchImpl<A>* promoteHeapListOrSetToHll(CouponList& src);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
+<div class="line"><a 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 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 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 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 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 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 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 name="l00080"></a><span class="lineno"> 80</span>  </div>
+<div class="line"><a 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 name="l00082"></a><span class="lineno"> 82</span>  </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  uint32_t couponCount_;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordtype">bool</span> oooFlag_;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  vector_int coupons_;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a 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 name="l00088"></a><span class="lineno"> 88</span> };</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div>
+<div class="line"><a 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="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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CubicInterpolation-internal_8hpp_source.html b/docs/5.0.1/CubicInterpolation-internal_8hpp_source.html
new file mode 100644
index 0000000..1b87f24
--- /dev/null
+++ b/docs/5.0.1/CubicInterpolation-internal_8hpp_source.html
@@ -0,0 +1,301 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "CubicInterpolation.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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="keywordtype">dou [...]
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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">double [...]
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00042"></a><span class="lineno"> 42</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00046"></a><span class="lineno"> 46</span>  </div>
+<div class="line"><a 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 name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a 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 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 name="l00051"></a><span class="lineno"> 51</span>  0.0, 1.0, 20.0, 400.0,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  8000.0, 160000.0, 300000.0, 600000.0,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  900000.0, 1200000.0, 1500000.0, 1800000.0,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  2100000.0, 2400000.0, 2700000.0, 3000000.0,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  3300000.0, 3600000.0, 3900000.0, 4200000.0,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  4500000.0, 4800000.0, 5100000.0, 5400000.0,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  5700000.0, 6000000.0, 6300000.0, 6600000.0,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  6900000.0, 7200000.0, 7500000.0, 7800000.0,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  8100000.0, 8400000.0, 8700000.0, 9000000.0,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  9300000.0, 9600000.0, 9900000.0, 10200000.0</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> };</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
+<div class="line"><a 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 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 name="l00065"></a><span class="lineno"> 65</span>  0.0000000000000000, 1.0000000000000000, 20.0000009437402611, 400.0003963713384110,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  8000.1589294602090376, 160063.6067763759638183, 300223.7071597663452849, 600895.5933856170158833,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  902016.8065120954997838, 1203588.4983199508860707, 1505611.8245524743106216, 1808087.9449319066479802,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  2111018.0231759352609515, 2414403.2270142501220107, 2718244.7282051891088486, 3022543.7025524540804327,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  3327301.3299219091422856, 3632518.7942584538832307, 3938197.2836029687896371, 4244337.9901093561202288,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  4550942.1100616492331028, 4858010.8438911894336343, 5165545.3961938973516226, 5473546.9757476449012756,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  5782016.7955296505242586, 6090956.0727340159937739, 6400366.0287892958149314, 6710247.8893762007355690,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  7020602.8844453142955899, 7331432.2482349723577499, 7642737.2192891482263803, 7954519.0404754765331745,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  8266778.9590033423155546, 8579518.2264420464634895, 8892738.0987390466034412, 9206439.8362383283674717,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  9520624.7036988288164139, 9835293.9703129194676876, 10150448.9097250290215015, 10466090.8000503256917000</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> };</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> usingXAndYTables(xArrComputed, yArrComputed, numEntries, x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">int</span> offset;</div>
+<div class="line"><a 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 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 name="l00088"></a><span class="lineno"> 88</span>  }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a 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 name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> (yArr[len-1]);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  offset = findStraddle<A>(xArr, len, x);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">if</span> (offset < 0 && offset > len-2) {</div>
+<div class="line"><a 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 name="l00097"></a><span class="lineno"> 97</span>  }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div>
+<div class="line"><a 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 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 name="l00101"></a><span class="lineno"> 101</span>  }</div>
+<div class="line"><a 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 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 name="l00104"></a><span class="lineno"> 104</span>  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// main case</span></div>
+<div class="line"><a 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 name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a 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 name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 name="l00114"></a><span class="lineno"> 114</span>  xArr[offset+1], yArr[offset+1],</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  xArr[offset+2], yArr[offset+2],</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  xArr[offset+3], yArr[offset+3],</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  x) );</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 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 name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div>
+<div class="line"><a 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 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 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 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 name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a 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 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 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 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 name="l00136"></a><span class="lineno"> 136</span>  </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">double</span> term0 = y0 * l0_numer / l0_denom;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">double</span> term1 = y1 * l1_numer / l1_denom;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordtype">double</span> term2 = y2 * l2_numer / l2_denom;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordtype">double</span> term3 = y3 * l3_numer / l3_denom;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> (term0 + term1 + term2 + term3);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  </div>
+<div class="line"><a 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 name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00148"></a><span class="lineno"> 148</span> {</div>
+<div class="line"><a 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 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 name="l00151"></a><span class="lineno"> 151</span>  }</div>
+<div class="line"><a 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 name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  </div>
+<div class="line"><a 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 name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00159"></a><span class="lineno"> 159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (l >= r) {</div>
+<div class="line"><a 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 name="l00163"></a><span class="lineno"> 163</span>  }</div>
+<div class="line"><a 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 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 name="l00166"></a><span class="lineno"> 166</span>  }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div>
+<div class="line"><a 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 name="l00169"></a><span class="lineno"> 169</span>  m = l + ((r-l)/2);</div>
+<div class="line"><a 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 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 name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">//Interpolate using X table and Y stride</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  </div>
+<div class="line"><a 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 name="l00187"></a><span class="lineno"> 187</span> <span class="comment">// Used by HllEstimators</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 name="l00192"></a><span class="lineno"> 192</span>  </div>
+<div class="line"><a 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 name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"impossible values during interpolaiton"</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  </div>
+<div class="line"><a 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 name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> (yStride * (xArrLenM1));</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div>
+<div class="line"><a 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 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 name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> ((offset < 0) || (offset > xArrLenM2)) {</div>
+<div class="line"><a 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 name="l00205"></a><span class="lineno"> 205</span>  }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  </div>
+<div class="line"><a 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 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 name="l00209"></a><span class="lineno"> 209</span>  }</div>
+<div class="line"><a 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 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 name="l00212"></a><span class="lineno"> 212</span>  }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="comment">/* main case */</span></div>
+<div class="line"><a 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 name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  </div>
+<div class="line"><a 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 name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">return</span> cubicInterpolate<A>(</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  xArr[offset + 0], yStride * (offset + 0),</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  xArr[offset + 1], yStride * (offset + 1),</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  xArr[offset + 2], yStride * (offset + 2),</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  xArr[offset + 3], yStride * (offset + 3),</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  x);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/CubicInterpolation_8hpp_source.html b/docs/5.0.1/CubicInterpolation_8hpp_source.html
new file mode 100644
index 0000000..1a53fce
--- /dev/null
+++ b/docs/5.0.1/CubicInterpolation_8hpp_source.html
@@ -0,0 +1,122 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _CUBICINTERPOLATION_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _CUBICINTERPOLATION_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a 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 name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span>CubicInterpolation {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 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 name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a 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 name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a 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 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 name="l00037"></a><span class="lineno"> 37</span> };</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "CubicInterpolation-internal.hpp"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HarmonicNumbers-internal_8hpp_source.html b/docs/5.0.1/HarmonicNumbers-internal_8hpp_source.html
new file mode 100644
index 0000000..c6c6b62
--- /dev/null
+++ b/docs/5.0.1/HarmonicNumbers-internal_8hpp_source.html
@@ -0,0 +1,169 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HarmonicNumbers.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</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 name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> (bitVectorLength * (harmonicNumber(bitVectorLength) - harmonicNumber(bitVectorLength - numBitsSet)));</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</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 name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">static</span> <span class="keywordtype">double</span> tableOfExactHarmonicNumbers[] = {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  0.0, <span class="comment">// 0</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  1.0, <span class="comment">// 1</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  1.5, <span class="comment">// 2</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  11.0 / 6.0, <span class="comment">// 3</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  25.0 / 12.0, <span class="comment">// 4</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  137.0 / 60.0, <span class="comment">// 5</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  49.0 / 20.0, <span class="comment">// 6</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  363.0 / 140.0, <span class="comment">// 7</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  761.0 / 280.0, <span class="comment">// 8</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  7129.0 / 2520.0, <span class="comment">// 9</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  7381.0 / 2520.0, <span class="comment">// 10</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  83711.0 / 27720.0, <span class="comment">// 11</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  86021.0 / 27720.0, <span class="comment">// 12</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  1145993.0 / 360360.0, <span class="comment">// 13</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  1171733.0 / 360360.0, <span class="comment">// 14</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  1195757.0 / 360360.0, <span class="comment">// 15</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  2436559.0 / 720720.0, <span class="comment">// 16</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  42142223.0 / 12252240.0, <span class="comment">// 17</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  14274301.0 / 4084080.0, <span class="comment">// 18</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  275295799.0 / 77597520.0, <span class="comment">// 19</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  55835135.0 / 15519504.0, <span class="comment">// 20</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  18858053.0 / 5173168.0, <span class="comment">// 21</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  19093197.0 / 5173168.0, <span class="comment">// 22</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  444316699.0 / 118982864.0, <span class="comment">// 23</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  1347822955.0 / 356948592.0 <span class="comment">// 24</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  };</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</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 name="l00065"></a><span class="lineno"> 65</span>  </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">double</span> HarmonicNumbers<A>::harmonicNumber(<span class="keyword">const</span> uint64_t x_i) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (x_i < NUM_EXACT_HARMONIC_NUMBERS) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> tableOfExactHarmonicNumbers[x_i];</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</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 name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">double</span> invSq = 1.0 / (x * x);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordtype">double</span> sum = log(x) + EULER_MASCHERONI_CONSTANT + (1.0 / (2.0 * x));</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">/* note: the number of terms included from this series expansion is appropriate</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> for the size of the exact table (25) and the precision of doubles */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordtype">double</span> pow = invSq; <span class="comment">// now n^-2</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  sum -= pow * (1.0 / 12.0);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  pow *= invSq; <span class="comment">// now n^-4</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  sum += pow * (1.0 / 120.0);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  pow *= invSq; <span class="comment">/* now n^-6 */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  sum -= pow * (1.0 / 252.0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  pow *= invSq; <span class="comment">/* now n^-8 */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  sum += pow * (1.0 / 240.0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HarmonicNumbers_8hpp_source.html b/docs/5.0.1/HarmonicNumbers_8hpp_source.html
new file mode 100644
index 0000000..aa76c1f
--- /dev/null
+++ b/docs/5.0.1/HarmonicNumbers_8hpp_source.html
@@ -0,0 +1,120 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HARMONICNUMBERS_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HARMONICNUMBERS_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <cstdint></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a 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 name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">class </span>HarmonicNumbers {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a 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 name="l00042"></a><span class="lineno"> 42</span> };</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "HarmonicNumbers-internal.hpp"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/Hll4Array-internal_8hpp_source.html b/docs/5.0.1/Hll4Array-internal_8hpp_source.html
new file mode 100644
index 0000000..33c1065
--- /dev/null
+++ b/docs/5.0.1/Hll4Array-internal_8hpp_source.html
@@ -0,0 +1,429 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "Hll4Array.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> Hll4Array<A>::Hll4Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> HllArray<A>(lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, startFullSize, allocator),</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> auxHashMap_(nullptr)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> uint32_t numBytes = this->hll4ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> Hll4Array<A>::Hll4Array(<span class="keyword">const</span> Hll4Array<A>& that) :</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  HllArray<A>(that)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div>
+<div class="line"><a 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 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 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 name="l00048"></a><span class="lineno"> 48</span>  auxHashMap_ = that.auxHashMap_->copy();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  auxHashMap_ = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> Hll4Array<A>::Hll4Array(<span class="keyword">const</span> HllArray<A>& other) :</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  HllArray<A>(other.getLgConfigK(), <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, other.isStartFullSize(), other.getAllocator()),</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  auxHashMap_(nullptr)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> {</div>
+<div class="line"><a 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 name="l00060"></a><span class="lineno"> 60</span>  this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  this->oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
+<div class="line"><a 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 name="l00064"></a><span class="lineno"> 64</span>  internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  this->hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  this->rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> Hll4Array<A>::~Hll4Array() {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">// hllByteArr deleted in parent</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  AuxHashMap<A>::make_deleter()(auxHashMap_);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a 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 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 name="l00083"></a><span class="lineno"> 83</span>  Hll4Alloc hll4Alloc(hll->getAllocator());</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  hll->~Hll4Array();</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  hll4Alloc.deallocate(hll, 1);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  };</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> Hll4Array<A>* Hll4Array<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a 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 name="l00092"></a><span class="lineno"> 92</span>  Hll4Alloc hll4Alloc(this->getAllocator());</div>
+<div class="line"><a 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 name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> uint32_t Hll4Array<A>::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  uint32_t auxBytes;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">if</span> (auxHashMap == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_];</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  auxBytes = 4 << auxHashMap->getLgAuxArrInts();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div>
+<div class="line"><a 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 name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> uint32_t Hll4Array<A>::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> this->hll4ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> AuxHashMap<A>* Hll4Array<A>::getAuxHashMap()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> auxHashMap_;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> Hll4Array<A>::putAuxHashMap(AuxHashMap<A>* auxHashMap) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  this->auxHashMap_ = auxHashMap;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> <span class="keywordtype">byte</span> >> 4;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div>
+<div class="line"><a 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 name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> auxHashMap_->mustFindValueFor(slot);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> HllSketchImpl<A>* Hll4Array<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> Hll4Array<A>::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a 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 name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">if</span> (newValue <= this->curMin_) {</div>
+<div class="line"><a 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 name="l00149"></a><span class="lineno"> 149</span>  }</div>
+<div class="line"><a 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 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 name="l00152"></a><span class="lineno"> 152</span>  internalHll4Update(slotNo, newValue);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">const</span> uint32_t byteno = slotNo >> 1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">const</span> uint8_t oldValue = this->hllByteArr_[byteno];</div>
+<div class="line"><a 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 name="l00160"></a><span class="lineno"> 160</span>  this->hllByteArr_[byteno]</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  = ((oldValue & hll_constants::hiNibbleMask) | (newValue & hll_constants::loNibbleMask));</div>
+<div class="line"><a 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 name="l00163"></a><span class="lineno"> 163</span>  this->hllByteArr_[byteno]</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  = ((oldValue & hll_constants::loNibbleMask) | ((newValue << 4) & hll_constants::hiNibbleMask));</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div>
+<div class="line"><a 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 name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00171"></a><span class="lineno"> 171</span>  </div>
+<div class="line"><a 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 name="l00173"></a><span class="lineno"> 173</span>  <span class="comment">// this is provably a LB:</span></div>
+<div class="line"><a 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 name="l00175"></a><span class="lineno"> 175</span>  </div>
+<div class="line"><a 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 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 name="l00178"></a><span class="lineno"> 178</span>  <span class="comment">// 846: rawStoredOldValue == AUX_TOKEN</span></div>
+<div class="line"><a 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 name="l00180"></a><span class="lineno"> 180</span>  ? (lbOnOldValue) : (auxHashMap_->mustFindValueFor(slotNo));</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div>
+<div class="line"><a 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 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 name="l00184"></a><span class="lineno"> 184</span>  this->hipAndKxQIncrementalUpdate(actualOldValue, newVal);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// newVal >= curMin</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  </div>
+<div class="line"><a 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 name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">// redundant since we know newVal >= curMin,</span></div>
+<div class="line"><a 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 name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">//assert(shiftedNewValue >= 0);</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  </div>
+<div class="line"><a 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 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 name="l00195"></a><span class="lineno"> 195</span>  <span class="comment">// actually modify the data structure</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  </div>
+<div class="line"><a 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 name="l00198"></a><span class="lineno"> 198</span>  <span class="comment">// the byte array already contains aux token</span></div>
+<div class="line"><a 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 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 name="l00201"></a><span class="lineno"> 201</span>  auxHashMap_->mustReplace(slotNo, newVal);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div>
+<div class="line"><a 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 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 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 name="l00206"></a><span class="lineno"> 206</span>  }</div>
+<div class="line"><a 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 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 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 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 name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">// added to the exception table</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  putSlot(slotNo, hll_constants::AUX_TOKEN);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a 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 name="l00215"></a><span class="lineno"> 215</span>  this->lgConfigK_, this->getAllocator());</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  auxHashMap_->mustAdd(slotNo, newVal);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div>
+<div class="line"><a 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 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 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 name="l00222"></a><span class="lineno"> 222</span>  putSlot(slotNo, shiftedNewValue);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  </div>
+<div class="line"><a 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 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 name="l00228"></a><span class="lineno"> 228</span>  --(this->numAtCurMin_);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">while</span> (this->numAtCurMin_ == 0) {</div>
+<div class="line"><a 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 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 name="l00232"></a><span class="lineno"> 232</span>  }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  } <span class="comment">// end newVal <= actualOldValue</span></div>
+<div class="line"><a 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 name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  </div>
+<div class="line"><a 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 name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// HipAccum, kxq0 and kxq1 remain untouched.</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// This changes curMin, numAtCurMin, hllByteArr and auxMap.</span></div>
+<div class="line"><a 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 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 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 name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">void</span> Hll4Array<A>::shiftToBiggerCurMin() {</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">const</span> uint8_t newCurMin = this->curMin_ + 1;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> uint32_t configKmask = configK - 1;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  uint32_t numAtNewCurMin = 0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  uint32_t numAuxTokens = 0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  </div>
+<div class="line"><a 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 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 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 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 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 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 name="l00259"></a><span class="lineno"> 259</span>  uint8_t oldStoredValue = getSlot(i);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">if</span> (oldStoredValue == 0) {</div>
+<div class="line"><a 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 name="l00262"></a><span class="lineno"> 262</span>  }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">if</span> (oldStoredValue < hll_constants::AUX_TOKEN) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  putSlot(i, --oldStoredValue);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">if</span> (oldStoredValue == 0) { numAtNewCurMin++; }</div>
+<div class="line"><a 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 name="l00267"></a><span class="lineno"> 267</span>  numAuxTokens++;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a 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 name="l00270"></a><span class="lineno"> 270</span>  }</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  </div>
+<div class="line"><a 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 name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// if needed.</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  AuxHashMap<A>* newAuxMap = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  uint32_t slotNum;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  uint8_t oldActualVal;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  uint8_t newShiftedVal;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  </div>
+<div class="line"><a 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 name="l00283"></a><span class="lineno"> 283</span>  slotNum = HllUtil<A>::getLow26(coupon) & configKmask;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  oldActualVal = HllUtil<A>::getValue(coupon);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">if</span> (oldActualVal < newCurMin) {</div>
+<div class="line"><a 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 name="l00287"></a><span class="lineno"> 287</span>  }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  newShiftedVal = oldActualVal - newCurMin;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">if</span> (getSlot(slotNum) != hll_constants::AUX_TOKEN) {</div>
+<div class="line"><a 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 name="l00292"></a><span class="lineno"> 292</span>  }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// Array slot != AUX_TOKEN at getSlot(slotNum);</span></div>
+<div class="line"><a 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 name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (newShiftedVal != 14) {</div>
+<div class="line"><a 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 name="l00297"></a><span class="lineno"> 297</span>  }</div>
+<div class="line"><a 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 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 name="l00300"></a><span class="lineno"> 300</span>  putSlot(slotNum, newShiftedVal);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  numAuxTokens--;</div>
+<div class="line"><a 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 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 name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (newAuxMap == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a 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 name="l00306"></a><span class="lineno"> 306</span>  this->lgConfigK_, this->getAllocator());</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  newAuxMap->mustAdd(slotNum, oldActualVal);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  } <span class="comment">//end scan of oldAuxMap</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  } <span class="comment">//end if (auxHashMap != null)</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">else</span> { <span class="comment">// oldAuxMap == null</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (numAuxTokens != 0) {</div>
+<div class="line"><a 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 name="l00315"></a><span class="lineno"> 315</span>  }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (newAuxMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">if</span> (newAuxMap->getAuxCount() != numAuxTokens) {</div>
+<div class="line"><a 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 name="l00321"></a><span class="lineno"> 321</span>  + <span class="stringliteral">", HLL tokesn: "</span> + std::to_string(numAuxTokens));</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  AuxHashMap<A>::make_deleter()(auxHashMap_);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  auxHashMap_ = newAuxMap;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  this->curMin_ = newCurMin;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  this->numAtCurMin_ = numAtNewCurMin;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00337"></a><span class="lineno"> 337</span>  auxHashMap_, this->curMin_, all);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 name="l00343"></a><span class="lineno"> 343</span>  this->tgtHllType_, auxHashMap_, this->curMin_, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/Hll4Array_8hpp_source.html b/docs/5.0.1/Hll4Array_8hpp_source.html
new file mode 100644
index 0000000..ce8dfbd
--- /dev/null
+++ b/docs/5.0.1/Hll4Array_8hpp_source.html
@@ -0,0 +1,145 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLL4ARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLL4ARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "AuxHashMap.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">explicit</span> Hll4Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a 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 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 name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">virtual</span> ~Hll4Array();</div>
+<div class="line"><a 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 name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a 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 name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a 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 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 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 name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a 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 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 name="l00046"></a><span class="lineno"> 46</span>  </div>
+<div class="line"><a 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 name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a 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 name="l00050"></a><span class="lineno"> 50</span>  <span class="comment">// does *not* delete old map if overwriting</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordtype">void</span> putAuxHashMap(AuxHashMap<A>* auxHashMap);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div>
+<div class="line"><a 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 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 name="l00055"></a><span class="lineno"> 55</span>  </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a 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 name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordtype">void</span> shiftToBiggerCurMin();</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  AuxHashMap<A>* auxHashMap_;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> };</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/Hll6Array-internal_8hpp_source.html b/docs/5.0.1/Hll6Array-internal_8hpp_source.html
new file mode 100644
index 0000000..f928407
--- /dev/null
+++ b/docs/5.0.1/Hll6Array-internal_8hpp_source.html
@@ -0,0 +1,206 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "Hll6Array.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> Hll6Array<A>::Hll6Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> HllArray<A>(lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, startFullSize, allocator)</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div>
+<div class="line"><a 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 name="l00034"></a><span class="lineno"> 34</span>  this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> Hll6Array<A>::Hll6Array(<span class="keyword">const</span> HllArray<A>& other) :</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  HllArray<A>(other.getLgConfigK(), <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, other.isStartFullSize(), other.getAllocator())</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a 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 name="l00042"></a><span class="lineno"> 42</span>  this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  this->oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  uint32_t num_zeros = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span>  num_zeros--;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  this->numAtCurMin_ = num_zeros;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  this->hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  this->rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a 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 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 name="l00061"></a><span class="lineno"> 61</span>  Hll6Alloc hll6Alloc(hll->getAllocator());</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  hll->~Hll6Array();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  hll6Alloc.deallocate(hll, 1);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  };</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> Hll6Array<A>* Hll6Array<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a 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 name="l00070"></a><span class="lineno"> 70</span>  Hll6Alloc hll6Alloc(this->getAllocator());</div>
+<div class="line"><a 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 name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> uint32_t shift = startBit & 0x7;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">const</span> uint32_t byteIdx = startBit >> 3; </div>
+<div class="line"><a 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 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 name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">const</span> uint32_t shift = startBit & 0x7;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">const</span> uint32_t byteIdx = startBit >> 3;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">const</span> uint16_t valShifted = (value & 0x3F) << shift;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  uint16_t curMasked = (this->hllByteArr_[byteIdx + 1] << 8) | this->hllByteArr_[byteIdx];</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  curMasked &= (~(hll_constants::VAL_MASK_6 << shift));</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">const</span> uint16_t insert = curMasked | valShifted;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  this->hllByteArr_[byteIdx] = insert & 0xFF;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  this->hllByteArr_[byteIdx + 1] = (insert & 0xFF00) >> 8;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> uint32_t Hll6Array<A>::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> this->hll6ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> HllSketchImpl<A>* Hll6Array<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> Hll6Array<A>::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a 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 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 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 name="l00112"></a><span class="lineno"> 112</span>  </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> uint8_t curVal = getSlot(slotNo);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (newVal > curVal) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  putSlot(slotNo, newVal);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  this->hipAndKxQIncrementalUpdate(curVal, newVal);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">if</span> (curVal == 0) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  this->numAtCurMin_--; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/Hll6Array_8hpp_source.html b/docs/5.0.1/Hll6Array_8hpp_source.html
new file mode 100644
index 0000000..53db56c
--- /dev/null
+++ b/docs/5.0.1/Hll6Array_8hpp_source.html
@@ -0,0 +1,133 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLL6ARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLL6ARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span>Hll6Iterator;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  Hll6Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a 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 name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">virtual</span> ~Hll6Array() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a 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 name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a 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 name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a 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 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 name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a 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 name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> };</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/Hll8Array-internal_8hpp_source.html b/docs/5.0.1/Hll8Array-internal_8hpp_source.html
new file mode 100644
index 0000000..62463ca
--- /dev/null
+++ b/docs/5.0.1/Hll8Array-internal_8hpp_source.html
@@ -0,0 +1,284 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "Hll8Array.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> Hll8Array<A>::Hll8Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> HllArray<A>(lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, startFullSize, allocator)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a 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 name="l00032"></a><span class="lineno"> 32</span>  this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> Hll8Array<A>::Hll8Array(<span class="keyword">const</span> HllArray<A>& other):</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  HllArray<A>(other.getLgConfigK(), <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, other.isStartFullSize(), other.getAllocator())</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a 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 name="l00040"></a><span class="lineno"> 40</span>  this->hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  this->oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  uint32_t num_zeros = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a 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 name="l00045"></a><span class="lineno"> 45</span>  num_zeros--;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  this->numAtCurMin_ = num_zeros;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  this->hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  this->rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">return</span> [](HllSketchImpl<A>* ptr) {</div>
+<div class="line"><a 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 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 name="l00059"></a><span class="lineno"> 59</span>  Hll8Alloc hll8Alloc(hll->getAllocator());</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  hll->~Hll8Array();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  hll8Alloc.deallocate(hll, 1);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  };</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> Hll8Array<A>* Hll8Array<A>::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a 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 name="l00068"></a><span class="lineno"> 68</span>  Hll8Alloc hll8Alloc(this->getAllocator());</div>
+<div class="line"><a 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 name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> this->hllByteArr_[slotNo];</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00079"></a><span class="lineno"> 79</span>  this->hllByteArr_[slotNo] = value;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> uint32_t Hll8Array<A>::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> this->hll8ArrBytes(this->lgConfigK_);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> HllSketchImpl<A>* Hll8Array<A>::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> Hll8Array<A>::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a 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 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 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 name="l00098"></a><span class="lineno"> 98</span>  </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">const</span> uint8_t curVal = this->hllByteArr_[slotNo];</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">if</span> (newVal > curVal) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  this->hllByteArr_[slotNo] = newVal;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  this->hipAndKxQIncrementalUpdate(curVal, newVal);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  this->numAtCurMin_ -= curVal == 0; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> Hll8Array<A>::mergeList(<span class="keyword">const</span> CouponList<A>& src) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: src) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span> Hll8Array<A>::mergeHll(<span class="keyword">const</span> HllArray<A>& src) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// at this point src_k >= dst_k</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// we can optimize further when the k values are equal</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (this->getLgConfigK() == src.getLgConfigK()) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  uint32_t i = 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  ++i;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">const</span> uint32_t src_k = 1 << src.getLgConfigK();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  uint32_t i = 0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">while</span> (i < src_k) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  uint8_t value = *ptr & 0x3f;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  ++i;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  value = *ptr++ >> 6;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  value |= (*ptr & 0x0f) << 2;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  ++i;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  value = *ptr++ >> 4;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  value |= (*ptr & 3) << 4;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  ++i;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  value = *ptr++ >> 2;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  this->hllByteArr_[i] = std::max(this->hllByteArr_[i], value);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  ++i;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</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 name="l00147"></a><span class="lineno"> 147</span>  uint32_t i = 0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</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 name="l00149"></a><span class="lineno"> 149</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 name="l00150"></a><span class="lineno"> 150</span>  ++i;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  this->hllByteArr_[i] = std::max(this->hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> >> 4));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  ++i;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">// src_k > dst_k</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">const</span> uint32_t dst_mask = (1 << this->getLgConfigK()) - 1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// special treatment below to optimize performance</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  uint32_t i = 0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">const</span> uint32_t src_k = 1 << src.getLgConfigK();</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  uint32_t i = 0;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">while</span> (i < src_k) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  uint8_t value = *ptr & 0x3f;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  value = *ptr++ >> 6;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  value |= (*ptr & 0x0f) << 2;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  value = *ptr++ >> 4;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  value |= (*ptr & 3) << 4;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  value = *ptr++ >> 2;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</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 name="l00182"></a><span class="lineno"> 182</span>  uint32_t i = 0;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</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 name="l00184"></a><span class="lineno"> 184</span>  processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> & hll_constants::loNibbleMask));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  ++i;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> >> 4));</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  ++i;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  this->setRebuildKxqCurminFlag(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">void</span> Hll8Array<A>::processValue(uint32_t slot, uint32_t mask, uint8_t new_val) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> index = slot & mask;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  this->hllByteArr_[index] = std::max(this->hllByteArr_[index], new_val);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/Hll8Array_8hpp_source.html b/docs/5.0.1/Hll8Array_8hpp_source.html
new file mode 100644
index 0000000..083549d
--- /dev/null
+++ b/docs/5.0.1/Hll8Array_8hpp_source.html
@@ -0,0 +1,136 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLL8ARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLL8ARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span>Hll8Iterator;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  Hll8Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a 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 name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">virtual</span> ~Hll8Array() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a 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 name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a 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 name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a 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 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 name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a 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 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 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 name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a 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 name="l00049"></a><span class="lineno"> 49</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a 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 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 name="l00053"></a><span class="lineno"> 53</span> };</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllArray-internal_8hpp_source.html b/docs/5.0.1/HllArray-internal_8hpp_source.html
new file mode 100644
index 0000000..a1f5521
--- /dev/null
+++ b/docs/5.0.1/HllArray-internal_8hpp_source.html
@@ -0,0 +1,781 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "HarmonicNumbers.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "CubicInterpolation.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "CompositeInterpolationXTable.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "inv_pow2_table.hpp"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> HllArray<A>::HllArray(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> HllSketchImpl<A>(lgConfigK, tgtHllType, hll_mode::HLL, startFullSize),</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> hipAccum_(0.0),</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> kxq0_(1 << lgConfigK),</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> kxq1_(0.0),</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> hllByteArr_(allocator),</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> curMin_(0),</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> numAtCurMin_(1 << lgConfigK),</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> oooFlag_(false),</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> rebuild_kxq_curmin_(false)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {}</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> HllArray<A>::HllArray(<span class="keyword">const</span> HllArray& other, target_hll_type tgtHllType) :</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  HllSketchImpl<A>(other.getLgConfigK(), tgtHllType, hll_mode::HLL, other.isStartFullSize()),</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// remaining fields are initialized to empty sketch defaults</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// and left to subclass constructor to populate</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  hipAccum_(0.0),</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  kxq0_(1 << other.getLgConfigK()),</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  kxq1_(0.0),</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  hllByteArr_(other.getAllocator()),</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  curMin_(0),</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  numAtCurMin_(1 << other.getLgConfigK()),</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  oooFlag_(false),</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  rebuild_kxq_curmin_(false)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {}</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> HllArray<A>* HllArray<A>::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">// we may need to recompute KxQ and curMin data for a union gadget,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// so only use a direct copy if we have a valid sketch</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (tgtHllType == this->getTgtHllType() && !this->isRebuildKxqCurminFlag()) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>HllArray*<span class="keyword">></span>(copy());</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">// the factory methods replay the coupons and will always rebuild</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// the sketch in a consistent way</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">case</span> target_hll_type::HLL_4:</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> HllSketchImplFactory<A>::convertToHll4(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">case</span> target_hll_type::HLL_6:</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> HllSketchImplFactory<A>::convertToHll6(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">case</span> target_hll_type::HLL_8:</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> HllSketchImplFactory<A>::convertToHll8(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid target HLL type"</span>); </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</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 name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (len < hll_constants::HLL_BYTE_ARR_START) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</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 name="l00091"></a><span class="lineno"> 91</span>  }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</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 name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</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 name="l00096"></a><span class="lineno"> 96</span>  }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</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 name="l00102"></a><span class="lineno"> 102</span>  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">const</span> hll_mode mode = HllSketchImpl<A>::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">if</span> (mode != HLL) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</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 name="l00107"></a><span class="lineno"> 107</span>  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSizeFlag = ((data[hll_constants::FLAGS_BYTE] & hll_constants::FULL_SIZE_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
+<div class="line"><a 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 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 name="l00116"></a><span class="lineno"> 116</span>  </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> uint32_t arrayBytes = hllArrBytes(tgtHllType, lgK);</div>
+<div class="line"><a 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 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 name="l00120"></a><span class="lineno"> 120</span>  }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">double</span> hip, kxq0, kxq1;</div>
+<div class="line"><a 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 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 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 name="l00126"></a><span class="lineno"> 126</span>  </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  uint32_t numAtCurMin, auxCount;</div>
+<div class="line"><a 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 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 name="l00130"></a><span class="lineno"> 130</span>  </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  AuxHashMap<A>* auxHashMap = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a 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 name="l00133"></a><span class="lineno"> 133</span>  aux_hash_map_ptr aux_ptr;</div>
+<div class="line"><a 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 name="l00135"></a><span class="lineno"> 135</span>  uint8_t auxLgIntArrSize = data[4];</div>
+<div class="line"><a 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 name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">const</span> uint8_t* auxDataStart = data + offset;</div>
+<div class="line"><a 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 name="l00139"></a><span class="lineno"> 139</span>  aux_ptr = aux_hash_map_ptr(auxHashMap, auxHashMap->make_deleter());</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  HllArray<A>* sketch = HllSketchImplFactory<A>::newHll(lgK, tgtHllType, startFullSizeFlag, allocator);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  sketch->putCurMin(curMin);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  sketch->putOutOfOrderFlag(oooFlag);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (!oooFlag) sketch->putHipAccum(hip);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  sketch->putKxQ0(kxq0);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  sketch->putKxQ1(kxq1);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  sketch->putNumAtCurMin(numAtCurMin);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div>
+<div class="line"><a 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 name="l00151"></a><span class="lineno"> 151</span>  </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  ((Hll4Array<A>*)sketch)->putAuxHashMap(auxHashMap);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  aux_ptr.release();</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> HllArray<A>* HllArray<A>::newHll(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  uint8_t listHeader[8];</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</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 name="l00166"></a><span class="lineno"> 166</span>  }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Wrong ser ver in input stream"</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</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 name="l00172"></a><span class="lineno"> 172</span>  }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  hll_mode mode = HllSketchImpl<A>::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">if</span> (mode != HLL) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Calling HLL construtor with non-HLL mode data"</span>);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl<A>::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSizeFlag = ((listHeader[hll_constants::FLAGS_BYTE] & hll_constants::FULL_SIZE_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  </div>
+<div class="line"><a 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 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 name="l00186"></a><span class="lineno"> 186</span>  </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  HllArray* sketch = HllSketchImplFactory<A>::newHll(lgK, tgtHllType, startFullSizeFlag, allocator);</div>
+<div class="line"><a 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 name="l00189"></a><span class="lineno"> 189</span>  hll_array_ptr sketch_ptr(sketch, sketch->get_deleter());</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  sketch->putCurMin(curMin);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  sketch->putOutOfOrderFlag(oooFlag);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  </div>
+<div class="line"><a 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 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 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 name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span> (!oooFlag) sketch->putHipAccum(hip);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  sketch->putKxQ0(kxq0);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  sketch->putKxQ1(kxq1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  </div>
+<div class="line"><a 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 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 name="l00202"></a><span class="lineno"> 202</span>  sketch->putNumAtCurMin(numAtCurMin);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  read(is, sketch->hllByteArr_.data(), sketch->getHllByteArrBytes());</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  </div>
+<div class="line"><a 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 name="l00207"></a><span class="lineno"> 207</span>  uint8_t auxLgIntArrSize = listHeader[4];</div>
+<div class="line"><a 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 name="l00209"></a><span class="lineno"> 209</span>  ((Hll4Array<A>*)sketch)->putAuxHashMap(auxHashMap);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (!is.good())</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"error reading from std::istream"</span>); </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">return</span> sketch_ptr.release();</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</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 name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</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 name="l00226"></a><span class="lineno"> 226</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 name="l00227"></a><span class="lineno"> 227</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 name="l00228"></a><span class="lineno"> 228</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 name="l00229"></a><span class="lineno"> 229</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 name="l00230"></a><span class="lineno"> 230</span>  bytes[hll_constants::FLAGS_BYTE] = this->makeFlagsByte(compact);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</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 name="l00232"></a><span class="lineno"> 232</span>  bytes[hll_constants::MODE_BYTE] = this->makeModeByte();</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</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 name="l00235"></a><span class="lineno"> 235</span>  std::memcpy(bytes + hll_constants::KXQ0_DOUBLE, &kxq0_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  std::memcpy(bytes + hll_constants::KXQ1_DOUBLE, &kxq1_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  std::memcpy(bytes + hll_constants::CUR_MIN_COUNT_INT, &numAtCurMin_, <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap->getAuxCount());</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  std::memcpy(bytes + hll_constants::AUX_COUNT_INT, &auxCount, <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">const</span> uint32_t hllByteArrBytes = getHllByteArrBytes();</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  std::memcpy(bytes + getMemDataStart(), hllByteArr_.data(), hllByteArrBytes);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// aux map if HLL_4</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (this->tgtHllType_ == HLL_4) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  bytes += getMemDataStart() + hllByteArrBytes; <span class="comment">// start of auxHashMap</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span> (compact) {</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  std::memcpy(bytes, &coupon, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  bytes += <span class="keyword">sizeof</span>(coupon);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  std::memcpy(bytes, auxHashMap->getAuxIntArr(), auxHashMap->getUpdatableSizeBytes());</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  uint32_t auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_];</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  std::fill_n(bytes, auxBytes, <span class="keyword">static_cast<</span>uint8_t<span class="keyword">></span>(0));</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span> byteArr;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</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 name="l00268"></a><span class="lineno"> 268</span>  <span class="comment">// header</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  write(os, preInts);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">const</span> uint8_t serialVersion = hll_constants::SER_VER;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  write(os, serialVersion);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keyword">const</span> uint8_t familyId = hll_constants::FAMILY_ID;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  write(os, familyId);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">const</span> uint8_t lgKByte = this->lgConfigK_;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  write(os, lgKByte);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  uint8_t lgArrByte = 0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  lgArrByte = auxHashMap->getLgAuxArrInts();</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  write(os, lgArrByte);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> uint8_t flagsByte = this->makeFlagsByte(compact);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  write(os, flagsByte);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  write(os, curMin_);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">const</span> uint8_t modeByte = this->makeModeByte();</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  write(os, modeByte);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="comment">// estimator data</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  write(os, hipAccum_);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  write(os, kxq0_);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  write(os, kxq1_);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">// array data</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  write(os, numAtCurMin_);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap->getAuxCount());</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  write(os, auxCount);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  write(os, hllByteArr_.data(), getHllByteArrBytes());</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">// aux map if HLL_4</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (this->tgtHllType_ == HLL_4) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (compact) {</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  write(os, coupon);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  write(os, auxHashMap->getAuxIntArr(), auxHashMap->getUpdatableSizeBytes());</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped </span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  uint32_t auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[this->lgConfigK_];</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</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 name="l00317"></a><span class="lineno"> 317</span>  }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">double</span> HllArray<A>::getEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (oooFlag_) {</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">return</span> getCompositeEstimate();</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> hipAccum_;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">// HLL UPPER AND LOWER BOUNDS</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment"> * The upper and lower bounds are not symmetric and thus are treated slightly differently.</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="comment"> * For the lower bound, when the unique count is <= k, LB >= numNonZeros, where</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment"> * numNonZeros = k - numAtCurMin AND curMin == 0.</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</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 name="l00337"></a><span class="lineno"> 337</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 name="l00338"></a><span class="lineno"> 338</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 name="l00339"></a><span class="lineno"> 339</span> <span class="comment"> * greater than k.</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment"> * HLL4 always maintains both curMin and numAtCurMin dynamically. Nonetheless, the rules for</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment"> * the very small values <= k where curMin = 0 still apply.</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">double</span> HllArray<A>::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> numNonZeros = ((curMin_ == 0) ? (configK - numAtCurMin_) : configK);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</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 name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> fmax(getEstimate() / (1.0 + relErr), numNonZeros);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordtype">double</span> HllArray<A>::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  HllUtil<A>::checkNumStdDev(numStdDev);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</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 name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">return</span> getEstimate() / (1.0 + relErr);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">// Original C: again-two-registers.c hhb_get_composite_estimate L1489</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">double</span> HllArray<A>::getCompositeEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> rawEst = getHllRawEstimate();</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">const</span> <span class="keywordtype">double</span>* xArr = CompositeInterpolationXTable<A>::get_x_arr(this->lgConfigK_);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keyword">const</span> uint32_t xArrLen = CompositeInterpolationXTable<A>::get_x_arr_length();</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> yStride = CompositeInterpolationXTable<A>::get_y_stride(this->lgConfigK_);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">if</span> (rawEst < xArr[0]) {</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keyword">const</span> uint32_t xArrLenM1 = xArrLen - 1;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">if</span> (rawEst > xArr[xArrLenM1]) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> finalY = yStride * xArrLenM1;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> factor = finalY / xArr[xArrLenM1];</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">return</span> rawEst * factor;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  }</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordtype">double</span> adjEst = CubicInterpolation<A>::usingXArrAndYStride(xArr, xArrLen, yStride, rawEst);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</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 name="l00389"></a><span class="lineno"> 389</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 name="l00390"></a><span class="lineno"> 390</span>  </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">if</span> (adjEst > (3 << this->lgConfigK_)) { <span class="keywordflow">return</span> adjEst; }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> linEst = getHllBitMapEstimate();</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</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 name="l00396"></a><span class="lineno"> 396</span>  <span class="comment">// to use that estimator or a different one.</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="comment">// We conjecture that less bias is created when the average of the two estimators</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="comment">// is compared with the threshold. Empirical measurements support this conjecture.</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> avgEst = (adjEst + linEst) / 2.0;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="comment">// The following constants comes from empirical measurements of the crossover point</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="comment">// between the average error of the linear estimator and the adjusted hll estimator</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordtype">double</span> crossOver = 0.64;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span> (this->lgConfigK_ == 4) { crossOver = 0.718; }</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 5) { crossOver = 0.672; }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">return</span> (avgEst > (crossOver * (1 << this->lgConfigK_))) ? adjEst : linEst;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordtype">double</span> HllArray<A>::getKxQ0()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">return</span> kxq0_;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> }</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">double</span> HllArray<A>::getKxQ1()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> kxq1_;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordtype">double</span> HllArray<A>::getHipAccum()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">return</span> hipAccum_;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> uint8_t HllArray<A>::getCurMin()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">return</span> curMin_;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> uint32_t HllArray<A>::getNumAtCurMin()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> numAtCurMin_;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> }</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordtype">void</span> HllArray<A>::putKxQ0(<span class="keywordtype">double</span> kxq0) {</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  kxq0_ = kxq0;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">void</span> HllArray<A>::putKxQ1(<span class="keywordtype">double</span> kxq1) {</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  kxq1_ = kxq1;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> }</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordtype">void</span> HllArray<A>::putHipAccum(<span class="keywordtype">double</span> hipAccum) {</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  hipAccum_ = hipAccum;</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  </div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordtype">void</span> HllArray<A>::putCurMin(uint8_t curMin) {</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  curMin_ = curMin;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordtype">void</span> HllArray<A>::putNumAtCurMin(uint32_t numAtCurMin) {</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  numAtCurMin_ = numAtCurMin;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">bool</span> HllArray<A>::isCompact()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> }</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">bool</span> HllArray<A>::isEmpty()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">return</span> (curMin_ == 0) && (numAtCurMin_ == configK);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordtype">void</span> HllArray<A>::putOutOfOrderFlag(<span class="keywordtype">bool</span> flag) {</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  oooFlag_ = flag;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordtype">bool</span> HllArray<A>::isOutOfOrderFlag()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">return</span> oooFlag_;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> uint32_t HllArray<A>::hllArrBytes(target_hll_type tgtHllType, uint8_t lgConfigK) {</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">return</span> hll4ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">return</span> hll6ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">return</span> hll8ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid target HLL type"</span>); </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> uint32_t HllArray<A>::hll4ArrBytes(uint8_t lgConfigK) {</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">return</span> 1 << (lgConfigK - 1);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> }</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  </div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> uint32_t HllArray<A>::hll6ArrBytes(uint8_t lgConfigK) {</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">const</span> uint32_t numSlots = 1 << lgConfigK;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">return</span> ((numSlots * 3) >> 2) + 1;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> }</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> uint32_t HllArray<A>::hll8ArrBytes(uint8_t lgConfigK) {</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">return</span> 1 << lgConfigK;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> }</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  </div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> uint32_t HllArray<A>::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> }</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  </div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> uint32_t HllArray<A>::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes();</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> uint32_t HllArray<A>::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  AuxHashMap<A>* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keyword">const</span> uint32_t auxCountBytes = ((auxHashMap == <span class="keyword">nullptr</span>) ? 0 : auxHashMap->getCompactSizeBytes());</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes() + auxCountBytes;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  </div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> uint8_t HllArray<A>::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> hll_constants::HLL_PREINTS;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> AuxHashMap<A>* HllArray<A>::getAuxHashMap()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> }</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keyword">auto</span> HllArray<A>::getHllArray() const -> const vector_bytes& {</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">return</span> hllByteArr_;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordtype">void</span> HllArray<A>::hipAndKxQIncrementalUpdate(uint8_t oldValue, uint8_t newValue) {</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keyword">const</span> uint32_t configK = 1 << this->getLgConfigK();</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="comment">// update hip BEFORE updating kxq</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keywordflow">if</span> (!oooFlag_) hipAccum_ += configK / (kxq0_ + kxq1_);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="comment">// update kxq0 and kxq1; subtract first, then add</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">if</span> (oldValue < 32) { kxq0_ -= INVERSE_POWERS_OF_2[oldValue]; }</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">else</span> { kxq1_ -= INVERSE_POWERS_OF_2[oldValue]; }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">if</span> (newValue < 32) { kxq0_ += INVERSE_POWERS_OF_2[newValue]; }</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">else</span> { kxq1_ += INVERSE_POWERS_OF_2[newValue]; }</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">//In C: again-two-registers.c hhb_get_improved_linear_counting_estimate L1274</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordtype">double</span> HllArray<A>::getHllBitMapEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keyword">const</span> uint32_t numUnhitBuckets = curMin_ == 0 ? numAtCurMin_ : 0;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="comment">//This will eventually go away.</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span> (numUnhitBuckets == 0) {</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">return</span> configK * log(configK / 0.5);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  }</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keyword">const</span> uint32_t numHitBuckets = configK - numUnhitBuckets;</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span> HarmonicNumbers<A>::getBitMapEstimate(configK, numHitBuckets);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  </div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment">//In C: again-two-registers.c hhb_get_raw_estimate L1167</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordtype">double</span> HllArray<A>::getHllRawEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keyword">const</span> uint32_t configK = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordtype">double</span> correctionFactor;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordflow">if</span> (this->lgConfigK_ == 4) { correctionFactor = 0.673; }</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 5) { correctionFactor = 0.697; }</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this->lgConfigK_ == 6) { correctionFactor = 0.709; }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">else</span> { correctionFactor = 0.7213 / (1.0 + (1.079 / configK)); }</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> hyperEst = (correctionFactor * configK * configK) / (kxq0_ + kxq1_);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">return</span> hyperEst;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> }</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  </div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordtype">void</span> HllArray<A>::setRebuildKxqCurminFlag(<span class="keywordtype">bool</span> rebuild) {</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  rebuild_kxq_curmin_ = rebuild;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordtype">bool</span> HllArray<A>::isRebuildKxqCurminFlag()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">return</span> rebuild_kxq_curmin_;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> }</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">void</span> HllArray<A>::check_rebuild_kxq_cur_min() {</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (!rebuild_kxq_curmin_) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  uint8_t cur_min = 64;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  uint32_t num_at_cur_min = 0;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordtype">double</span> kxq0 = 1 << this->lgConfigK_;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordtype">double</span> kxq1 = 0;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  </div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keyword">auto</span> it = this->begin(<span class="keyword">true</span>); <span class="comment">// want all points to adjust cur_min</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keyword">const</span> <span class="keyword">auto</span> end = this->end();</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">while</span> (it != end) {</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  uint8_t v = HllUtil<A>::getValue(*it);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">if</span> (v > 0) {</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (v < 32) { kxq0 += INVERSE_POWERS_OF_2[v] - 1.0; }</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">else</span> { kxq1 += INVERSE_POWERS_OF_2[v] - 1.0; }</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keywordflow">if</span> (v > cur_min) { ++it; <span class="keywordflow">continue</span>; }</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">if</span> (v < cur_min) {</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  cur_min = v;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  num_at_cur_min = 1;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  ++num_at_cur_min;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  } </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  ++it;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  kxq0_ = kxq0;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  kxq1_ = kxq1;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  curMin_ = cur_min;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  numAtCurMin_ = num_at_cur_min;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="comment">// HipAccum is not affected</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  </div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</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 name="l00637"></a><span class="lineno"> 637</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 name="l00638"></a><span class="lineno"> 638</span> }</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  </div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">typename</span> HllArray<A>::const_iterator HllArray<A>::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</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 name="l00643"></a><span class="lineno"> 643</span> }</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  </div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</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 name="l00647"></a><span class="lineno"> 647</span> array_(array), array_size_(array_size), index_(index), hll_type_(hll_type), exceptions_(exceptions), offset_(offset), all_(all)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> {</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">while</span> (index_ < array_size_) {</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  value_ = get_value(array_, index_, hll_type_, exceptions_, offset_);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (all_ || value_ != hll_constants::EMPTY) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  ++index_;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  }</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keyword">typename</span> HllArray<A>::const_iterator& HllArray<A>::const_iterator::operator++() {</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">while</span> (++index_ < array_size_) {</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  value_ = get_value(array_, index_, hll_type_, exceptions_, offset_);</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">if</span> (all_ || value_ != hll_constants::EMPTY) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  </div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</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 name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">return</span> index_ != other.index_;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  </div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keyword">auto</span> HllArray<A>::const_iterator::operator*() const -> reference {</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">return</span> HllUtil<A>::pair(index_, value_);</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</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 name="l00677"></a><span class="lineno"> 677</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 name="l00678"></a><span class="lineno"> 678</span>  <span class="comment">// for HLL4 and HLL6</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">if</span> (hll_type == target_hll_type::HLL_4) {</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  uint8_t value = array[index >> 1];</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">if</span> ((index & 1) > 0) { <span class="comment">// odd</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  value >>= 4;</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  value &= hll_constants::loNibbleMask;</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">if</span> (value == hll_constants::AUX_TOKEN) { <span class="comment">// exception</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">return</span> exceptions->mustFindValueFor(index);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordflow">return</span> value + offset;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hll_type == target_hll_type::HLL_6) {</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_bit = index * 6;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keyword">const</span> uint8_t shift = start_bit & 0x7;</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> byte_idx = start_bit >> 3;</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keyword">const</span> uint16_t two_byte_val = (array[byte_idx + 1] << 8) | array[byte_idx];</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">return</span> (two_byte_val >> shift) & hll_constants::VAL_MASK_6;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  }</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="comment">// HLL_8</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">return</span> array[index];</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> A HllArray<A>::getAllocator()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">return</span> hllByteArr_.get_allocator();</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> }</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  </div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  </div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor">#endif </span><span class="comment">// _HLLARRAY_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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllArray_8hpp_source.html b/docs/5.0.1/HllArray_8hpp_source.html
new file mode 100644
index 0000000..4726825
--- /dev/null
+++ b/docs/5.0.1/HllArray_8hpp_source.html
@@ -0,0 +1,228 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">class </span>AuxHashMap;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">class </span>HllArray : <span class="keyword">public</span> HllSketchImpl<A> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  HllArray(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">explicit</span> HllArray(<span class="keyword">const</span> HllArray& other, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a 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 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 name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a 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 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 name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">virtual</span> ~HllArray() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a 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 name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">virtual</span> HllArray* copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
+<div class="line"><a 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 name="l00052"></a><span class="lineno"> 52</span>  </div>
+<div class="line"><a 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 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 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 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 name="l00057"></a><span class="lineno"> 57</span>  </div>
+<div class="line"><a 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 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 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 name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a 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 name="l00063"></a><span class="lineno"> 63</span>  </div>
+<div class="line"><a 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 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 name="l00066"></a><span class="lineno"> 66</span>  </div>
+<div class="line"><a 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 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 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 name="l00070"></a><span class="lineno"> 70</span>  </div>
+<div class="line"><a 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 name="l00072"></a><span class="lineno"> 72</span>  </div>
+<div class="line"><a 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 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 name="l00075"></a><span class="lineno"> 75</span>  </div>
+<div class="line"><a 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 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 name="l00078"></a><span class="lineno"> 78</span>  </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordtype">void</span> putCurMin(uint8_t curMin);</div>
+<div class="line"><a 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 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 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 name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordtype">void</span> putNumAtCurMin(uint32_t numAtCurMin);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">static</span> uint32_t hllArrBytes(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, uint8_t lgConfigK);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">static</span> uint32_t hll4ArrBytes(uint8_t lgConfigK);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">static</span> uint32_t hll6ArrBytes(uint8_t lgConfigK);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">static</span> uint32_t hll8ArrBytes(uint8_t lgConfigK);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a 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 name="l00091"></a><span class="lineno"> 91</span>  </div>
+<div class="line"><a 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 name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">bool</span> isRebuildKxqCurminFlag() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordtype">void</span> check_rebuild_kxq_cur_min();</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">class </span>const_iterator;</div>
+<div class="line"><a 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 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 name="l00099"></a><span class="lineno"> 99</span>  </div>
+<div class="line"><a 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 name="l00101"></a><span class="lineno"> 101</span>  </div>
+<div class="line"><a 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 name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">protected</span>:</div>
+<div class="line"><a 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 name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordtype">double</span> getHllBitMapEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">double</span> getHllRawEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">double</span> hipAccum_;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">double</span> kxq0_;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordtype">double</span> kxq1_;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  vector_bytes hllByteArr_; <span class="comment">//init by sub-classes</span></div>
+<div class="line"><a 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 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 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 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 name="l00117"></a><span class="lineno"> 117</span>  </div>
+<div class="line"><a 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 name="l00119"></a><span class="lineno"> 119</span> };</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">class </span>HllArray<A>::const_iterator {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">using</span> iterator_category = std::input_iterator_tag;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">using</span> value_type = uint32_t;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">using</span> difference_type = void;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">using</span> pointer = uint32_t*;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">using</span> reference = uint32_t;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div>
+<div class="line"><a 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" 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 name="l00131"></a><span class="lineno"> 131</span>  const_iterator& operator++();</div>
+<div class="line"><a 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 name="l00133"></a><span class="lineno"> 133</span>  reference operator*() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">const</span> uint8_t* array_;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  uint32_t array_size_;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  uint32_t index_;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> hll_type_;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">const</span> AuxHashMap<A>* exceptions_;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  uint8_t offset_;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordtype">bool</span> all_;</div>
+<div class="line"><a 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 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" 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 name="l00144"></a><span class="lineno"> 144</span> };</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
+<div class="line"><a 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="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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllSketch-internal_8hpp_source.html b/docs/5.0.1/HllSketch-internal_8hpp_source.html
new file mode 100644
index 0000000..bd99c3e
--- /dev/null
+++ b/docs/5.0.1/HllSketch-internal_8hpp_source.html
@@ -0,0 +1,542 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLSKETCH_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLSKETCH_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "hll.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "HllSketchImplFactory.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "common_defs.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <cstdio></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <cstdlib></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  int64_t longBytes;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">double</span> doubleBytes;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> } longDoubleUnion;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> hll_sketch_alloc<A>::hll_sketch_alloc(uint8_t lg_config_k, <a class="code" 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 name="l00046"></a><span class="lineno"> 46</span>  HllUtil<A>::checkLgK(lg_config_k);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (start_full_size) {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  sketch_impl = HllSketchImplFactory<A>::newHll(lg_config_k, tgt_type, start_full_size, allocator);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a 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 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 name="l00052"></a><span class="lineno"> 52</span>  }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00057"></a><span class="lineno"> 57</span>  HllSketchImpl<A>* impl = HllSketchImplFactory<A>::deserialize(is, allocator);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> hll_sketch_alloc<A>(impl);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00063"></a><span class="lineno"> 63</span>  HllSketchImpl<A>* impl = HllSketchImplFactory<A>::deserialize(bytes, len, allocator);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> hll_sketch_alloc<A>(impl);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> hll_sketch_alloc<A>::~hll_sketch_alloc() {</div>
+<div class="line"><a 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 name="l00070"></a><span class="lineno"> 70</span>  sketch_impl->get_deleter()(sketch_impl);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00076"></a><span class="lineno"> 76</span>  sketch_impl(that.sketch_impl->copy())</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {}</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00081"></a><span class="lineno"> 81</span>  sketch_impl(that.sketch_impl->copyAs(tgt_type))</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {}</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00086"></a><span class="lineno"> 86</span>  sketch_impl(<span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  std::swap(sketch_impl, that.sketch_impl);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> hll_sketch_alloc<A>::hll_sketch_alloc(HllSketchImpl<A>* that) :</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  sketch_impl(that)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {}</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00098"></a><span class="lineno"> 98</span>  sketch_impl->get_deleter()(sketch_impl);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  sketch_impl = other.sketch_impl->copy();</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 name="l00105"></a><span class="lineno"> 105</span>  std::swap(sketch_impl, other.sketch_impl);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::reset() {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="comment">// TODO: need to allow starting from a full-sized sketch</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">// (either here or in other implementation)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  sketch_impl = sketch_impl->reset();</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keyword">const</span> std::string& datum) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (datum.empty()) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  HashState hashResult;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  HllUtil<A>::hash(datum.c_str(), datum.length(), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint64_t datum) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// no sign extension with 64 bits so no need to cast to signed value</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  HashState hashResult;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  HllUtil<A>::hash(&datum, <span class="keyword">sizeof</span>(uint64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint32_t datum) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  update(<span class="keyword">static_cast<</span>int32_t<span class="keyword">></span>(datum));</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint16_t datum) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  update(<span class="keyword">static_cast<</span>int16_t<span class="keyword">></span>(datum));</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(uint8_t datum) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  update(<span class="keyword">static_cast<</span>int8_t<span class="keyword">></span>(datum));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int64_t datum) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  HashState hashResult;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  HllUtil<A>::hash(&datum, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int32_t datum) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</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 name="l00157"></a><span class="lineno"> 157</span>  HashState hashResult;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  HllUtil<A>::hash(&val, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int16_t datum) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</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 name="l00165"></a><span class="lineno"> 165</span>  HashState hashResult;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  HllUtil<A>::hash(&val, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(int8_t datum) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</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 name="l00173"></a><span class="lineno"> 173</span>  HashState hashResult;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  HllUtil<A>::hash(&val, <span class="keyword">sizeof</span>(int64_t), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keywordtype">double</span> datum) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  longDoubleUnion d;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  d.doubleBytes = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(datum);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span> (datum == 0.0) {</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  d.doubleBytes = 0.0; <span class="comment">// canonicalize -0.0 to 0.0</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::isnan(d.doubleBytes)) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  d.longBytes = 0x7ff8000000000000L; <span class="comment">// canonicalize NaN using value from Java's Double.doubleToLongBits()</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  HashState hashResult;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  HllUtil<A>::hash(&d, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::update(<span class="keywordtype">float</span> datum) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  longDoubleUnion d;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  d.doubleBytes = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(datum);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span> (datum == 0.0) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  d.doubleBytes = 0.0; <span class="comment">// canonicalize -0.0 to 0.0</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::isnan(d.doubleBytes)) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  d.longBytes = 0x7ff8000000000000L; <span class="comment">// canonicalize NaN using value from Java's Double.doubleToLongBits()</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  HashState hashResult;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  HllUtil<A>::hash(&d, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>), DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</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 name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (data == <span class="keyword">nullptr</span>) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  HashState hashResult;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  HllUtil<A>::hash(data, lengthBytes, DEFAULT_SEED, hashResult);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  coupon_update(HllUtil<A>::coupon(hashResult));</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">void</span> hll_sketch_alloc<A>::coupon_update(uint32_t coupon) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">if</span> (coupon == hll_constants::EMPTY) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  HllSketchImpl<A>* result = this->sketch_impl->couponUpdate(coupon);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">if</span> (result != this->sketch_impl) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  this->sketch_impl->get_deleter()(this->sketch_impl);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  this->sketch_impl = result;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</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 name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> sketch_impl->serialize(os, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</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 name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> sketch_impl->serialize(os, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</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 name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> sketch_impl->serialize(<span class="keyword">true</span>, header_size_bytes);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">auto</span> hll_sketch_alloc<A>::serialize_updatable() const -> vector_bytes {</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> sketch_impl->serialize(<span class="keyword">false</span>, 0);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</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 name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> detail,</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> aux_detail,</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="comment">// Using a temporary stream for implementation here does not comply with AllocatorAwareContainer requirements.</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">// The stream does not support passing an allocator instance, and alternatives are complicated.</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  std::stringstream os;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (summary) {</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  os << <span class="stringliteral">"### HLL sketch summary:"</span> << std::endl</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  << <span class="stringliteral">" Log Config K : "</span> << std::to_string(get_lg_config_k()) << std::endl</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  << <span class="stringliteral">" Hll Target : "</span> << type_as_string() << std::endl</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  << <span class="stringliteral">" Current Mode : "</span> << mode_as_string() << std::endl</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  << <span class="stringliteral">" LB : "</span> << get_lower_bound(1) << std::endl</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  << <span class="stringliteral">" Estimate : "</span> << get_estimate() << std::endl</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  << <span class="stringliteral">" UB : "</span> << get_upper_bound(1) << std::endl</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</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 name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (get_current_mode() == HLL) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  HllArray<A>* hllArray = (HllArray<A>*) sketch_impl;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  os << <span class="stringliteral">" CurMin : "</span> << std::to_string(hllArray->getCurMin()) << std::endl</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  << <span class="stringliteral">" NumAtCurMin : "</span> << hllArray->getNumAtCurMin() << std::endl</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  << <span class="stringliteral">" HipAccum : "</span> << hllArray->getHipAccum() << std::endl</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  << <span class="stringliteral">" KxQ0 : "</span> << hllArray->getKxQ0() << std::endl</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  << <span class="stringliteral">" KxQ1 : "</span> << hllArray->getKxQ1() << std::endl;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (get_target_type() == HLL_4) {</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</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 name="l00270"></a><span class="lineno"> 270</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 name="l00271"></a><span class="lineno"> 271</span>  }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  os << <span class="stringliteral">" Coupon count : "</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  << std::to_string(((CouponList<A>*) sketch_impl)->getCouponCount()) << std::endl;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  os << <span class="stringliteral">"### End HLL sketch summary"</span> << std::endl;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">if</span> (detail) {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  os << <span class="stringliteral">"### HLL sketch data detail:"</span> << std::endl;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">if</span> (get_current_mode() == HLL) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</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 name="l00283"></a><span class="lineno"> 283</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 name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">auto</span> it = hll_ptr->begin(all);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">while</span> (it != hll_ptr->end()) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  os << std::setw(10) << HllUtil<A>::getLow26(*it);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  os << std::setw(6) << HllUtil<A>::getValue(*it);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  os << std::endl;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  ++it;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</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 name="l00293"></a><span class="lineno"> 293</span>  os << std::left;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  os << std::setw(10) << <span class="stringliteral">"Index"</span>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  os << std::setw(10) << <span class="stringliteral">"Key"</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  os << std::setw(10) << <span class="stringliteral">"Slot"</span>;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  os << std::setw(6) << <span class="stringliteral">"Value"</span>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  os << std::endl;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">auto</span> it = list_ptr->begin(all);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordtype">int</span> mask = (1 << get_lg_config_k()) - 1;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">while</span> (it != list_ptr->end()) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  os << std::setw(10) << i;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  os << std::setw(10) << HllUtil<A>::getLow26(*it);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  os << std::setw(10) << (HllUtil<A>::getLow26(*it) & mask);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  os << std::setw(6) << HllUtil<A>::getValue(*it);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  os << std::endl;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  ++it;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  ++i;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  os << <span class="stringliteral">"### End HLL sketch data detail"</span> << std::endl;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">if</span> (aux_detail) {</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> ((get_current_mode() == HLL) && (get_target_type() == HLL_4)) {</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</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 name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">const</span> AuxHashMap<A>* aux_ptr = hll4_ptr->getAuxHashMap();</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (aux_ptr != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  os << <span class="stringliteral">"### HLL sketch aux detail:"</span> << std::endl;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  os << std::left;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  os << std::setw(10) << <span class="stringliteral">"Index"</span>;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  os << std::setw(10) << <span class="stringliteral">"Key"</span>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  os << std::setw(10) << <span class="stringliteral">"Slot"</span>;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  os << std::setw(6) << <span class="stringliteral">"Value"</span>;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  os << std::endl;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">auto</span> it = aux_ptr->begin(all);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordtype">int</span> mask = (1 << get_lg_config_k()) - 1;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">while</span> (it != aux_ptr->end()) {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  os << std::setw(10) << i;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  os << std::setw(10) << HllUtil<A>::getLow26(*it);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  os << std::setw(10) << (HllUtil<A>::getLow26(*it) & mask);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  os << std::setw(6) << HllUtil<A>::getValue(*it);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  os << std::endl;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  ++it;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  ++i;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  os << <span class="stringliteral">"### End HLL sketch aux detail"</span> << std::endl;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  }</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> string<A>(os.str().c_str(), sketch_impl->getAllocator());</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordtype">double</span> hll_sketch_alloc<A>::get_estimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">return</span> sketch_impl->getEstimate();</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">double</span> hll_sketch_alloc<A>::get_composite_estimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">return</span> sketch_impl->getCompositeEstimate();</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</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 name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">return</span> sketch_impl->getLowerBound(numStdDev);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</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 name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> sketch_impl->getUpperBound(numStdDev);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> hll_mode hll_sketch_alloc<A>::get_current_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">return</span> sketch_impl->getCurMode();</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> uint8_t hll_sketch_alloc<A>::get_lg_config_k()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">return</span> sketch_impl->getLgConfigK();</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <a class="code" 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 name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordflow">return</span> sketch_impl->getTgtHllType();</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</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 name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">return</span> sketch_impl->isOutOfOrderFlag();</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_estimation_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> uint32_t hll_sketch_alloc<A>::get_updatable_serialization_bytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">return</span> sketch_impl->getUpdatableSerializationBytes();</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> uint32_t hll_sketch_alloc<A>::get_compact_serialization_bytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">return</span> sketch_impl->getCompactSerializationBytes();</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_compact()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">return</span> sketch_impl->isCompact();</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordtype">bool</span> hll_sketch_alloc<A>::is_empty()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">return</span> sketch_impl->isEmpty();</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> std::string hll_sketch_alloc<A>::type_as_string()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">switch</span> (sketch_impl->getTgtHllType()) {</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">case</span> target_hll_type::HLL_4:</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL_4"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">case</span> target_hll_type::HLL_6:</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL_6"</span>);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">case</span> target_hll_type::HLL_8:</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL_8"</span>);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</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 name="l00422"></a><span class="lineno"> 422</span>  }</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> }</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> std::string hll_sketch_alloc<A>::mode_as_string()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">switch</span> (sketch_impl->getCurMode()) {</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">case</span> LIST:</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">return</span> std::string(<span class="stringliteral">"LIST"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">case</span> SET:</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">return</span> std::string(<span class="stringliteral">"SET"</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">case</span> HLL:</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> std::string(<span class="stringliteral">"HLL"</span>);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Sketch state error: Invalid hll_mode"</span>);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> }</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> uint32_t hll_sketch_alloc<A>::get_max_updatable_serialization_bytes(uint8_t lg_config_k,</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keyword">const</span> target_hll_type tgtHllType) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  uint32_t arrBytes;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">if</span> (tgtHllType == target_hll_type::HLL_4) {</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">const</span> uint32_t auxBytes = 4 << hll_constants::LG_AUX_ARR_INTS[lg_config_k];</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  arrBytes = HllArray<A>::hll4ArrBytes(lg_config_k) + auxBytes;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tgtHllType == target_hll_type::HLL_6) {</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  arrBytes = HllArray<A>::hll6ArrBytes(lg_config_k);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  } <span class="keywordflow">else</span> { <span class="comment">//HLL_8</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  arrBytes = HllArray<A>::hll8ArrBytes(lg_config_k);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + arrBytes;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> }</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</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 name="l00456"></a><span class="lineno"> 456</span>  uint8_t lg_config_k, uint8_t numStdDev) {</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">return</span> HllUtil<A>::getRelErr(upperBound, unioned, lg_config_k, numStdDev);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor">#endif </span><span class="comment">// _HLLSKETCH_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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllSketchImpl-internal_8hpp_source.html b/docs/5.0.1/HllSketchImpl-internal_8hpp_source.html
new file mode 100644
index 0000000..96cf1b3
--- /dev/null
+++ b/docs/5.0.1/HllSketchImpl-internal_8hpp_source.html
@@ -0,0 +1,234 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLSKETCHIMPL_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLSKETCHIMPL_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "HllSketchImplFactory.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> HllSketchImpl<A>::HllSketchImpl(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType,</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  hll_mode mode, <span class="keywordtype">bool</span> startFullSize)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  : lgConfigK_(lgConfigK),</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  tgtHllType_(tgtHllType),</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  mode_(mode),</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  startFullSize_(startFullSize)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> HllSketchImpl<A>::~HllSketchImpl() {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> HllSketchImpl<A>::extractTgtHllType(uint8_t modeByte) {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">switch</span> ((modeByte >> 2) & 0x3) {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> target_hll_type::HLL_4;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> target_hll_type::HLL_6;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> target_hll_type::HLL_8;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid target HLL type"</span>);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> hll_mode HllSketchImpl<A>::extractCurMode(uint8_t modeByte) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">switch</span> (modeByte & 0x3) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> hll_mode::LIST;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> hll_mode::SET;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> hll_mode::HLL;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Invalid current sketch mode"</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> uint8_t HllSketchImpl<A>::makeFlagsByte(<span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  uint8_t flags = 0;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  flags |= (isEmpty() ? hll_constants::EMPTY_FLAG_MASK : 0);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  flags |= (compact ? hll_constants::COMPACT_FLAG_MASK : 0);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  flags |= (isOutOfOrderFlag() ? hll_constants::OUT_OF_ORDER_FLAG_MASK : 0);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  flags |= (startFullSize_ ? hll_constants::FULL_SIZE_FLAG_MASK : 0);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> flags;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">// lo2bits = curMode, next 2 bits = tgtHllType</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// Dec Lo4Bits TgtHllType, CurMode</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">// 0 0000 HLL_4, LIST</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">// 1 0001 HLL_4, SET</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// 2 0010 HLL_4, HLL</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// 4 0100 HLL_6, LIST</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// 5 0101 HLL_6, SET</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// 6 0110 HLL_6, HLL</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// 8 1000 HLL_8, LIST</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// 9 1001 HLL_8, SET</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// 10 1010 HLL_8, HLL</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> uint8_t HllSketchImpl<A>::makeModeByte()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  uint8_t <span class="keywordtype">byte</span> = 0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">switch</span> (mode_) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">case</span> LIST:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordtype">byte</span> = 0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">case</span> SET:</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordtype">byte</span> = 1;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">case</span> HLL:</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordtype">byte</span> = 2;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">switch</span> (tgtHllType_) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordtype">byte</span> |= (0 << 2); <span class="comment">// for completeness</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordtype">byte</span> |= (1 << 2);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordtype">byte</span> |= (2 << 2); </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">return</span> byte;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> HllSketchImpl<A>* HllSketchImpl<A>::reset() {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> HllSketchImplFactory<A>::reset(<span class="keyword">this</span>, startFullSize_);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> HllSketchImpl<A>::getTgtHllType()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> tgtHllType_;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> uint8_t HllSketchImpl<A>::getLgConfigK()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> lgConfigK_;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> hll_mode HllSketchImpl<A>::getCurMode()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> mode_;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">bool</span> HllSketchImpl<A>::isStartFullSize()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> startFullSize_;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllSketchImplFactory_8hpp_source.html b/docs/5.0.1/HllSketchImplFactory_8hpp_source.html
new file mode 100644
index 0000000..c89a8d5
--- /dev/null
+++ b/docs/5.0.1/HllSketchImplFactory_8hpp_source.html
@@ -0,0 +1,240 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLSKETCHIMPLFACTORY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLSKETCHIMPLFACTORY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "CouponList.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "CouponHashSet.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "Hll4Array.hpp"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "Hll6Array.hpp"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "Hll8Array.hpp"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">class </span>HllSketchImplFactory final {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">public</span>:</div>
+<div class="line"><a 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 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 name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a 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 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 name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">static</span> HllArray<A>* newHll(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">static</span> HllSketchImpl<A>* reset(HllSketchImpl<A>* impl, <span class="keywordtype">bool</span> startFullSize);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">static</span> Hll4Array<A>* convertToHll4(<span class="keyword">const</span> HllArray<A>& srcHllArr);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">static</span> Hll6Array<A>* convertToHll6(<span class="keyword">const</span> HllArray<A>& srcHllArr);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">static</span> Hll8Array<A>* convertToHll8(<span class="keyword">const</span> HllArray<A>& srcHllArr);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> };</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> CouponHashSet<A>* HllSketchImplFactory<A>::promoteListToSet(<span class="keyword">const</span> CouponList<A>& list) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</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 name="l00057"></a><span class="lineno"> 57</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 name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: list) {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  chSet->couponUpdate(coupon);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> chSet;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> HllArray<A>* HllSketchImplFactory<A>::promoteListOrSetToHll(<span class="keyword">const</span> CouponList<A>& src) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  HllArray<A>* tgtHllArr = HllSketchImplFactory<A>::newHll(src.getLgConfigK(), src.getTgtHllType(), <span class="keyword">false</span>, src.getAllocator());</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  tgtHllArr->putKxQ0(1 << src.getLgConfigK());</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: src) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  tgtHllArr->couponUpdate(coupon);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  tgtHllArr->putHipAccum(src.getEstimate());</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  tgtHllArr->putOutOfOrderFlag(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">return</span> tgtHllArr;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> HllSketchImpl<A>* HllSketchImplFactory<A>::deserialize(std::istream& is, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// we'll hand off the sketch based on PreInts so we don't need</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="comment">// to move the stream pointer back and forth -- perhaps somewhat fragile?</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</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 name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (preInts == hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> HllArray<A>::newHll(is, allocator);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> CouponHashSet<A>::newSet(is, allocator);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> CouponList<A>::newList(is, allocator);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize unknown object type"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> HllSketchImpl<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 name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// read current mode directly</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</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 name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (preInts == hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> HllArray<A>::newHll(bytes, len, allocator);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> CouponHashSet<A>::newSet(bytes, len, allocator);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (preInts == hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> CouponList<A>::newList(bytes, len, allocator);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"Attempt to deserialize unknown object type"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> HllArray<A>* HllSketchImplFactory<A>::newHll(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A& allocator) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</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 name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll8Alloc(allocator).allocate(1)) Hll8Array<A>(lgConfigK, startFullSize, allocator);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</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 name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll6Alloc(allocator).allocate(1)) Hll6Array<A>(lgConfigK, startFullSize, allocator);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">case</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</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 name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll4Alloc(allocator).allocate(1)) Hll4Array<A>(lgConfigK, startFullSize, allocator);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Invalid target_hll_type"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> HllSketchImpl<A>* HllSketchImplFactory<A>::reset(HllSketchImpl<A>* impl, <span class="keywordtype">bool</span> startFullSize) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (startFullSize) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  HllArray<A>* hll = newHll(impl->getLgConfigK(), impl->getTgtHllType(), startFullSize, impl->getAllocator());</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  impl->get_deleter()(impl);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> hll;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</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 name="l00131"></a><span class="lineno"> 131</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 name="l00132"></a><span class="lineno"> 132</span>  impl->get_deleter()(impl);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> cl;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> Hll4Array<A>* HllSketchImplFactory<A>::convertToHll4(<span class="keyword">const</span> HllArray<A>& srcHllArr) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</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 name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll4Alloc(srcHllArr.getAllocator()).allocate(1)) Hll4Array<A>(srcHllArr);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> Hll6Array<A>* HllSketchImplFactory<A>::convertToHll6(<span class="keyword">const</span> HllArray<A>& srcHllArr) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</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 name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll6Alloc(srcHllArr.getAllocator()).allocate(1)) Hll6Array<A>(srcHllArr);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> Hll8Array<A>* HllSketchImplFactory<A>::convertToHll8(<span class="keyword">const</span> HllArray<A>& srcHllArr) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</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 name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (Hll8Alloc(srcHllArr.getAllocator()).allocate(1)) Hll8Array<A>(srcHllArr);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">#endif </span><span class="comment">/* _HLLSKETCHIMPLFACTORY_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 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllSketchImpl_8hpp_source.html b/docs/5.0.1/HllSketchImpl_8hpp_source.html
new file mode 100644
index 0000000..c19c820
--- /dev/null
+++ b/docs/5.0.1/HllSketchImpl_8hpp_source.html
@@ -0,0 +1,169 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLSKETCHIMPL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLSKETCHIMPL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a 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 name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classdatasketches_1_1HllSketchImpl.html"> 31</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl</a> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl</a>(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keywordtype">bool</span> startFullSize);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">virtual</span> ~<a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl</a>();</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a 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 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 name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">virtual</span> <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl</a>* copy() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">virtual</span> <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl</a>* copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl<A></a>* reset();</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">virtual</span> std::function<void(<a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl<A></a>*)> get_deleter() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">virtual</span> <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl</a>* couponUpdate(uint32_t coupon) = 0;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  hll_mode getCurMode() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
+<div class="line"><a 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 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 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 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 name="l00055"></a><span class="lineno"> 55</span>  </div>
+<div class="line"><a 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 name="l00057"></a><span class="lineno"> 57</span>  </div>
+<div class="line"><a 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 name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a 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 name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> getTgtHllType() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
+<div class="line"><a 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 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 name="l00066"></a><span class="lineno"> 66</span>  </div>
+<div class="line"><a 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 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 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 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 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 name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">bool</span> isStartFullSize() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">static</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> extractTgtHllType(uint8_t modeByte);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">static</span> hll_mode extractCurMode(uint8_t modeByte);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  uint8_t makeFlagsByte(<span class="keywordtype">bool</span> compact) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  uint8_t makeModeByte() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">const</span> uint8_t lgConfigK_;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType_;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> hll_mode mode_;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSize_;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> };</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#endif </span><span class="comment">// _HLLSKETCHIMPL_HPP_</span></div>
+<div class="ttc" id="aclassdatasketches_1_1HllSketchImpl_html"><div class="ttname"><a href="classdatasketches_1_1HllSketchImpl.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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllUnion-internal_8hpp_source.html b/docs/5.0.1/HllUnion-internal_8hpp_source.html
new file mode 100644
index 0000000..4d795f9
--- /dev/null
+++ b/docs/5.0.1/HllUnion-internal_8hpp_source.html
@@ -0,0 +1,365 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLUNION_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLUNION_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "hll.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "HllSketchImpl.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "HllArray.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "HllUtil.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#abdb81912e4fcd2547e27c0165affbb99"> 35</a></span> <a class="code" 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 name="l00036"></a><span class="lineno"> 36</span>  lg_max_k_(HllUtil<A>::checkLgK(lg_max_k)),</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  gadget_(lg_max_k, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, false, allocator)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {}</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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" href="classdatasketches_1_1hll__union__alloc.html#a505bdafe096c4fc8adef4f8438b2da25">hll_union_alloc<A>::get_result</a>(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> target_type)<span class="keyword"> co [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> hll_sketch_alloc<A>(gadget_, target_type);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065"> 46</a></span> <span class="keywordtype">void</span> <a class="code" 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 name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (sketch.is_empty()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  union_impl(sketch, lg_max_k_);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a6562d6c6a8b6055ce297a03d46f9e23b"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(hll_sketch_alloc<A>&& sketch) {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (sketch.is_empty()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (gadget_.is_empty() && sketch.get_target_type() == <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a> && sketch.get_lg_config_k() <= lg_max_k_) {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (sketch.get_current_mode() == HLL || sketch.get_lg_config_k() == lg_max_k_) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  gadget_ = std::move(sketch);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  union_impl(sketch, lg_max_k_);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a40375beffaefdf495fec673ff596a71c"> 63</a></span> <span class="keywordtype">void</span> <a class="code" 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 name="l00064"></a><span class="lineno"> 64</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#af14c2db5c2ecc7e9da0d04129ddec191"> 68</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint64_t datum) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a83364bb88e67a91a9f22df5ae7efaa16"> 73</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint32_t datum) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a24f3f71760ab41d4a4b619c87f99bc98"> 78</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint16_t datum) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#aedf970792cde586f899d91f043a709f0"> 83</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(uint8_t datum) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#aeaa0aaa15ce0bf0012592d845c299ab6"> 88</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int64_t datum) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a9e6b068da685bb154d212032bed3d83d"> 93</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int32_t datum) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a90f9920c71e1cbdd6934882c1195e8e8"> 98</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int16_t datum) {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a45f5fd3eab94f833da2d5713bcd0e217"> 103</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a3af0c80a1b31f0e5dd32d140943bf065">hll_union_alloc<A>::update</a>(int8_t datum) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#ae4839a6377b3352c0a63538fb74feb35"> 108</a></span> <span class="keywordtype">void</span> <a class="code" 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 name="l00109"></a><span class="lineno"> 109</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a628d1f56e70ab9fdc5b2bbce80fa8b05"> 113</a></span> <span class="keywordtype">void</span> <a class="code" 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 name="l00114"></a><span class="lineno"> 114</span>  gadget_.update(datum);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#abd154da2b10bd1dbcbbbdcd8e411328d"> 118</a></span> <span class="keywordtype">void</span> <a class="code" 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</span> length_bytes) [...]
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  gadget_.update(data, length_bytes);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html">hll_union_alloc<A>::coupon_update</a>(uint32_t coupon) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (coupon == HllUtil<A>::EMPTY) { <span class="keywordflow">return</span>; }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  HllSketchImpl<A>* result = gadget_.sketch_impl->coupon_update(coupon);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (result != gadget_.sketch_impl) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</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 name="l00128"></a><span class="lineno"> 128</span>  gadget_.sketch_impl = result;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a2afb71f2ef2d82290be4c8eafc08f2a2"> 133</a></span> <span class="keywordtype">double</span> <a class="code" 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 name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</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 name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> gadget_.get_estimate();</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a1d6c3cd1e88796786ea124a7aed3800d"> 140</a></span> <span class="keywordtype">double</span> <a class="code" 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 name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</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 name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">return</span> gadget_.get_composite_estimate();</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#ab6cbf0e7b9ad7dc653d8cb7bc02e8ee4"> 147</a></span> <span class="keywordtype">double</span> <a class="code" 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 name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</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 name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> gadget_.get_lower_bound(num_std_dev);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#afb6dfbdd1229e025d57402ac22c1cd2c"> 154</a></span> <span class="keywordtype">double</span> <a class="code" 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 name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (gadget_.sketch_impl->getCurMode() == hll_mode::HLL)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</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 name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> gadget_.get_upper_bound(num_std_dev);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#aacaad8ccad500578a2cae9bef58ad436"> 161</a></span> uint8_t <a class="code" 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 name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> gadget_.get_lg_config_k();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#ad20897c5c8bd47f5d4005989bead0e55"> 166</a></span> <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#ad20897c5c8bd47f5d4005989bead0e55">hll_union_alloc<A>::reset</a>() {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  gadget_.reset();</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a5a2b7a58dc85678d08752945ff655362"> 171</a></span> <span class="keywordtype">bool</span> <a class="code" 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 name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> gadget_.is_empty();</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">bool</span> <a class="code" href="classdatasketches_1_1hll__union__alloc.html">hll_union_alloc<A>::is_out_of_order_flag</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">return</span> gadget_.is_out_of_order_flag();</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> hll_mode hll_union_alloc<A>::get_current_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> gadget_.get_current_mode();</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">bool</span> hll_union_alloc<A>::is_estimation_mode()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">return</span> gadget_.is_estimation_mode();</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#a0387c920d914fe59fd3c4c53a9a99093"> 191</a></span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> <a class="code" href="classdatasketches_1_1hll__union__alloc.html#a0387c920d914fe59fd3c4c53a9a99093">hll_union_alloc<A>::get_target_type</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">return</span> target_hll_type::HLL_8;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classdatasketches_1_1hll__union__alloc.html#af1abb48488246839a8732c9f20e3f7db"> 196</a></span> <span class="keywordtype">double</span> <a class="code" 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 name="l00197"></a><span class="lineno"> 197</span>  uint8_t lg_config_k, uint8_t num_std_dev) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> HllUtil<A>::getRelErr(upper_bound, unioned, lg_config_k, num_std_dev);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl<A></a>* <a class="code" href="classdatasketches_1_1hll__union__alloc.html">hll_union_alloc<A>::copy_or_downsample</a>(<span class="keyword">const</span> <a class="code" href="classdatasketches_1_1HllSketchImpl.html">HllSketchImpl<A></a>* src_impl, uint8_t tgt_lg_k) {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> (src_impl->getCurMode() != HLL) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Attempt to downsample non-HLL sketch"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</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 name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> src_lg_k = src->getLgConfigK();</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (src_lg_k <= tgt_lg_k) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> src->copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</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 name="l00212"></a><span class="lineno"> 212</span>  Hll8Array<A>* tgtHllArr = <span class="keyword">new</span> (hll8Alloc(src->getAllocator()).allocate(1)) Hll8Array<A>(tgt_lg_k, <span class="keyword">false</span>, src->getAllocator());</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  tgtHllArr->mergeHll(*src);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">//both of these are required for isomorphism</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  tgtHllArr->putHipAccum(src->getHipAccum());</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  tgtHllArr->putOutOfOrderFlag(src->isOutOfOrderFlag());</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> tgtHllArr;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">inline</span> HllSketchImpl<A>* hll_union_alloc<A>::leak_free_coupon_update(HllSketchImpl<A>* impl, uint32_t coupon) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  HllSketchImpl<A>* result = impl->couponUpdate(coupon);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">if</span> (result != impl) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  impl->get_deleter()(impl);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</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 name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">const</span> HllSketchImpl<A>* src_impl = sketch.sketch_impl; <span class="comment">//default</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  HllSketchImpl<A>* dst_impl = gadget_.sketch_impl; <span class="comment">//default</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (src_impl->getCurMode() == LIST || src_impl->getCurMode() == SET) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (dst_impl->isEmpty() && src_impl->getLgConfigK() == dst_impl->getLgConfigK()) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  dst_impl = src_impl->copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</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 name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> coupon: *src) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  dst_impl = leak_free_coupon_update(dst_impl, coupon); <span class="comment">//assignment required</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</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 name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">if</span> (dst_impl->getCurMode() == LIST || dst_impl->getCurMode() == SET) {</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">// swap so that src is LIST or SET, tgt is HLL</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// use lg_max_k because LIST has effective K of 2^26</span></div>
+<div class="line"><a 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>(dst_impl);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  dst_impl = copy_or_downsample(src_impl, lg_max_k);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(dst_impl)->mergeList(*src);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  } <span class="keywordflow">else</span> { <span class="comment">// gadget is HLL</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (src_impl->getLgConfigK() < dst_impl->getLgConfigK()) {</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  dst_impl = copy_or_downsample(dst_impl, sketch.get_lg_config_k());</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  gadget_.sketch_impl->get_deleter()(gadget_.sketch_impl); <span class="comment">// gadget to be replaced</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</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 name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(dst_impl)->mergeHll(*src);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  dst_impl->putOutOfOrderFlag(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">static_cast<</span>Hll8Array<A>*<span class="keyword">></span>(dst_impl)->putHipAccum(0);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  } <span class="keywordflow">else</span> { <span class="comment">// src is HLL, gadget is empty</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  dst_impl = copy_or_downsample(src_impl, lg_max_k);</div>
+<div class="line"><a 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 name="l00264"></a><span class="lineno"> 264</span>  }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  gadget_.sketch_impl = dst_impl; <span class="comment">// gadget replaced</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor">#endif </span><span class="comment">// _HLLUNION_INTERNAL_HPP_</span></div>
+<div class="ttc" id="aclassdatasketches_1_1HllSketchImpl_html"><div class="ttname"><a href="classdatasketches_1_1HllSketchImpl.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"><div class="ttname"><a href="classdatasketches_1_1hll__union__alloc.html">datasketches::hll_union_alloc</a></div><div class="ttdoc">This performs union operations for HLL sketches.</div><div class="ttdef"><b>Definition:</b> hll.hpp:446</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:191</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:133</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:46</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:171</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:161</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:</ [...]
+<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-int [...]
+<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:166</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:</ [...]
+<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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/HllUtil_8hpp_source.html b/docs/5.0.1/HllUtil_8hpp_source.html
new file mode 100644
index 0000000..b8ee53c
--- /dev/null
+++ b/docs/5.0.1/HllUtil_8hpp_source.html
@@ -0,0 +1,303 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _HLLUTIL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _HLLUTIL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "MurmurHash3.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "RelativeErrorTables.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "count_zeros.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "common_defs.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "ceiling_power_of_2.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">enum</span> hll_mode { LIST = 0, SET, HLL };</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">namespace </span>hll_constants {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// preamble stuff</span></div>
+<div class="line"><a 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 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 name="l00042"></a><span class="lineno"> 42</span>  </div>
+<div class="line"><a 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 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 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 name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t FULL_SIZE_FLAG_MASK = 32;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t PREAMBLE_INTS_BYTE = 0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t SER_VER_BYTE = 1;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t FAMILY_BYTE = 2;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t LG_K_BYTE = 3;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t LG_ARR_BYTE = 4;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t FLAGS_BYTE = 5;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t LIST_COUNT_BYTE = 6;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t HLL_CUR_MIN_BYTE = 6;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</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 name="l00057"></a><span class="lineno"> 57</span>  </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// Coupon List</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t LIST_INT_ARR_START = 8;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t LIST_PREINTS = 2;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// Coupon Hash Set</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t HASH_SET_COUNT_INT = 8;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t HASH_SET_INT_ARR_START = 12;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t HASH_SET_PREINTS = 3;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// HLL</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t HLL_PREINTS = 10;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t HLL_BYTE_ARR_START = 40;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t HIP_ACCUM_DOUBLE = 8;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t KXQ0_DOUBLE = 16;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t KXQ1_DOUBLE = 24;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t CUR_MIN_COUNT_INT = 32;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t AUX_COUNT_INT = 36;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t EMPTY_SKETCH_SIZE_BYTES = 8;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// other HllUtil stuff</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t KEY_BITS_26 = 26;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t VAL_BITS_6 = 6;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</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 name="l00080"></a><span class="lineno"> 80</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 name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t EMPTY = 0;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t MIN_LOG_K = 4;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t MAX_LOG_K = 21;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> HLL_HIP_RSE_FACTOR = 0.8325546; <span class="comment">// sqrt(ln(2))</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> HLL_NON_HIP_RSE_FACTOR = 1.03896; <span class="comment">// sqrt((3 * ln(2)) - 1)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</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 name="l00088"></a><span class="lineno"> 88</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 name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t LG_INIT_LIST_SIZE = 3;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t LG_INIT_SET_SIZE = 5;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t RESIZE_NUMER = 3;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t RESIZE_DENOM = 4;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t loNibbleMask = 0x0f;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t hiNibbleMask = 0xf0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t AUX_TOKEN = 0xf;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t LG_AUX_ARR_INTS[] = {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  0, 2, 2, 2, 2, 2, 2, 3, 3, 3, <span class="comment">// 0 - 9</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  4, 4, 5, 5, 6, 7, 8, 9, 10, 11, <span class="comment">// 10-19</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  12, 13, 14, 15, 16, 17, 18 <span class="comment">// 20-26</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> };</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> } <span class="comment">// namespace hll_constants</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// template provides internal consistency and allows static float values</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">// but we don't use the template parameter anywhere</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</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 name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">class </span>HllUtil final {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">static</span> uint32_t coupon(<span class="keyword">const</span> uint64_t hash[]);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">static</span> uint32_t coupon(<span class="keyword">const</span> HashState& hashState);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</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 name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">static</span> uint8_t checkLgK(uint8_t lgK);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> checkMemSize(uint64_t minBytes, uint64_t capBytes);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</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 name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">static</span> uint32_t pair(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">static</span> uint32_t getLow26(uint32_t coupon);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">static</span> uint8_t getValue(uint32_t coupon);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</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 name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">static</span> uint8_t computeLgArrInts(hll_mode mode, uint32_t count, uint8_t lgConfigK);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</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 name="l00130"></a><span class="lineno"> 130</span> };</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">inline</span> uint32_t HllUtil<A>::coupon(<span class="keyword">const</span> uint64_t hash[]) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  uint32_t addr26 = hash[0] & hll_constants::KEY_MASK_26;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  uint8_t lz = count_leading_zeros_in_u64(hash[1]);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  uint8_t value = ((lz > 62 ? 62 : lz) + 1); </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">return</span> (value << hll_constants::KEY_BITS_26) | addr26;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">inline</span> uint32_t HllUtil<A>::coupon(<span class="keyword">const</span> HashState& hashState) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  uint32_t addr26 = (int) (hashState.h1 & hll_constants::KEY_MASK_26);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  uint8_t lz = count_leading_zeros_in_u64(hashState.h2); </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  uint8_t value = ((lz > 62 ? 62 : lz) + 1); </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> (value << hll_constants::KEY_BITS_26) | addr26;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</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 name="l00150"></a><span class="lineno"> 150</span>  MurmurHash3_x64_128(key, keyLen, seed, result);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">inline</span> uint8_t HllUtil<A>::checkLgK(uint8_t lgK) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> ((lgK >= hll_constants::MIN_LOG_K) && (lgK <= hll_constants::MAX_LOG_K)) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> lgK;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</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 name="l00159"></a><span class="lineno"> 159</span>  }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</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 name="l00164"></a><span class="lineno"> 164</span>  uint8_t lgConfigK, uint8_t numStdDev) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  checkLgK(lgConfigK);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (lgConfigK > 12) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> rseFactor = unioned ?</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  hll_constants::HLL_NON_HIP_RSE_FACTOR : hll_constants::HLL_HIP_RSE_FACTOR;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">const</span> uint32_t configK = 1 << lgConfigK;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">return</span> (upperBound ? -1 : 1) * (numStdDev * rseFactor) / sqrt(configK);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> RelativeErrorTables<A>::getRelErr(upperBound, unioned, lgConfigK, numStdDev);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</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 name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">if</span> (capBytes < minBytes) {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</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 name="l00180"></a><span class="lineno"> 180</span>  }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> HllUtil<A>::checkNumStdDev(uint8_t numStdDev) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> ((numStdDev < 1) || (numStdDev > 3)) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</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 name="l00187"></a><span class="lineno"> 187</span>  }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">inline</span> uint32_t HllUtil<A>::pair(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">return</span> (value << hll_constants::KEY_BITS_26) | (slotNo & hll_constants::KEY_MASK_26);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">inline</span> uint32_t HllUtil<A>::getLow26(uint32_t coupon) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">return</span> coupon & hll_constants::KEY_MASK_26;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">inline</span> uint8_t HllUtil<A>::getValue(uint32_t coupon) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> coupon >> hll_constants::KEY_BITS_26;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">inline</span> uint8_t HllUtil<A>::simpleIntLog2(uint32_t n) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">if</span> (n == 0) {</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"cannot take log of 0"</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> count_trailing_zeros_in_u32(n);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</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 name="l00215"></a><span class="lineno"> 215</span>  <span class="comment">// assume value missing and recompute</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">if</span> (mode == LIST) { <span class="keywordflow">return</span> hll_constants::LG_INIT_LIST_SIZE; }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  uint32_t ceilPwr2 = ceiling_power_of_2(count);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">if</span> ((hll_constants::RESIZE_DENOM * count) > (hll_constants::RESIZE_NUMER * ceilPwr2)) { ceilPwr2 <<= 1;}</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">if</span> (mode == SET) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> std::max(hll_constants::LG_INIT_SET_SIZE, HllUtil<A>::simpleIntLog2(ceilPwr2));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="comment">//only used for HLL4</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">return</span> std::max(hll_constants::LG_AUX_ARR_INTS[lgConfigK], HllUtil<A>::simpleIntLog2(ceilPwr2));</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/MurmurHash3_8h_source.html b/docs/5.0.1/MurmurHash3_8h_source.html
new file mode 100644
index 0000000..b562983
--- /dev/null
+++ b/docs/5.0.1/MurmurHash3_8h_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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_11fbc4217d50ab21044e5ad6614aede5.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// Minimally modified from Austin Applebee's code:</span></div>
+<div class="line"><a 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 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 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 name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// * Made entire hash function defined inline</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// * Added compute_seed_hash</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a 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 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 name="l00010"></a><span class="lineno"> 10</span>  </div>
+<div class="line"><a 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 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 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 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 name="l00015"></a><span class="lineno"> 15</span>  </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#ifndef _MURMURHASH3_H_</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#define _MURMURHASH3_H_</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// Platform-specific functions and macros</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// Microsoft Visual Studio</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#if defined(_MSC_VER)</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a 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 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 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 name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#define MURMUR3_FORCE_INLINE __forceinline</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a 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 name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#define MURMUR3_BIG_CONSTANT(x) (x)</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// Other compilers</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a 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 name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <stdint.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a 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 name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a 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 name="l00049"></a><span class="lineno"> 49</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> (x << r) | (x >> (64 - r));</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div>
+<div class="line"><a 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 name="l00054"></a><span class="lineno"> 54</span>  </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#define MURMUR3_BIG_CONSTANT(x) (x##LLU)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
+<div class="line"><a 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 name="l00058"></a><span class="lineno"> 58</span>  </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a 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 name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// compiler optimization than a void* pointer</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  uint64_t h1;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  uint64_t h2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> } HashState;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a 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 name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// handle aligned reads, do the conversion here</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> MURMUR3_FORCE_INLINE uint64_t getblock64 ( <span class="keyword">const</span> uint64_t * p, <span class="keywordtype">size_t</span> i )</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  uint64_t res;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  memcpy(&res, p + i, <span class="keyword">sizeof</span>(res));</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a 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 name="l00083"></a><span class="lineno"> 83</span>  </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> MURMUR3_FORCE_INLINE uint64_t fmix64 ( uint64_t k )</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  k ^= k >> 33;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  k *= MURMUR3_BIG_CONSTANT(0xff51afd7ed558ccd);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  k ^= k >> 33;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  k *= MURMUR3_BIG_CONSTANT(0xc4ceb9fe1a85ec53);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  k ^= k >> 33;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> k;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
+<div class="line"><a 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 name="l00096"></a><span class="lineno"> 96</span>  uint64_t seed, HashState& out) {</div>
+<div class="line"><a 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 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 name="l00099"></a><span class="lineno"> 99</span>  </div>
+<div class="line"><a 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 name="l00101"></a><span class="lineno"> 101</span>  </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  out.h1 = seed;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  out.h2 = seed;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  </div>
+<div class="line"><a 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 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 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 name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a 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 name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">const</span> uint64_t* blocks = (<span class="keyword">const</span> uint64_t*)(data);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</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 name="l00112"></a><span class="lineno"> 112</span>  uint64_t k1 = getblock64(blocks, i * 2 + 0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  uint64_t k2 = getblock64(blocks, i * 2 + 1);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  out.h1 = MURMUR3_ROTL64(out.h1,27);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  out.h1 += out.h2;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  out.h1 = out.h1*5+0x52dce729;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  out.h2 = MURMUR3_ROTL64(out.h2,31);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  out.h2 += out.h1;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  out.h2 = out.h2*5+0x38495ab5;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// tail</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> uint8_t * tail = (<span class="keyword">const</span> uint8_t*)(data + (nblocks << 4));</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  uint64_t k1 = 0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  uint64_t k2 = 0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">switch</span>(lenBytes & 15)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">case</span> 15: k2 ^= ((uint64_t)tail[14]) << 48; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">case</span> 14: k2 ^= ((uint64_t)tail[13]) << 40; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">case</span> 13: k2 ^= ((uint64_t)tail[12]) << 32; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">case</span> 12: k2 ^= ((uint64_t)tail[11]) << 24; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">case</span> 11: k2 ^= ((uint64_t)tail[10]) << 16; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">case</span> 10: k2 ^= ((uint64_t)tail[ 9]) << 8; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">case</span> 9: k2 ^= ((uint64_t)tail[ 8]) << 0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">case</span> 8: k1 ^= ((uint64_t)tail[ 7]) << 56; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">case</span> 7: k1 ^= ((uint64_t)tail[ 6]) << 48; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">case</span> 6: k1 ^= ((uint64_t)tail[ 5]) << 40; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">case</span> 5: k1 ^= ((uint64_t)tail[ 4]) << 32; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">case</span> 4: k1 ^= ((uint64_t)tail[ 3]) << 24; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">case</span> 3: k1 ^= ((uint64_t)tail[ 2]) << 16; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">case</span> 2: k1 ^= ((uint64_t)tail[ 1]) << 8; <span class="comment">// falls through</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">case</span> 1: k1 ^= ((uint64_t)tail[ 0]) << 0;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  };</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="comment">//----------</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">// finalization</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  out.h1 ^= lenBytes;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  out.h2 ^= lenBytes;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  out.h1 += out.h2;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  out.h2 += out.h1;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  out.h1 = fmix64(out.h1);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  out.h2 = fmix64(out.h2);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  out.h1 += out.h2;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  out.h2 += out.h1;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">//-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> MURMUR3_FORCE_INLINE uint16_t compute_seed_hash(uint64_t seed) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  HashState hashes;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  MurmurHash3_x64_128(&seed, <span class="keyword">sizeof</span>(seed), 0, hashes);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</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 name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#undef MURMUR3_FORCE_INLINE</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor">#undef MURMUR3_ROTL64</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor">#undef MURMUR3_BIG_CONSTANT</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/RelativeErrorTables-internal_8hpp_source.html b/docs/5.0.1/RelativeErrorTables-internal_8hpp_source.html
new file mode 100644
index 0000000..6de4c29
--- /dev/null
+++ b/docs/5.0.1/RelativeErrorTables-internal_8hpp_source.html
@@ -0,0 +1,191 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _RELATIVEERRORTABLES_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _RELATIVEERRORTABLES_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "RelativeErrorTables.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">//case 0</span></div>
+<div class="line"><a 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 name="l00029"></a><span class="lineno"> 29</span>  { <span class="comment">//Q(.84134), Q(.97725), Q(.99865) respectively</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  0.207316195, 0.502865572, 0.882303765, <span class="comment">//4</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  0.146981579, 0.335426881, 0.557052, <span class="comment">//5</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  0.104026721, 0.227683872, 0.365888317, <span class="comment">//6</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  0.073614601, 0.156781585, 0.245740374, <span class="comment">//7</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  0.05205248, 0.108783763, 0.168030442, <span class="comment">//8</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  0.036770852, 0.075727545, 0.11593785, <span class="comment">//9</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  0.025990219, 0.053145536, 0.080772263, <span class="comment">//10</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  0.018373987, 0.037266176, 0.056271814, <span class="comment">//11</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  0.012936253, 0.02613829, 0.039387631, <span class="comment">//12</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  };</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">//case 1</span></div>
+<div class="line"><a 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 name="l00043"></a><span class="lineno"> 43</span>  { <span class="comment">//Q(.15866), Q(.02275), Q(.00135) respectively</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  -0.207805347, -0.355574279, -0.475535095, <span class="comment">//4</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  -0.146988328, -0.262390832, -0.360864026, <span class="comment">//5</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  -0.103877775, -0.191503663, -0.269311582, <span class="comment">//6</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  -0.073452978, -0.138513438, -0.198487447, <span class="comment">//7</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  -0.051982806, -0.099703123, -0.144128618, <span class="comment">//8</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  -0.036768609, -0.07138158, -0.104430324, <span class="comment">//9</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  -0.025991325, -0.050854296, -0.0748143, <span class="comment">//10</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  -0.01834533, -0.036121138, -0.05327616, <span class="comment">//11</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  -0.012920332, -0.025572893, -0.037896952, <span class="comment">//12</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  };</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">//case 2</span></div>
+<div class="line"><a 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 name="l00057"></a><span class="lineno"> 57</span>  { <span class="comment">//Q(.84134), Q(.97725), Q(.99865) respectively</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  0.254409839, 0.682266712, 1.304022158, <span class="comment">//4</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  0.181817353, 0.443389054, 0.778776219, <span class="comment">//5</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  0.129432281, 0.295782195, 0.49252279, <span class="comment">//6</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  0.091640655, 0.201175925, 0.323664385, <span class="comment">//7</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  0.064858051, 0.138523393, 0.218805328, <span class="comment">//8</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  0.045851855, 0.095925072, 0.148635751, <span class="comment">//9</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  0.032454144, 0.067009668, 0.102660669, <span class="comment">//10</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  0.022921382, 0.046868565, 0.071307398, <span class="comment">//11</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  0.016155679, 0.032825719, 0.049677541 <span class="comment">//12</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  };</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">//case 3</span></div>
+<div class="line"><a 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 name="l00071"></a><span class="lineno"> 71</span>  { <span class="comment">//Q(.15866), Q(.02275), Q(.00135) respectively</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  -0.256980172, -0.411905944, -0.52651057, <span class="comment">//4</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  -0.182332109, -0.310275547, -0.412660505, <span class="comment">//5</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  -0.129314228, -0.230142294, -0.315636197, <span class="comment">//6</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  -0.091584836, -0.16834013, -0.236346847, <span class="comment">//7</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  -0.06487411, -0.122045231, -0.174112107, <span class="comment">//8</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  -0.04591465, -0.08784505, -0.126917615, <span class="comment">//9</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  -0.032433119, -0.062897613, -0.091862929, <span class="comment">//10</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  -0.022960633, -0.044875401, -0.065736049, <span class="comment">//11</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  -0.016186662, -0.031827816, -0.046973459 <span class="comment">//12</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  };</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">template</span><<span class="keyword">typename</span> A></div>
+<div class="line"><a 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 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 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 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 name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordtype">double</span> f = 0;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a 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 name="l00091"></a><span class="lineno"> 91</span>  f = HIP_LB[idx];</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div>
+<div class="line"><a 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 name="l00095"></a><span class="lineno"> 95</span>  f = HIP_UB[idx];</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div>
+<div class="line"><a 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 name="l00099"></a><span class="lineno"> 99</span>  f = NON_HIP_LB[idx];</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div>
+<div class="line"><a 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 name="l00103"></a><span class="lineno"> 103</span>  f = NON_HIP_UB[idx];</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> f;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/RelativeErrorTables_8hpp_source.html b/docs/5.0.1/RelativeErrorTables_8hpp_source.html
new file mode 100644
index 0000000..4cda703
--- /dev/null
+++ b/docs/5.0.1/RelativeErrorTables_8hpp_source.html
@@ -0,0 +1,117 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_bc45e258c7269dbde5716543a4c54103.html">hll</a></li><li class="navelem"><a class="el" href="dir_aa059cbaaa7f4410839cee554e9ff9ba.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<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 name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _RELATIVEERRORTABLES_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define _RELATIVEERRORTABLES_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
+<div class="line"><a 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 name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span>RelativeErrorTables {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a 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 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 name="l00040"></a><span class="lineno"> 40</span> };</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "RelativeErrorTables-internal.hpp"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
+<div class="line"><a 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/annotated.html b/docs/5.0.1/annotated.html
new file mode 100644
index 0000000..e8ceb95
--- /dev/null
+++ b/docs/5.0.1/annotated.html
@@ -0,0 +1,130 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</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">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</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_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdatasketches_1_1serde_3_01T_00_01typename_01std_1_1enable__if_3_01std_1_1is__arithmetic_3_54408b64e8a7918b8a177594393deb4e.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 arithmetic types (int and fl [...]
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_8_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classdatasketches_1_1HllSketchImpl.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_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_12_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_14_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_16_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_17_" class="arrow" onclick="toggleFolder('0_17_')">▼</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_17_0_"><td class="entry"><span style="width:48px;display:inline-block;"> </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_18_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_19_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_0_20_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_21_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_21_" class="arrow" onclick="toggleFolder('0_21_')">▼</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_21_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </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_22_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_23_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_24_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_25_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_26_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_27_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_27_" class="arrow" onclick="toggleFolder('0_27_')">▼</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_27_0_"><td class="entry"><span style="width:48px;display:inline-block;"> </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_28_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_29_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_30_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_31_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_32_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_33_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_33_" class="arrow" onclick="toggleFolder('0_33_')">▼</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_33_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </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_34_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_35_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_36_" class="arrow" onclick="toggleFolder('0_36_')">▼</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_36_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </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_37_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_38_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_39_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_40_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_41_"><td class="entry"><span style="width:32px;display:inline-block;"> </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_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_42_" class="arrow" onclick="toggleFolder('0_42_')">▼</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_42_0_"><td class="entry"><span style="width:48px;display:inline-block;"> </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 that include frequent items, estimates, upper and lower b [...]
+<tr id="row_0_43_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </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_44_"><td class="entry"><span style="width:32px;display:inline-block;"> </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>
+</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__of__doubles__sketch_8hpp_source.html b/docs/5.0.1/array__of__doubles__sketch_8hpp_source.html
new file mode 100644
index 0000000..6f3aa3a
--- /dev/null
+++ b/docs/5.0.1/array__of__doubles__sketch_8hpp_source.html
@@ -0,0 +1,132 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">array_of_doubles_sketch.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef ARRAY_OF_DOUBLES_SKETCH_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define ARRAY_OF_DOUBLES_SKETCH_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "array_tuple_sketch.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "array_tuple_union.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "array_tuple_intersection.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "array_tuple_a_not_b.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#ab82abb5669f508afc03ee06a04a4f63a"> 31</a></span> <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1default__array__tuple__update__policy.html">default_array_of_doubles_update_policy</a> = <a class="code" href="classdatasketches_1_1default__array__tuple__update__policy.html">default_array_tuple_update_policy<array<double></a>>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#a1f2cb976e39fb4c31b9d422290cab713"> 34</a></span> <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html">update_array_of_doubles_sketch</a> = <a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html">update_array_tuple_sketch<array<double></a>>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#a35a4e048561529444021b2657eead4c8"> 37</a></span> <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_of_doubles_sketch</a> = <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch<array<double></a>>;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#a79f01904c200913d50a96ea1e42b14d7"> 40</a></span> <span class="keyword">using</span> <a class="code" href="structdatasketches_1_1default__array__tuple__union__policy.html">default_array_of_doubles_union_policy</a> = <a class="code" href="structdatasketches_1_1default__array__tuple__union__policy.html">default_array_tuple_union_policy<array<double></a>>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#a58641285855c148e06ac9cb08ae0452e"> 43</a></span> <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1array__tuple__union.html">array_of_doubles_union</a> = <a class="code" href="classdatasketches_1_1array__tuple__union.html">array_tuple_union<array<double></a>>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#a370e739ec492b40f8fef060acc9112b8"> 47</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> Policy> <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1array__tuple__intersection.html">array_of_doubles_intersection</a> = <a class="code" href="classdatasketches_1_1array__tuple__intersection.html">array_tuple_i [...]
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="namespacedatasketches.html#a8d77b6f0c52087601aa9a3040e14a28a"> 50</a></span> <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html">array_of_doubles_a_not_b</a> = <a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html">array_tuple_a_not_b<array<double></a>>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> } <span class="comment">/* namespace datasketches */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html">datasketches::array_tuple_a_not_b</a></div><div class="ttdoc">array tuple A-not-B</div><div class="ttdef"><b>Definition:</b> array_tuple_a_not_b.hpp:33</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html">datasketches::array_tuple_intersection</a></div><div class="ttdoc">array tuple intersection</div><div class="ttdef"><b>Definition:</b> array_tuple_intersection.hpp:37</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__union_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__union.html">datasketches::array_tuple_union</a></div><div class="ttdoc">array tuple union</div><div class="ttdef"><b>Definition:</b> array_tuple_union.hpp:54</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html">datasketches::compact_array_tuple_sketch</a></div><div class="ttdoc">Compact array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:163</div></div>
+<div class="ttc" id="aclassdatasketches_1_1default__array__tuple__update__policy_html"><div class="ttname"><a href="classdatasketches_1_1default__array__tuple__update__policy.html">datasketches::default_array_tuple_update_policy</a></div><div class="ttdoc">default array tuple update policy</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:89</div></div>
+<div class="ttc" id="aclassdatasketches_1_1update__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1update__array__tuple__sketch.html">datasketches::update_array_tuple_sketch</a></div><div class="ttdoc">Update array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:125</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="astructdatasketches_1_1default__array__tuple__union__policy_html"><div class="ttname"><a href="structdatasketches_1_1default__array__tuple__union__policy.html">datasketches::default_array_tuple_union_policy</a></div><div class="ttdoc">default array tuple union policy</div><div class="ttdef"><b>Definition:</b> array_tuple_union.hpp:33</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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__tuple__a__not__b_8hpp_source.html b/docs/5.0.1/array__tuple__a__not__b_8hpp_source.html
new file mode 100644
index 0000000..c81d983
--- /dev/null
+++ b/docs/5.0.1/array__tuple__a__not__b_8hpp_source.html
@@ -0,0 +1,131 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_tuple_a_not_b.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">array_tuple_a_not_b.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef ARRAY_TUPLE_A_NOT_B_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define ARRAY_TUPLE_A_NOT_B_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "array_tuple_sketch.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "tuple_a_not_b.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Allocator = <span class="keyword">typename</span> Array::allocator_type></div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classdatasketches_1_1array__tuple__a__not__b.html"> 33</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html">array_tuple_a_not_b</a>: <a class="code" href="classdatasketches_1_1tuple__a__not__b.html">tuple_a_not_b</a><Array, Allocator> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1tuple__a__not__b.html">Base</a> = <a class="code" href="classdatasketches_1_1tuple__a__not__b.html">tuple_a_not_b<Array, Allocator></a>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">CompactSketch</a> = <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch<Array, Allocator></a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">explicit</span> <a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html#afc12166e05f904485a0fd4fe84436336">array_tuple_a_not_b</a>(uint64_t seed = DEFAULT_SEED, <span class="keyword">const</span> Allocator& allocator = Allocator());</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span><<span class="keyword">typename</span> FwdSketch, <span class="keyword">typename</span> Sketch></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classdatasketches_1_1array__tuple__a__not__b.html#a3ee0c8ec70c980979f84c68065da3d9b"> 53</a></span>  <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">CompactSketch</a> <a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html#a3ee0c8ec70c980979f84c68065da3d9b">compute</a>(FwdSketch&& a, <span class="keyword">const</span> Sketch& b, <span class= [...]
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> };</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> } <span class="comment">/* namespace datasketches */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#include "array_tuple_a_not_b_impl.hpp"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html">datasketches::array_tuple_a_not_b</a></div><div class="ttdoc">array tuple A-not-B</div><div class="ttdef"><b>Definition:</b> array_tuple_a_not_b.hpp:33</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html_a3ee0c8ec70c980979f84c68065da3d9b"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html#a3ee0c8ec70c980979f84c68065da3d9b">datasketches::array_tuple_a_not_b::compute</a></div><div class="ttdeci">CompactSketch compute(FwdSketch &&a, const Sketch &b, bool ordered=true) const</div><div class="ttdoc">Computes the A-not-B set operation given two sketches.</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html_afc12166e05f904485a0fd4fe84436336"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html#afc12166e05f904485a0fd4fe84436336">datasketches::array_tuple_a_not_b::array_tuple_a_not_b</a></div><div class="ttdeci">array_tuple_a_not_b(uint64_t seed=DEFAULT_SEED, const Allocator &allocator=Allocator())</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> array_tuple_a_n [...]
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html">datasketches::compact_array_tuple_sketch</a></div><div class="ttdoc">Compact array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:163</div></div>
+<div class="ttc" id="aclassdatasketches_1_1tuple__a__not__b_html"><div class="ttname"><a href="classdatasketches_1_1tuple__a__not__b.html">datasketches::tuple_a_not_b</a></div><div class="ttdoc">tuple A-not-B</div><div class="ttdef"><b>Definition:</b> tuple_a_not_b.hpp:33</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><!-- 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__tuple__a__not__b__impl_8hpp_source.html b/docs/5.0.1/array__tuple__a__not__b__impl_8hpp_source.html
new file mode 100644
index 0000000..d957f13
--- /dev/null
+++ b/docs/5.0.1/array__tuple__a__not__b__impl_8hpp_source.html
@@ -0,0 +1,114 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_tuple_a_not_b_impl.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">array_tuple_a_not_b_impl.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Allocator></div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classdatasketches_1_1array__tuple__a__not__b.html#afc12166e05f904485a0fd4fe84436336"> 23</a></span> <a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html#afc12166e05f904485a0fd4fe84436336">array_tuple_a_not_b<Array, Allocator>::array_tuple_a_not_b</a>(uint64_t seed, <span class="keyword">const</span> Allocator& allocator):</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <a class="code" href="classdatasketches_1_1tuple__a__not__b.html">Base</a>(seed, allocator) {}</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Allocator></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span><<span class="keyword">typename</span> FwdSketch, <span class="keyword">typename</span> Sketch></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">auto</span> <a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html#a3ee0c8ec70c980979f84c68065da3d9b">array_tuple_a_not_b<Array, Allocator>::compute</a>(FwdSketch&& a, <span class="keyword">const</span> Sketch& b, <span class="keywordtype">bool</span> ordered) <span class="keyword">const</span> -> CompactSketch {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> CompactSketch(a.get_num_values(), Base::compute(std::forward<FwdSketch>(a), b, ordered));</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> } <span class="comment">/* namespace datasketches */</span></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html_a3ee0c8ec70c980979f84c68065da3d9b"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html#a3ee0c8ec70c980979f84c68065da3d9b">datasketches::array_tuple_a_not_b::compute</a></div><div class="ttdeci">CompactSketch compute(FwdSketch &&a, const Sketch &b, bool ordered=true) const</div><div class="ttdoc">Computes the A-not-B set operation given two sketches.</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html_afc12166e05f904485a0fd4fe84436336"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html#afc12166e05f904485a0fd4fe84436336">datasketches::array_tuple_a_not_b::array_tuple_a_not_b</a></div><div class="ttdeci">array_tuple_a_not_b(uint64_t seed=DEFAULT_SEED, const Allocator &allocator=Allocator())</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> array_tuple_a_n [...]
+<div class="ttc" id="aclassdatasketches_1_1tuple__a__not__b_html"><div class="ttname"><a href="classdatasketches_1_1tuple__a__not__b.html">datasketches::tuple_a_not_b</a></div><div class="ttdoc">tuple A-not-B</div><div class="ttdef"><b>Definition:</b> tuple_a_not_b.hpp:33</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><!-- 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__tuple__intersection_8hpp_source.html b/docs/5.0.1/array__tuple__intersection_8hpp_source.html
new file mode 100644
index 0000000..338fd45
--- /dev/null
+++ b/docs/5.0.1/array__tuple__intersection_8hpp_source.html
@@ -0,0 +1,136 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_tuple_intersection.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">array_tuple_intersection.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef ARRAY_TUPLE_INTERSECTION_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define ARRAY_TUPLE_INTERSECTION_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "array_tuple_sketch.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "tuple_intersection.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span><</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">typename</span> Array,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">typename</span> Policy,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">typename</span> Allocator = <span class="keyword">typename</span> Array::allocator_type</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ></div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classdatasketches_1_1array__tuple__intersection.html"> 37</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1array__tuple__intersection.html">array_tuple_intersection</a>: <span class="keyword">public</span> <a class="code" href="classdatasketches_1_1tuple__intersection.html">tuple_intersection</a><Array, Policy, Allocator> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1tuple__intersection.html">Base</a> = <a class="code" href="classdatasketches_1_1tuple__intersection.html">tuple_intersection<Array, Policy, Allocator></a>;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">CompactSketch</a> = <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch<Array, Allocator></a>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">using</span> resize_factor = <a class="code" href="namespacedatasketches_1_1theta__constants.html#a329224ced789e065aed0698566b954a4">theta_constants::resize_factor</a>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">explicit</span> <a class="code" href="classdatasketches_1_1array__tuple__intersection.html#af032c7e2eeeafda87bf316647465ba4a">array_tuple_intersection</a>(uint64_t seed = DEFAULT_SEED, <span class="keyword">const</span> Policy& policy = Policy(), <span class="keyword">const</span> Allocator& allocator = Allocator());</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">CompactSketch</a> <a class="code" href="classdatasketches_1_1array__tuple__intersection.html#a037835e8f8e6b5233fa0f0996bba6a99">get_result</a>(<span class="keywordtype">bool</span> ordered = <span class="keyword">true</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> };</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> } <span class="comment">/* namespace datasketches */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "array_tuple_intersection_impl.hpp"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html">datasketches::array_tuple_intersection</a></div><div class="ttdoc">array tuple intersection</div><div class="ttdef"><b>Definition:</b> array_tuple_intersection.hpp:37</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html_a037835e8f8e6b5233fa0f0996bba6a99"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html#a037835e8f8e6b5233fa0f0996bba6a99">datasketches::array_tuple_intersection::get_result</a></div><div class="ttdeci">CompactSketch get_result(bool ordered=true) const</div><div class="ttdoc">Produces a copy of the current state of the intersection.</div><div class="ttdef"><b>Definition:</b> array_tupl [...]
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html_af032c7e2eeeafda87bf316647465ba4a"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html#af032c7e2eeeafda87bf316647465ba4a">datasketches::array_tuple_intersection::array_tuple_intersection</a></div><div class="ttdeci">array_tuple_intersection(uint64_t seed=DEFAULT_SEED, const Policy &policy=Policy(), const Allocator &allocator=Allocator())</div><div class="ttdoc">Constructor.</d [...]
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html">datasketches::compact_array_tuple_sketch</a></div><div class="ttdoc">Compact array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:163</div></div>
+<div class="ttc" id="aclassdatasketches_1_1tuple__intersection_html"><div class="ttname"><a href="classdatasketches_1_1tuple__intersection.html">datasketches::tuple_intersection</a></div><div class="ttdoc">Tuple intersection.</div><div class="ttdef"><b>Definition:</b> tuple_intersection.hpp:47</div></div>
+<div class="ttc" id="anamespacedatasketches_1_1theta__constants_html_a329224ced789e065aed0698566b954a4"><div class="ttname"><a href="namespacedatasketches_1_1theta__constants.html#a329224ced789e065aed0698566b954a4">datasketches::theta_constants::resize_factor</a></div><div class="ttdeci">datasketches::resize_factor resize_factor</div><div class="ttdoc">hash table resize factor</div><div class="ttdef"><b>Definition:</b> theta_constants.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><!-- 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__tuple__intersection__impl_8hpp_source.html b/docs/5.0.1/array__tuple__intersection__impl_8hpp_source.html
new file mode 100644
index 0000000..c073ac9
--- /dev/null
+++ b/docs/5.0.1/array__tuple__intersection__impl_8hpp_source.html
@@ -0,0 +1,114 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_tuple_intersection_impl.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">array_tuple_intersection_impl.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Policy, <span class="keyword">typename</span> Allocator></div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classdatasketches_1_1array__tuple__intersection.html#af032c7e2eeeafda87bf316647465ba4a"> 23</a></span> <a class="code" href="classdatasketches_1_1array__tuple__intersection.html#af032c7e2eeeafda87bf316647465ba4a">array_tuple_intersection<Array, Policy, Allocator>::array_tuple_intersection</a>(uint64_t seed, <span class="keyword">const</span> Policy& policy, <span class="keyword">const</span [...]
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <a class="code" href="classdatasketches_1_1tuple__intersection.html">Base</a>(seed, policy, allocator) {}</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Policy, <span class="keyword">typename</span> Allocator></div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classdatasketches_1_1array__tuple__intersection.html#a037835e8f8e6b5233fa0f0996bba6a99"> 27</a></span> <span class="keyword">auto</span> <a class="code" href="classdatasketches_1_1array__tuple__intersection.html#a037835e8f8e6b5233fa0f0996bba6a99">array_tuple_intersection<Array, Policy, Allocator>::get_result</a>(<span class="keywordtype">bool</span> ordered) <span class="keyword">const</span> - [...]
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">CompactSketch</a>(this->state_.get_policy().get_external_policy().get_num_values(), Base::get_result(ordered));</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> } <span class="comment">/* namespace datasketches */</span></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html_a037835e8f8e6b5233fa0f0996bba6a99"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html#a037835e8f8e6b5233fa0f0996bba6a99">datasketches::array_tuple_intersection::get_result</a></div><div class="ttdeci">CompactSketch get_result(bool ordered=true) const</div><div class="ttdoc">Produces a copy of the current state of the intersection.</div><div class="ttdef"><b>Definition:</b> array_tupl [...]
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html_af032c7e2eeeafda87bf316647465ba4a"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html#af032c7e2eeeafda87bf316647465ba4a">datasketches::array_tuple_intersection::array_tuple_intersection</a></div><div class="ttdeci">array_tuple_intersection(uint64_t seed=DEFAULT_SEED, const Policy &policy=Policy(), const Allocator &allocator=Allocator())</div><div class="ttdoc">Constructor.</d [...]
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html">datasketches::compact_array_tuple_sketch</a></div><div class="ttdoc">Compact array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:163</div></div>
+<div class="ttc" id="aclassdatasketches_1_1tuple__intersection_html"><div class="ttname"><a href="classdatasketches_1_1tuple__intersection.html">datasketches::tuple_intersection</a></div><div class="ttdoc">Tuple intersection.</div><div class="ttdef"><b>Definition:</b> tuple_intersection.hpp:47</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><!-- 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__tuple__sketch_8hpp_source.html b/docs/5.0.1/array__tuple__sketch_8hpp_source.html
new file mode 100644
index 0000000..572145d
--- /dev/null
+++ b/docs/5.0.1/array__tuple__sketch_8hpp_source.html
@@ -0,0 +1,282 @@
+<!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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_tuple_sketch.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">array_tuple_sketch.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a 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 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 name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a 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 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 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 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 name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
+<div class="line"><a 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 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 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 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 name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef ARRAY_TUPLE_SKETCH_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#define ARRAY_TUPLE_SKETCH_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <memory></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "serde.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "tuple_sketch.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// This simple array is faster than std::vector and should be sufficient for this application</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator = std::allocator<T>></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">class </span>array {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">using</span> value_type = T;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">using</span> allocator_type = Allocator;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">explicit</span> array(uint8_t size, T value, <span class="keyword">const</span> Allocator& allocator = Allocator()):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  allocator_(allocator), size_(size), array_(allocator_.allocate(size_)) {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  std::fill(array_, array_ + size_, value);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  array(<span class="keyword">const</span> array& other):</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  allocator_(other.allocator_),</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  size_(other.size_),</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  array_(allocator_.allocate(size_))</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  std::copy(other.array_, other.array_ + size_, array_);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  array(array&& other) noexcept:</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  allocator_(std::move(other.allocator_)),</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  size_(other.size_),</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  array_(other.array_)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  other.array_ = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  ~array() {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (array_ != <span class="keyword">nullptr</span>) allocator_.deallocate(array_, size_);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  array& operator=(<span class="keyword">const</span> array& other) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  array copy(other);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::swap(allocator_, copy.allocator_);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  std::swap(size_, copy.size_);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  std::swap(array_, copy.array_);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  array& operator=(array&& other) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  std::swap(allocator_, other.allocator_);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  std::swap(size_, other.size_);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::swap(array_, other.array_);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  T& operator[](<span class="keywordtype">size_t</span> index) { <span class="keywordflow">return</span> array_[index]; }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  T operator[](<span class="keywordtype">size_t</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> array_[index]; }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  uint8_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  T* data() { <span class="keywordflow">return</span> array_; }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">const</span> T* data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> array_; }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> array& other)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">for</span> (uint8_t i = 0; i < size_; ++i) <span class="keywordflow">if</span> (array_[i] != other.array_[i]) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  Allocator allocator_;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  uint8_t size_;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  T* array_;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> };</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Allocator = <span class="keyword">typename</span> Array::allocator_type></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classdatasketches_1_1default__array__tuple__update__policy.html"> 89</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1default__array__tuple__update__policy.html">default_array_tuple_update_policy</a> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="classdatasketches_1_1default__array__tuple__update__policy.html">default_array_tuple_update_policy</a>(uint8_t num_values = 1, <span class="keyword">const</span> Allocator& allocator = Allocator()):</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  allocator_(allocator), num_values_(num_values) {}</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  Array create()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">return</span> Array(num_values_, 0, allocator_);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span><<span class="keyword">typename</span> InputArray> <span class="comment">// to allow any type with indexed access (such as double* or std::vector)</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">void</span> update(Array& array, <span class="keyword">const</span> InputArray& update)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">for</span> (uint8_t i = 0; i < num_values_; ++i) array[i] += update[i];</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  uint8_t get_num_values()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> num_values_;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  Allocator allocator_;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  uint8_t num_values_;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> };</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// forward declaration</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Allocator> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch</a>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">template</span><</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">typename</span> Array,</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">typename</span> Policy = <a class="code" href="classdatasketches_1_1default__array__tuple__update__policy.html">default_array_tuple_update_policy<Array></a>,</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">typename</span> Allocator = <span class="keyword">typename</span> Array::allocator_type</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> ></div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classdatasketches_1_1update__array__tuple__sketch.html"> 125</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html">update_array_tuple_sketch</a>: <span class="keyword">public</span> <a class="code" href="classdatasketches_1_1update__tuple__sketch.html">update_tuple_sketch</a><Array, Array, Policy, Allocator> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1update__tuple__sketch.html">Base</a> = <a class="code" href="classdatasketches_1_1update__tuple__sketch.html">update_tuple_sketch<Array, Array, Policy, Allocator></a>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">using</span> resize_factor = <span class="keyword">typename</span> Base::resize_factor;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">class </span><a class="code" href="classdatasketches_1_1update__array__tuple__sketch_1_1builder.html">builder</a>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch<Array, Allocator></a> compact(<span class="keywordtype">bool</span> ordered = <span class="keyword">true</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  uint8_t <a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html#a005404841e22f08ab76ce513d9b39bd1">get_num_values</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// for builder</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html">update_array_tuple_sketch</a>(uint8_t lg_cur_size, uint8_t lg_nom_size, resize_factor rf, <span class="keywordtype">float</span> p, uint64_t theta,</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  uint64_t seed, <span class="keyword">const</span> Policy& policy, <span class="keyword">const</span> Allocator& allocator);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> };</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">template</span><<span class="keyword">typename</span> Array, <span class="keyword">typename</span> Policy, <span class="keyword">typename</span> Allocator></div>
+<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classdatasketches_1_1update__array__tuple__sketch_1_1builder.html"> 145</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html">update_array_tuple_sketch</a><Array, Policy, Allocator>::<a class="code" href="classdatasketches_1_1update__array__tuple__sketch_1_1builder.html">builder</a>: <span class="keyword">public</span> <a clas [...]
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classdatasketches_1_1update__array__tuple__sketch_1_1builder.html">builder</a>(<span class="keyword">const</span> Policy& policy = Policy(), <span class="keyword">const</span> Allocator& allocator = Allocator());</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classdatasketches_1_1update__array__tuple__sketch.html">update_array_tuple_sketch</a> build() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> };</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">template</span><</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">typename</span> Array,</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">typename</span> Allocator = <span class="keyword">typename</span> Array::allocator_type</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> ></div>
+<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classdatasketches_1_1compact__array__tuple__sketch.html"> 163</a></span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch</a>: <span class="keyword">public</span> <a class="code" href="classdatasketches_1_1compact__tuple__sketch.html">compact_tuple_sketch</a><Array, Allocator> {</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">using</span> <a class="code" href="classdatasketches_1_1compact__tuple__sketch.html">Base</a> = <a class="code" href="classdatasketches_1_1compact__tuple__sketch.html">compact_tuple_sketch<Array, Allocator></a>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">using</span> Entry = <span class="keyword">typename</span> Base::Entry;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">using</span> AllocEntry = <span class="keyword">typename</span> Base::AllocEntry;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">using</span> AllocU64 = <span class="keyword">typename</span> Base::AllocU64;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">using</span> vector_bytes = <span class="keyword">typename</span> Base::vector_bytes;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">static</span> <span class="keyword">const</span> uint8_t SERIAL_VERSION = 1;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">static</span> <span class="keyword">const</span> uint8_t SKETCH_FAMILY = 9;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">static</span> <span class="keyword">const</span> uint8_t SKETCH_TYPE = 3;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">enum</span> flags { UNUSED1, UNUSED2, IS_EMPTY, HAS_ENTRIES, IS_ORDERED };</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Sketch></div>
+<div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classdatasketches_1_1compact__array__tuple__sketch.html#a1d5f786024b3df2ab6993056a22abad0"> 183</a></span>  <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a1d5f786024b3df2ab6993056a22abad0">compact_array_tuple_sketch</a>(<span class="keyword">const</span> Sketch& other, <span class="keywordtype">bool</span> ordered = <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  uint8_t <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a005404841e22f08ab76ce513d9b39bd1">get_num_values</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordtype">void</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a1bcdd98ee6e6eb9b501b8dc5de5e8924">serialize</a>(std::ostream& os) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  vector_bytes <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a1bcdd98ee6e6eb9b501b8dc5de5e8924">serialize</a>(<span class="keywordtype">unsigned</span> header_size_bytes = 0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">static</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch</a> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a94e90deb78db69a750d375b6fae0c585">deserialize</a>(std::istream& is, uint64_t seed = DEFAULT_SEED, <span class="keyword">const</span> Allocator& allocator = Allocator());</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">static</span> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html">compact_array_tuple_sketch</a> <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a94e90deb78db69a750d375b6fae0c585">deserialize</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> size, uint64_t s [...]
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">const</span> Allocator& allocator = Allocator());</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  uint8_t num_values_;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Ar, <span class="keyword">typename</span> P, <span class="keyword">typename</span> Al> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1array__tuple__union.html">array_tuple_union</a>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Ar, <span class="keyword">typename</span> P, <span class="keyword">typename</span> Al> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1array__tuple__intersection.html">array_tuple_intersection</a>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Ar, <span class="keyword">typename</span> Al> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdatasketches_1_1array__tuple__a__not__b.html">array_tuple_a_not_b</a>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a1d5f786024b3df2ab6993056a22abad0">compact_array_tuple_sketch</a>(<span class="keywordtype">bool</span> <a class="code" href="classdatasketches_1_1compact__tuple__sketch.html#a5a2b7a58dc85678d08752945ff655362">is_empty</a>, <span class="keywordtype">bool</span> <a class="code" href="classdatasketches_1_1compact__tuple__sketch.html#a [...]
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <a class="code" href="classdatasketches_1_1compact__array__tuple__sketch.html#a1d5f786024b3df2ab6993056a22abad0">compact_array_tuple_sketch</a>(uint8_t num_values, <a class="code" href="classdatasketches_1_1compact__tuple__sketch.html">Base</a>&& base);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> };</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> } <span class="comment">/* namespace datasketches */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor">#include "array_tuple_sketch_impl.hpp"</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__a__not__b_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__a__not__b.html">datasketches::array_tuple_a_not_b</a></div><div class="ttdoc">array tuple A-not-B</div><div class="ttdef"><b>Definition:</b> array_tuple_a_not_b.hpp:33</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__intersection_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__intersection.html">datasketches::array_tuple_intersection</a></div><div class="ttdoc">array tuple intersection</div><div class="ttdef"><b>Definition:</b> array_tuple_intersection.hpp:37</div></div>
+<div class="ttc" id="aclassdatasketches_1_1array__tuple__union_html"><div class="ttname"><a href="classdatasketches_1_1array__tuple__union.html">datasketches::array_tuple_union</a></div><div class="ttdoc">array tuple union</div><div class="ttdef"><b>Definition:</b> array_tuple_union.hpp:54</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html">datasketches::compact_array_tuple_sketch</a></div><div class="ttdoc">Compact array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:163</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html_a005404841e22f08ab76ce513d9b39bd1"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html#a005404841e22f08ab76ce513d9b39bd1">datasketches::compact_array_tuple_sketch::get_num_values</a></div><div class="ttdeci">uint8_t get_num_values() const</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch_impl.hpp:65</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html_a1bcdd98ee6e6eb9b501b8dc5de5e8924"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html#a1bcdd98ee6e6eb9b501b8dc5de5e8924">datasketches::compact_array_tuple_sketch::serialize</a></div><div class="ttdeci">void serialize(std::ostream &os) const</div><div class="ttdoc">This method serializes the sketch into a given stream in a binary form.</div><div class="ttdef"><b>Definition:< [...]
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html_a1d5f786024b3df2ab6993056a22abad0"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html#a1d5f786024b3df2ab6993056a22abad0">datasketches::compact_array_tuple_sketch::compact_array_tuple_sketch</a></div><div class="ttdeci">compact_array_tuple_sketch(const Sketch &other, bool ordered=true)</div><div class="ttdoc">Copy constructor.</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__array__tuple__sketch_html_a94e90deb78db69a750d375b6fae0c585"><div class="ttname"><a href="classdatasketches_1_1compact__array__tuple__sketch.html#a94e90deb78db69a750d375b6fae0c585">datasketches::compact_array_tuple_sketch::deserialize</a></div><div class="ttdeci">static compact_array_tuple_sketch deserialize(std::istream &is, uint64_t seed=DEFAULT_SEED, const Allocator &allocator=Allocator())</div><div class="ttdoc">This method [...]
+<div class="ttc" id="aclassdatasketches_1_1compact__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1compact__tuple__sketch.html">datasketches::compact_tuple_sketch</a></div><div class="ttdoc">Compact Tuple sketch.</div><div class="ttdef"><b>Definition:</b> tuple_sketch.hpp:407</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__tuple__sketch_html_a5a2b7a58dc85678d08752945ff655362"><div class="ttname"><a href="classdatasketches_1_1compact__tuple__sketch.html#a5a2b7a58dc85678d08752945ff655362">datasketches::compact_tuple_sketch< Array, typename Array::allocator_type >::is_empty</a></div><div class="ttdeci">virtual bool is_empty() const</div><div class="ttdef"><b>Definition:</b> tuple_sketch_impl.hpp:323</div></div>
+<div class="ttc" id="aclassdatasketches_1_1compact__tuple__sketch_html_a5f5b393314c0c1819f79b73232a506e8"><div class="ttname"><a href="classdatasketches_1_1compact__tuple__sketch.html#a5f5b393314c0c1819f79b73232a506e8">datasketches::compact_tuple_sketch< Array, typename Array::allocator_type >::is_ordered</a></div><div class="ttdeci">virtual bool is_ordered() const</div><div class="ttdef"><b>Definition:</b> tuple_sketch_impl.hpp:328</div></div>
+<div class="ttc" id="aclassdatasketches_1_1default__array__tuple__update__policy_html"><div class="ttname"><a href="classdatasketches_1_1default__array__tuple__update__policy.html">datasketches::default_array_tuple_update_policy</a></div><div class="ttdoc">default array tuple update policy</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:89</div></div>
+<div class="ttc" id="aclassdatasketches_1_1tuple__base__builder_html"><div class="ttname"><a href="classdatasketches_1_1tuple__base__builder.html">datasketches::tuple_base_builder</a></div><div class="ttdoc">Tuple base builder.</div><div class="ttdef"><b>Definition:</b> tuple_sketch.hpp:587</div></div>
+<div class="ttc" id="aclassdatasketches_1_1update__array__tuple__sketch_1_1builder_html"><div class="ttname"><a href="classdatasketches_1_1update__array__tuple__sketch_1_1builder.html">datasketches::update_array_tuple_sketch::builder</a></div><div class="ttdoc">Update array tuple sketch builder.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:145</div></div>
+<div class="ttc" id="aclassdatasketches_1_1update__array__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1update__array__tuple__sketch.html">datasketches::update_array_tuple_sketch</a></div><div class="ttdoc">Update array tuple sketch.</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch.hpp:125</div></div>
+<div class="ttc" id="aclassdatasketches_1_1update__array__tuple__sketch_html_a005404841e22f08ab76ce513d9b39bd1"><div class="ttname"><a href="classdatasketches_1_1update__array__tuple__sketch.html#a005404841e22f08ab76ce513d9b39bd1">datasketches::update_array_tuple_sketch::get_num_values</a></div><div class="ttdeci">uint8_t get_num_values() const</div><div class="ttdef"><b>Definition:</b> array_tuple_sketch_impl.hpp:28</div></div>
+<div class="ttc" id="aclassdatasketches_1_1update__tuple__sketch_html"><div class="ttname"><a href="classdatasketches_1_1update__tuple__sketch.html">datasketches::update_tuple_sketch</a></div><div class="ttdoc">Update Tuple sketch.</div><div class="ttdef"><b>Definition:</b> tuple_sketch.hpp:217</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><!-- 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.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/5.0.1/array__tuple__sketch__impl_8hpp_source.html b/docs/5.0.1/array__tuple__sketch__impl_8hpp_source.html
new file mode 100644
index 0000000..5f9aef7
--- /dev/null
+++ b/docs/5.0.1/array__tuple__sketch__impl_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">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>datasketches-cpp: tuple/include/array_tuple_sketch_impl.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.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 style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">datasketches-cpp
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_00b03cb5ae954e8a2b89b347e34477b0.html">tuple</a></li><li class="navelem"><a class="el" href="dir_0bcb9827d33186afae8dcf178a314956.html">include</a></li> </ul>
... 91125 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org