You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by al...@apache.org on 2019/09/06 19:19:09 UTC

[incubator-datasketches-cpp] branch cpc_formatting_and_const created (now 3e54d79)

This is an automated email from the ASF dual-hosted git repository.

alsay pushed a change to branch cpc_formatting_and_const
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git.


      at 3e54d79  formatting, use const where appropriate

This branch includes the following new commits:

     new 3e54d79  formatting, use const where appropriate

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[incubator-datasketches-cpp] 01/01: formatting, use const where appropriate

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

alsay pushed a commit to branch cpc_formatting_and_const
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git

commit 3e54d7934307c387b9d55bfe8d6bd6a8f63901b0
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Fri Sep 6 12:18:55 2019 -0700

    formatting, use const where appropriate
---
 cpc/include/common.h          |   2 -
 cpc/include/cpc_sketch.hpp    |  21 +-
 cpc/include/fm85.h            |  68 ++---
 cpc/include/fm85Compression.h |  64 ++--
 cpc/include/fm85Confidence.h  |   8 +-
 cpc/include/fm85Merging.h     |  28 +-
 cpc/include/fm85Util.h        |  16 +-
 cpc/include/iconEstimator.h   |   2 +-
 cpc/include/u32Table.h        |  50 +---
 cpc/src/fm85.cpp              | 368 ++++++++++-------------
 cpc/src/fm85Compression.cpp   | 680 ++++++++++++++++--------------------------
 cpc/src/fm85Confidence.cpp    |  95 +++---
 cpc/src/fm85Merging.cpp       | 208 ++++++-------
 cpc/src/fm85Util.cpp          | 139 ++++-----
 cpc/src/iconEstimator.cpp     |  95 +++---
 cpc/src/u32Table.cpp          | 223 ++++++--------
 16 files changed, 813 insertions(+), 1254 deletions(-)

diff --git a/cpc/include/common.h b/cpc/include/common.h
index 5d020e2..4aa98bd 100644
--- a/cpc/include/common.h
+++ b/cpc/include/common.h
@@ -29,8 +29,6 @@
 #include <time.h>
 #include <math.h>
 
-typedef int Boolean;
-
 typedef uint8_t  U8;
 typedef uint16_t U16;
 typedef uint32_t U32;
diff --git a/cpc/include/cpc_sketch.hpp b/cpc/include/cpc_sketch.hpp
index 78ed8d5..06a2ded 100644
--- a/cpc/include/cpc_sketch.hpp
+++ b/cpc/include/cpc_sketch.hpp
@@ -325,12 +325,12 @@ class cpc_sketch {
       is.read((char*)&flags_byte, sizeof(flags_byte));
       uint16_t seed_hash;
       is.read((char*)&seed_hash, sizeof(seed_hash));
-      const bool has_hip(flags_byte & (1 << flags::HAS_HIP));
-      const bool has_table(flags_byte & (1 << flags::HAS_TABLE));
-      const bool has_window(flags_byte & (1 << flags::HAS_WINDOW));
+      const bool has_hip = flags_byte & (1 << flags::HAS_HIP);
+      const bool has_table = flags_byte & (1 << flags::HAS_TABLE);
+      const bool has_window = flags_byte & (1 << flags::HAS_WINDOW);
       FM85 compressed;
-      compressed.isCompressed = 1;
-      compressed.mergeFlag = has_hip ? 0 : 1;
+      compressed.isCompressed = true;
+      compressed.mergeFlag = !has_hip;
       compressed.lgK = lg_k;
       compressed.firstInterestingColumn = first_interesting_column;
       compressed.numCoupons = 0;
@@ -422,12 +422,12 @@ class cpc_sketch {
       ptr += copy_from_mem(ptr, &flags_byte, sizeof(flags_byte));
       uint16_t seed_hash;
       ptr += copy_from_mem(ptr, &seed_hash, sizeof(seed_hash));
-      const bool has_hip(flags_byte & (1 << flags::HAS_HIP));
-      const bool has_table(flags_byte & (1 << flags::HAS_TABLE));
-      const bool has_window(flags_byte & (1 << flags::HAS_WINDOW));
+      const bool has_hip = flags_byte & (1 << flags::HAS_HIP);
+      const bool has_table = flags_byte & (1 << flags::HAS_TABLE);
+      const bool has_window = flags_byte & (1 << flags::HAS_WINDOW);
       FM85 compressed;
-      compressed.isCompressed = 1;
-      compressed.mergeFlag = has_hip ? 0 : 1;
+      compressed.isCompressed = true;
+      compressed.mergeFlag = !has_hip;
       compressed.lgK = lg_k;
       compressed.firstInterestingColumn = first_interesting_column;
       compressed.numCoupons = 0;
@@ -517,7 +517,6 @@ class cpc_sketch {
     }
 
     friend std::ostream& operator<<(std::ostream& os, cpc_sketch const& sketch);
-
     friend class cpc_union;
 
   private:
diff --git a/cpc/include/fm85.h b/cpc/include/fm85.h
index 9bf03f2..c123596 100644
--- a/cpc/include/fm85.h
+++ b/cpc/include/fm85.h
@@ -36,28 +36,25 @@ enum flavorType {
   SLIDING  // 27K/8 <= C
 };
 
-/*******************************************************/
-
-typedef struct fm85_sketch_type
-{
+typedef struct fm85_sketch_type {
   // The following variables occur in all sketch types.
   Short lgK;
-  Boolean isCompressed;
-  Boolean mergeFlag; // Is the sketch the result of merging?
+  bool isCompressed;
+  bool mergeFlag; // Is the sketch the result of merging?
 
   Long numCoupons; // The number of coupons collected so far.
 
   // The following variables occur in the updateable semi-compressed type.
-  U8 * slidingWindow;
+  U8* slidingWindow;
   Short windowOffset; // Derivable from numCoupons, but made explicit for speed.
-  u32Table * surprisingValueTable;
+  u32Table* surprisingValueTable;
 
   // The following variables occur in the non-updateable fully-compressed type.
-  U32 * compressedWindow; // A bitstream.
-  Long  cwLength; // The number of 32-bit words in this bitstream. (Not needed in Java).
-  Long  numCompressedSurprisingValues;
-  U32 * compressedSurprisingValues; // A bitstream.
-  Long  csvLength; // The number of 32-bit words in this bitstream. (Not needed in Java).
+  U32* compressedWindow; // A bitstream.
+  Long cwLength; // The number of 32-bit words in this bitstream. (Not needed in Java).
+  Long numCompressedSurprisingValues;
+  U32* compressedSurprisingValues; // A bitstream.
+  Long csvLength; // The number of 32-bit words in this bitstream. (Not needed in Java).
 
   // Note that (as an optimization) the two bitstreams could be concatenated.
 
@@ -72,53 +69,36 @@ typedef struct fm85_sketch_type
 extern void* (*fm85alloc)(size_t);
 extern void (*fm85free)(void*);
 
-/*******************************************************/
 // These routines are exported.
 
-void fm85Init (void); // Call this before anything else.
-void fm85InitAD (void* (*alloc)(size_t), void (*dealloc)(void*)); // or this to use custom allocator and deallocator
-
-void fm85Clean (void); // Call this at the end to clean up (optional)
+void fm85Init(void); // Call this before anything else.
+void fm85InitAD(void* (*alloc)(size_t), void (*dealloc)(void*)); // or this to use custom allocator and deallocator
 
-FM85 * fm85Make (Short lgK);
+void fm85Clean(void); // Call this at the end to clean up (optional)
 
-FM85 * fm85Copy (FM85 * self);
+FM85* fm85Make(Short lgK);
 
-void fm85Free (FM85 * sketch);
+FM85* fm85Copy(const FM85* self);
 
-void fm85Update (FM85 * sketch, U64 hash0, U64 hash1);
+void fm85Free(FM85* sketch);
 
-double getHIPEstimate (FM85 * sketch);
+void fm85Update(FM85* sketch, U64 hash0, U64 hash1);
 
-// getIconEstimate() is defined in a separate file.
-
-/*******************************************************/
+double getHIPEstimate(const FM85* sketch);
 
 // The following is used during testing, and is basically package private.
-U32 rowColFromTwoHashes (U64 hash0, U64 hash1, Short lgK);
+U32 rowColFromTwoHashes(U64 hash0, U64 hash1, Short lgK);
 
-/*******************************************************/
 // These routines are internal.
 
-void fm85RowColUpdate (FM85 * sketch, U32 rowCol);
-
-enum flavorType determineFlavor (Short lgK, Long c);
-enum flavorType determineSketchFlavor (FM85 * self);
+void fm85RowColUpdate(FM85* sketch, U32 rowCol);
 
-Short determineCorrectOffset (Short lgK, Long c);
+enum flavorType determineFlavor(Short lgK, Long c);
+enum flavorType determineSketchFlavor(const FM85* self);
 
-U64 * bitMatrixOfSketch (FM85 * self);
+Short determineCorrectOffset(Short lgK, Long c);
 
-// these are only used internally
-// void promoteEmptyToSparse (FM85 * self);
-// void promoteSparseToWindowed (FM85 * self);
-// void modifyOffset (FM85 * self, Short newOffset);
-// void updateSparse   (FM85 * self, U32 rowCol);
-// void updateWindowed (FM85 * self, U32 rowCol);
-
-
-/*******************************************************/
+U64* bitMatrixOfSketch(const FM85* self);
 
 #define GOT_FM85_H
 #endif
-
diff --git a/cpc/include/fm85Compression.h b/cpc/include/fm85Compression.h
index 334363b..c13c10c 100644
--- a/cpc/include/fm85Compression.h
+++ b/cpc/include/fm85Compression.h
@@ -24,70 +24,54 @@
 #include "fm85.h"
 #include "fm85Util.h"
 
-/****************************************/
-
 #define MAYBE_FLUSH_BITBUF(wordarr,wordindex) \
    if (bufbits >= 32) { \
-   (wordarr)[(wordindex)++] = (U32) (bitbuf & 0xffffffff); \
-    bitbuf = bitbuf >> 32; bufbits -= 32;}
+     (wordarr)[(wordindex)++] = (U32) (bitbuf & 0xffffffff); \
+     bitbuf = bitbuf >> 32; bufbits -= 32; \
+   }
 
 
 #define MAYBE_FILL_BITBUF(wordarr,wordindex,minbits) \
   if (bufbits < (minbits)) { \
-      bitbuf |= (((U64) (wordarr)[(wordindex)++]) << bufbits);	\
-      bufbits += 32; \
-    }
-
-/****************************************/
+    bitbuf |= (((U64) (wordarr)[(wordindex)++]) << bufbits);	\
+    bufbits += 32; \
+  }
 
-void makeTheDecodingTables (void); // call this at startup
-void freeTheDecodingTables (void); // call this at the end
+void makeTheDecodingTables(void); // call this at startup
+void freeTheDecodingTables(void); // call this at the end
 
-/****************************************/
 // Here "pairs" refers to row/column pairs that specify 
 // the positions of surprising values in the bit matrix.
 
 // returns the number of compressedWords actually used
-Long lowLevelCompressPairs (U32 * pairArray, // input
+Long lowLevelCompressPairs(const U32* pairArray, // input
 			    Long numPairs, // input
-			    Long numBaseBits,      // input
-			    U32 * compressedWords); // output
+			    Long numBaseBits, // input
+			    U32* compressedWords); // output
 
-void lowLevelUncompressPairs (U32 * pairArray, // output
+void lowLevelUncompressPairs(U32* pairArray, // output
 			      Long numPairs, // input
-			      Long numBaseBits,      // input
-			      U32 * compressedWords, // input
+			      Long numBaseBits, // input
+			      const U32* compressedWords, // input
 			      Long numCompressedWords); // input
 
-/****************************************/
-
 // This returns the number of compressedWords that were actually used. It is the caller's 
 // responsibility to ensure that the compressedWords array is long enough to prevent over-run.
 
-Long lowLevelCompressBytes (U8 * byteArray,         // input
-			    Long numBytesToEncode,  // input
-			    U16 * encodingTable,    // input
-			    U32 * compressedWords); // output
+Long lowLevelCompressBytes(const U8* byteArray, // input
+			    Long numBytesToEncode, // input
+			    const U16* encodingTable, // input
+			    U32* compressedWords); // output
 
-/****************************************/
-
-void lowLevelUncompressBytes (U8 * byteArray,         // output
-			      Long numBytesToDecode,  // input (but refers to the output)
-			      U16 * decodingTable,    // input
-			      U32 * compressedWords, // input
+void lowLevelUncompressBytes(U8* byteArray, // output
+			      Long numBytesToDecode, // input (but refers to the output)
+			      const U16* decodingTable, // input
+			      const U32* compressedWords, // input
 			      Long numCompressedWords); // input
 
-/****************************************/
-
-FM85 * fm85Compress (FM85 * uncompressedSketch); // returns a compressed copy of its input
+FM85* fm85Compress(FM85* uncompressedSketch); // returns a compressed copy of its input
 
-FM85 * fm85Uncompress (FM85 * compressedSketch); // returns an updateable copy of its input
-
-// Note: in the final system, compressed and uncompressed sketches will have different types
-
-/****************************************/
+FM85* fm85Uncompress(FM85* compressedSketch); // returns an updateable copy of its input
 
 #define GOT_FM85_COMPRESSION_H
 #endif
-
-
diff --git a/cpc/include/fm85Confidence.h b/cpc/include/fm85Confidence.h
index 18741cd..67f9db9 100644
--- a/cpc/include/fm85Confidence.h
+++ b/cpc/include/fm85Confidence.h
@@ -24,10 +24,10 @@
 #include "common.h"
 #include "fm85.h"
 
-double getIconConfidenceLB (FM85 * sketch, int kappa);
-double getIconConfidenceUB (FM85 * sketch, int kappa);
-double getHIPConfidenceLB  (FM85 * sketch, int kappa);
-double getHIPConfidenceUB  (FM85 * sketch, int kappa);
+double getIconConfidenceLB(const FM85* sketch, int kappa);
+double getIconConfidenceUB(const FM85* sketch, int kappa);
+double getHIPConfidenceLB(const FM85* sketch, int kappa);
+double getHIPConfidenceUB(const FM85* sketch, int kappa);
 
 #define GOT_FM85_CONFIDENCE_H
 #endif
diff --git a/cpc/include/fm85Merging.h b/cpc/include/fm85Merging.h
index c6d84dd..0114e06 100644
--- a/cpc/include/fm85Merging.h
+++ b/cpc/include/fm85Merging.h
@@ -27,13 +27,10 @@
 #include "fm85Util.h"
 #include "u32Table.h"
 
-/****************************************/
-
-typedef struct fm85_unioning_gadget
-{
+typedef struct fm85_unioning_gadget {
   Short lgK; // Note: in some cases this will be reduced.
-  FM85 * accumulator; // this is a sketch object
-  U64  * bitMatrix;
+  FM85* accumulator; // this is a sketch object
+  U64* bitMatrix;
   // Note: at most one of the previous two fields will be non-NULL at any given moment.
   // accumulator is a sketch object that is employed until it graduates out of Sparse mode.
   // At that point, it is converted into a full-sized bitMatrix, which is mathematically a sketch,
@@ -41,21 +38,15 @@ typedef struct fm85_unioning_gadget
   // is required when getResult is called at the end.
 } UG85;
 
-/****************************************/
-
-UG85 * ug85Make (Short lgK);
-
-void ug85Free (UG85 * unioner);
+UG85* ug85Make(Short lgK);
 
-void ug85MergeInto (UG85 * unioner, FM85 * sourceSketch);
+void ug85Free(UG85* unioner);
 
-FM85 * ug85GetResult (UG85 * unioner);
+void ug85MergeInto(UG85* unioner, const FM85* sourceSketch);
 
-/****************************************/
+FM85* ug85GetResult(const UG85* unioner);
 
-U64 * bitMatrixOfUG85 (UG85 * self, Boolean * needToFreePtr); // used for testing
-
-/****************************************/
+U64* bitMatrixOfUG85(const UG85* self, bool* needToFreePtr); // used for testing
 
 #define GOT_FM85_MERGING_H
 #endif
@@ -99,7 +90,6 @@ U64 * bitMatrixOfUG85 (UG85 * self, Boolean * needToFreePtr); // used for testin
 // wouldn't work because of the partially inverted Logic in the Sliding flavor, where the presence of
 // coupons is sometimes indicated by the ABSENCE of rowCol pairs in the surprises table.]
 
-/****************************************/
 
 // How does getResult work?
 
@@ -108,5 +98,3 @@ U64 * bitMatrixOfUG85 (UG85 * self, Boolean * needToFreePtr); // used for testin
 // If the unioner is using its bitMatrix field, then we have to convert the
 // bitMatrix back into a sketch, which requires doing some extra work to
 // figure out the values of numCoupons, offset, firstInterestingColumn, and KxQ.
-
-/*******************************************************************************************/
diff --git a/cpc/include/fm85Util.h b/cpc/include/fm85Util.h
index c2da967..90acdce 100644
--- a/cpc/include/fm85Util.h
+++ b/cpc/include/fm85Util.h
@@ -22,11 +22,11 @@
 #ifndef GOT_FM85_UTIL_H
 #include "common.h"
 
-void * shallowCopy (void * oldObject, size_t numBytes);
+void* shallowCopy(const void* oldObject, size_t numBytes);
 
 extern double invPow2Tab[];
 
-void fillInvPow2Tab (void);
+void fillInvPow2Tab(void);
 
 extern double kxpByteLookup[];
 
@@ -37,17 +37,15 @@ extern U8 byteTrailingZerosTable[];
 void fillByteLeadingZerosTable(void);
 void fillByteTrailingZerosTable(void);
 
-Short countLeadingZerosInUnsignedLong  (U64 theInput);
-Short countTrailingZerosInUnsignedLong (U64 theInput);
+Short countLeadingZerosInUnsignedLong(U64 theInput);
+Short countTrailingZerosInUnsignedLong(U64 theInput);
 
-Long divideLongsRoundingUp (Long x, Long y);
+Long divideLongsRoundingUp(Long x, Long y);
 
 // for delta-encoding an instance of (n choose m)
-Long golombChooseNumberOfBaseBits (Long n, Long m);
+Long golombChooseNumberOfBaseBits(Long n, Long m);
 
-Long countBitsSetInMatrix (U64 * array, Long length);
-
-/******************************************/
+Long countBitsSetInMatrix(const U64* array, Long length);
 
 #define GOT_FM85_UTIL_H
 #endif
diff --git a/cpc/include/iconEstimator.h b/cpc/include/iconEstimator.h
index 3bb5303..ecdeeff 100644
--- a/cpc/include/iconEstimator.h
+++ b/cpc/include/iconEstimator.h
@@ -23,7 +23,7 @@
 
 #include "common.h"
 
-double getIconEstimate (Short lgK, Long c);
+double getIconEstimate(Short lgK, Long c);
 
 #define GOT_ICON_H
 #endif
diff --git a/cpc/include/u32Table.h b/cpc/include/u32Table.h
index aa83fa2..515e982 100644
--- a/cpc/include/u32Table.h
+++ b/cpc/include/u32Table.h
@@ -31,60 +31,42 @@
 #define u32TableDownsizeNumer 1LL
 #define u32TableDownsizeDenom 4LL
 
-typedef struct u32_table_type
-{
+typedef struct u32_table_type {
   Short validBits;
   Short lgSize; // log2 of number of slots
   Long  numItems;
-  U32 * slots;
+  U32* slots;
 } u32Table;
 
-/*******************************************************/
+u32Table* u32TableMake(Short initialLgSize, Short numValidBits);
 
-u32Table * u32TableMake (Short initialLgSize, Short numValidBits);
+u32Table* u32TableCopy(const u32Table* self);
 
-u32Table * u32TableCopy (u32Table * self);
+void u32TableClear(u32Table* self);
 
-void u32TableClear (u32Table * self);
+void u32TableFree(u32Table* self);
 
-void u32TableFree (u32Table * self);
+void u32TableShow(const u32Table* self); // for debugging
 
-void u32TableShow (u32Table * self); // for debugging
+bool u32TableMaybeInsert(u32Table* self, U32 item);
 
-/*******************************************************/
-
-Boolean u32TableMaybeInsert (u32Table * self, U32 item);
-
-Boolean u32TableMaybeDelete (u32Table * self, U32 item);
-
-/*******************************************************/
+bool u32TableMaybeDelete(u32Table* self, U32 item);
 
 // this one slightly breaks the abstraction boundary
+u32Table* makeU32TableFromPairsArray(const U32* pairs, Long numPairs, Short sketchLgK);
 
-u32Table * makeU32TableFromPairsArray (U32 * pairs, Long numPairs, Short sketchLgK);
-
-/*******************************************************/
-
-U32 * u32TableUnwrappingGetItems (u32Table * self, Long * returnNumItems);
+U32* u32TableUnwrappingGetItems(const u32Table* self, Long* returnNumItems);
 
-void printU32Array (U32 * array, Long arrayLength);
-
-/*******************************************************/
-
-// void u32TokudaShellSort(U32 a[], Long l, Long r);
+void printU32Array(const U32* array, Long arrayLength);
 
 void u32KnuthShellSort3(U32 a[], Long l, Long r);
 
 void introspectiveInsertionSort(U32 a[], Long l, Long r);
 
-
-/*******************************************************/
-
-void u32Merge (U32 * arrA, Long startA, Long lengthA, // input
-	       U32 * arrB, Long startB, Long lengthB, // input
-	       U32 * arrC, Long startC);              // output
-
-/*******************************************************/
+void u32Merge(
+    const U32* arrA, Long startA, Long lengthA, // input
+	  const U32* arrB, Long startB, Long lengthB, // input
+	  U32* arrC, Long startC);                    // output
 
 #define GOT_U32_TABLE_H
 #endif
diff --git a/cpc/src/fm85.cpp b/cpc/src/fm85.cpp
index bf98dff..e498951 100644
--- a/cpc/src/fm85.cpp
+++ b/cpc/src/fm85.cpp
@@ -28,24 +28,20 @@
 #include <stdexcept>
 #include <new>
 
-/*******************************************************/
-
-U32 rowColFromTwoHashes (U64 hash0, U64 hash1, Short lgK) {
+U32 rowColFromTwoHashes(U64 hash0, U64 hash1, Short lgK) {
   if (lgK > 26) throw std::logic_error("lgK > 26");
-  Long k = (1LL << lgK);
-  Short col = countLeadingZerosInUnsignedLong (hash1); // 0 <= col <= 64
-  if (col > 63) col = 63;                    // clip so that 0 <= col <= 63
-  Long row = hash0 & (k - 1);
+  const Long k = 1LL << lgK;
+  Short col = countLeadingZerosInUnsignedLong(hash1); // 0 <= col <= 64
+  if (col > 63) col = 63; // clip so that 0 <= col <= 63
+  const Long row = hash0 & (k - 1);
   U32 rowCol = (U32) ((row << 6) | col);
   // To avoid the hash table's "empty" value, we change the row of the following pair.
   // This case is extremely unlikely, but we might as well handle it.
   if (rowCol == ALL32BITS) { rowCol ^= (1 << 6); } 
-  return (rowCol);
+  return rowCol;
 }
 
-/*******************************************************/
-
-Boolean fm85Initialized = 0;
+bool fm85Initialized = false;
 
 // This is to support custom allocator and deallocator
 void* (*fm85alloc)(size_t);
@@ -54,12 +50,12 @@ void (*fm85free)(void*);
 // This stuff would be handled by Java's mechanism
 // for initializing class variables.
 
-void fm85Init (void) {
+void fm85Init(void) {
   fm85InitAD(&malloc, &free);
 }
 
 // This is to support custom allocator and deallocator
-void fm85InitAD (void* (*alloc)(size_t), void (*dealloc)(void*)) {
+void fm85InitAD(void* (*alloc)(size_t), void (*dealloc)(void*)) {
   if (!fm85Initialized) {
     fm85alloc = alloc;
     fm85free = dealloc;
@@ -68,25 +64,23 @@ void fm85InitAD (void* (*alloc)(size_t), void (*dealloc)(void*)) {
     makeTheDecodingTables();
     fillInvPow2Tab();
     fillKxpByteLookup();
-    fm85Initialized = 1;
+    fm85Initialized = true;
   }
 }
 
-void fm85Clean (void) {
+void fm85Clean(void) {
   if (fm85Initialized) {
     freeTheDecodingTables();
-    fm85Initialized = 0;
+    fm85Initialized = false;
   }
 }
 
-/*******************************************************/
 // The flavor is a function of K and C (the number of collected coupons).
-
-enum flavorType determineFlavor (Short lgK, Long c) {
-  Long k = (1LL << lgK);
-  Long c2 = c << 1;
-  Long c8 = c << 3;
-  Long c32 = c << 5;
+enum flavorType determineFlavor(Short lgK, Long c) {
+  const Long k = 1LL << lgK;
+  const Long c2 = c << 1;
+  const Long c8 = c << 3;
+  const Long c32 = c << 5;
   if (c == 0)      return (EMPTY);    //    0  == C <    1
   if (c32 < 3*k)   return (SPARSE);   //    1  <= C <   3K/32
   if (c2 < k)      return (HYBRID);   // 3K/32 <= C <   K/2
@@ -96,92 +90,82 @@ enum flavorType determineFlavor (Short lgK, Long c) {
 
 // Note: the <= occurs with equality except SPARSE-vs-HYBRID for K = 2^4
 
-enum flavorType determineSketchFlavor (FM85 * self) {
+enum flavorType determineSketchFlavor(const FM85* self) {
   return (determineFlavor(self->lgK, self->numCoupons));
 }
 
-/*******************************************************/
-
-Short determineCorrectOffset (Short lgK, Long c) {
-  Long k = (1LL << lgK);
-  Long tmp = (c << 3) - 19 * k;        // 8C - 19K
+Short determineCorrectOffset(Short lgK, Long c) {
+  const Long k = 1LL << lgK;
+  const Long tmp = (c << 3) - 19 * k; // 8C - 19K
   if (tmp < 0) return ((Short) 0);
   return ((Short) (tmp >> (lgK + 3))); // tmp / 8K
 }
 
-/*******************************************************/
-
-FM85 * fm85Make (Short lgK) {
+FM85* fm85Make(Short lgK) {
   if (lgK < 4 || lgK > 26) throw std::invalid_argument("lgK must be between 4 and 26");
-  FM85 * self = (FM85 *) fm85alloc (sizeof(FM85));
+  FM85* self = (FM85*) fm85alloc(sizeof(FM85));
   if (self == NULL) throw std::bad_alloc();
   self->lgK = lgK;
-  self->isCompressed = 0;
-  self->mergeFlag = 0;
+  self->isCompressed = false;
+  self->mergeFlag = false;
 
   self->numCoupons = 0LL;
 
   self->windowOffset = 0;
-  self->slidingWindow = (U8 *) NULL;
+  self->slidingWindow = (U8*) NULL;
   self->surprisingValueTable = (u32Table *) NULL;
 
   self->numCompressedSurprisingValues = 0;
-  self->compressedSurprisingValues = (U32 *) NULL;
+  self->compressedSurprisingValues = (U32*) NULL;
   self->csvLength = 0;
-  self->compressedWindow = (U32 *) NULL;
+  self->compressedWindow = (U32*) NULL;
   self->cwLength = 0;
   
   self->firstInterestingColumn = 0;
 
-  Long k = (1LL << self->lgK);
+  const Long k = 1LL << self->lgK;
 
   self->kxp = ((double) k) * 1.0;
   self->hipEstAccum = 0.0;
   self->hipErrAccum = 0.0;
 
-  return (self);
+  return self;
 }
 
-/*******************************************************/
-
-FM85 * fm85Copy (FM85 * self) {
+FM85* fm85Copy(const FM85* self) {
   if (self == NULL) throw std::invalid_argument("self is null");
-  FM85 * newObj = (FM85 *) shallowCopy ((void *) self, sizeof(FM85));
+  FM85* newObj = (FM85*) shallowCopy((void*) self, sizeof(FM85));
 
   if (self->surprisingValueTable != NULL) {
-    newObj->surprisingValueTable = u32TableCopy (self->surprisingValueTable);
+    newObj->surprisingValueTable = u32TableCopy(self->surprisingValueTable);
   }
   if (self->slidingWindow != NULL) {
-    Long k = (1LL << self->lgK);
-    size_t theSize = k * sizeof(U8);
-    newObj->slidingWindow = (U8 *) shallowCopy ((void *) self->slidingWindow, theSize);
+    const Long k = 1LL << self->lgK;
+    const size_t theSize = k * sizeof(U8);
+    newObj->slidingWindow = (U8*) shallowCopy((void*) self->slidingWindow, theSize);
   }
   if (self->compressedSurprisingValues != NULL) {
-    size_t theSize = self->csvLength * sizeof(U32);
-    newObj->compressedSurprisingValues = (U32 *) shallowCopy ((void *) self->compressedSurprisingValues, theSize);
+    const size_t theSize = self->csvLength * sizeof(U32);
+    newObj->compressedSurprisingValues = (U32 *) shallowCopy((void*) self->compressedSurprisingValues, theSize);
   }
   if (self->compressedWindow != NULL) {
-    size_t theSize = self->cwLength * sizeof(U32);
-    newObj->compressedWindow = (U32 *) shallowCopy ((void *) self->compressedWindow, theSize);
+    const size_t theSize = self->cwLength * sizeof(U32);
+    newObj->compressedWindow = (U32 *) shallowCopy((void*) self->compressedWindow, theSize);
   }
 
-  return (newObj);
+  return newObj;
 }
 
-/*******************************************************/
-
-void fm85Free (FM85 * self) {
+void fm85Free(FM85* self) {
   if (self != NULL) {
-    if (self->surprisingValueTable != NULL) u32TableFree (self->surprisingValueTable);
-    if (self->slidingWindow != NULL) fm85free (self->slidingWindow);
-    if (self->compressedSurprisingValues != NULL) fm85free (self->compressedSurprisingValues);
-    if (self->compressedWindow != NULL) fm85free (self->compressedWindow);
-    fm85free (self);
+    if (self->surprisingValueTable != NULL) u32TableFree(self->surprisingValueTable);
+    if (self->slidingWindow != NULL) fm85free(self->slidingWindow);
+    if (self->compressedSurprisingValues != NULL) fm85free(self->compressedSurprisingValues);
+    if (self->compressedWindow != NULL) fm85free(self->compressedWindow);
+    fm85free(self);
   }
 }
 
-/*******************************************************/
-
 // Warning: this is called in several places, including during the
 // transitional moments during which sketch invariants involving
 // flavor and offset are out of whack and in fact we are re-imposing
@@ -191,40 +175,39 @@ void fm85Free (FM85 * self) {
 
 // This produces a full-size k-by-64 bit matrix from any Live sketch.
 
-U64 * bitMatrixOfSketch (FM85 * self) {
-  if (self->isCompressed != 0) throw std::logic_error("isCompressed != 0");
-  Long k = (1LL << self->lgK);
-  Short offset = self->windowOffset;
+U64* bitMatrixOfSketch(const FM85* self) {
+  if (self->isCompressed) throw std::logic_error("must not be compressed");
+  const Long k = 1LL << self->lgK;
+  const Short offset = self->windowOffset;
   if (offset < 0 || offset > 56) throw std::logic_error("offset < 0 || offset > 56");
-  Long i = 0;
-  U64 * matrix = (U64 *) fm85alloc ((size_t) (k * sizeof(U64)));
+  U64* matrix = (U64*) fm85alloc((size_t) (k * sizeof(U64)));
   if (matrix == NULL) throw std::bad_alloc();
 
-// Fill the matrix with default rows in which the "early zone" is filled with ones.
-// This is essential for the routine's O(k) time cost (as opposed to O(C)).
-  U64 defaultRow = (1ULL << offset) - 1;
-  for (i = 0; i < k; i++) { matrix[i] = defaultRow; } 
+  // Fill the matrix with default rows in which the "early zone" is filled with ones.
+  // This is essential for the routine's O(k) time cost (as opposed to O(C)).
+  const U64 defaultRow = (1ULL << offset) - 1;
+  for (Long i = 0; i < k; i++) { matrix[i] = defaultRow; }
 
   if (self->numCoupons == 0) { 
     return (matrix); // Returning a matrix of zeros rather than NULL.
   }
 
-  U8 * window = self->slidingWindow;
+  U8* window = self->slidingWindow;
   if (window != NULL) { // In other words, we are in window mode, not sparse mode.
-    for (i = 0; i < k; i++) { // set the window bits, trusting the sketch's current offset.
+    for (Long i = 0; i < k; i++) { // set the window bits, trusting the sketch's current offset.
       matrix[i] |= (((U64) window[i]) << offset);
     }
   }
 
-  u32Table * table = self->surprisingValueTable;
+  u32Table* table = self->surprisingValueTable;
   if (table == NULL) throw std::logic_error("table == NULL");
-  U32 * slots = table->slots;
-  Long numSlots = (1LL << table->lgSize); 
-  for (i = 0; i < numSlots; i++) { 
-    U32 rowCol = slots[i];
+  U32* slots = table->slots;
+  const Long numSlots = 1LL << table->lgSize;
+  for (Long i = 0; i < numSlots; i++) {
+    const U32 rowCol = slots[i];
     if (rowCol != ALL32BITS) {
-      Short col = (Short) (rowCol & 63);
-      Long  row = (Long)  (rowCol >> 6);
+      const Short col = (Short) (rowCol & 63);
+      const Long  row = (Long)  (rowCol >> 6);
       // Flip the specified matrix bit from its default value.
       // In the "early" zone the bit changes from 1 to 0.
       // In the "late" zone the bit changes from 0 to 1.
@@ -232,132 +215,111 @@ U64 * bitMatrixOfSketch (FM85 * self) {
     }
   }
 
-  return(matrix);
+  return matrix;
 }
 
-/*******************************************************/
-
-void promoteEmptyToSparse (FM85 * self) {
+void promoteEmptyToSparse(FM85* self) {
   if (self->numCoupons != 0) throw std::logic_error("numCoupons != 0");
   if (self->surprisingValueTable != NULL) throw std::logic_error("surprisingValueTable != NULL");
-  self->surprisingValueTable = u32TableMake (2, 6 + self->lgK);
+  self->surprisingValueTable = u32TableMake(2, 6 + self->lgK);
 }
 
-/*******************************************************/
 // In terms of flavor, this promotes SPARSE to HYBRID.
-
-void promoteSparseToWindowed (FM85 * self) {
-  Long k = (1LL << self->lgK);
-  Long c32 = self->numCoupons << 5;
+void promoteSparseToWindowed(FM85* self) {
+  const Long k = 1LL << self->lgK;
+  const Long c32 = self->numCoupons << 5;
   if (!(c32 == 3 * k || (self->lgK == 4 && c32 > 3 * k))) throw std::logic_error("wrong c32");
-  Long i;
 
-  U8 * window = (U8 *) fm85alloc ((size_t) (k * sizeof(U8)));
+  U8* window = (U8*) fm85alloc((size_t) (k * sizeof(U8)));
   if (window == NULL) throw std::bad_alloc();
-  memset ((void *) window,0, (size_t) k); // zero the memory (because we will be OR'ing into it)
+  memset((void*) window, 0, (size_t) k); // zero the memory (because we will be OR'ing into it)
 
-  u32Table * newTable = u32TableMake (2, 6 + self->lgK);
+  u32Table* newTable = u32TableMake(2, 6 + self->lgK);
 
-  u32Table * oldTable = self->surprisingValueTable;
-  U32 * oldSlots = oldTable->slots;
-  Long oldNumSlots = (1LL << oldTable->lgSize); 
+  u32Table* oldTable = self->surprisingValueTable;
+  U32* oldSlots = oldTable->slots;
+  const Long oldNumSlots = 1LL << oldTable->lgSize;
 
   if (self->windowOffset != 0) throw std::logic_error("windowOffset != 0");
 
-  for (i = 0; i < oldNumSlots; i++) { 
-    U32 rowCol = oldSlots[i];
+  for (Long i = 0; i < oldNumSlots; i++) {
+    const U32 rowCol = oldSlots[i];
     if (rowCol != ALL32BITS) {
-      Short col = (Short) (rowCol & 63);
+      const Short col = (Short) (rowCol & 63);
       if (col < 8) {
-        Long row = (Long) (rowCol >> 6);
+        const Long row = (Long) (rowCol >> 6);
         window[row] |= (1 << col);
-      }
-      else {
+      } else {
         // cannot use u32TableMustInsert(), because it doesn't provide for growth
-        Boolean isNovel = u32TableMaybeInsert (newTable, rowCol);
-        if (isNovel != 1) throw std::logic_error("isNovel != 1");
+        const bool isNovel = u32TableMaybeInsert(newTable, rowCol);
+        if (!isNovel) throw std::logic_error("isNovel != true");
       }
     }
   }
-  //  fprintf (stderr, "Number of surprising values dropped from %lld to %lld\n", oldTable->numItems, newTable->numItems);
 
   if (self->slidingWindow != NULL) throw std::logic_error("slidingWindow != NULL");
   self->slidingWindow = window;
-  
+
   self->surprisingValueTable = newTable;
-  u32TableFree (oldTable);
+  u32TableFree(oldTable);
 }
 
-/*******************************************************/
 // The KXP register is a double with roughly 50 bits of precision, but
 // it might need roughly 90 bits to track the value with perfect accuracy.
 // Therefore we recalculate KXP occasionally from the sketch's full bitmatrix
 // so that it will reflect changes that were previously outside the mantissa.
+void refreshKXP(FM85* self, U64* bitMatrix) {
+  const Long k = 1LL << self->lgK;
 
-void refreshKXP (FM85 * self, U64 * bitMatrix) {
-  Long k = (1LL << self->lgK);
-  Long i;
-  Short j;
-
- // for improved numerical accuracy, we separately sum the bytes of the U64's
-  double byteSums [8]; // allocating on the stack
+  // for improved numerical accuracy, we separately sum the bytes of the U64's
+  double byteSums[8]; // allocating on the stack
 
-  for (j = 0; j < 8; j++) { byteSums[j] = 0.0; }
+  for (Short j = 0; j < 8; j++) { byteSums[j] = 0.0; }
 
-  for (i = 0; i < k; i++) {
+  for (Long i = 0; i < k; i++) {
     U64 word = bitMatrix[i];
-    for (j = 0; j < 8; j++) { 
-      U8 byte = word & 0xff;
+    for (Short j = 0; j < 8; j++) {
+      const U8 byte = word & 0xff;
       byteSums[j] += kxpByteLookup[byte];
       word >>= 8;
     }
   }
 
   double total = 0.0;
-  for (j = 7; j >= 0; j--) { // the reverse order is important
-    double factor = invPow2Tab[8*j]; // pow (256.0, (-1.0 * ((double) j)));
+  for (Short j = 7; j >= 0; j--) { // the reverse order is important
+    double factor = invPow2Tab[8 * j]; // pow (256.0, (-1.0 * ((double) j)));
     total += factor * byteSums[j];
   }
 
-  //  fprintf (stderr, "%.3f\n", ((double) self->numCoupons) / k);
-  //  fprintf (stderr, "%.19g\told value of KXP\n", self->kxp);
-  //  fprintf (stderr, "%.19g\tnew value of KXP\n", total);
-  //  fflush (stderr);
-
   self->kxp = total;
-
 }
 
-
-/*******************************************************/
 // this moves the sliding window
-
-void modifyOffset (FM85 * self, Short newOffset) {
+void modifyOffset(FM85* self, Short newOffset) {
   if (newOffset < 0 || newOffset > 56) throw std::logic_error("newOffset < 0 || newOffset > 56");
   if (newOffset != self->windowOffset + 1) throw std::logic_error("newOffset != windowOffset + 1");
-  if (newOffset != determineCorrectOffset (self->lgK, self->numCoupons)) throw std::logic_error("newOffset is wrong");
+  if (newOffset != determineCorrectOffset(self->lgK, self->numCoupons)) throw std::logic_error("newOffset is wrong");
 
   if (self->slidingWindow == NULL) throw std::logic_error("slidingWindow == NULL");
   if (self->surprisingValueTable == NULL) throw std::logic_error("surprisingValueTable == NULL");
-  Long k = (1LL << self->lgK);
+  const Long k = 1LL << self->lgK;
 
   // Construct the full-sized bit matrix that corresponds to the sketch
-  U64 * bitMatrix = bitMatrixOfSketch (self);
+  U64* bitMatrix = bitMatrixOfSketch(self);
   if (bitMatrix == NULL) throw std::logic_error("bitMatrix == NULL");
 
   // refresh the KXP register on every 8th window shift.
-  if ((newOffset & 0x7) == 0) { refreshKXP (self, bitMatrix); }
+  if ((newOffset & 0x7) == 0) { refreshKXP(self, bitMatrix); }
 
-  u32TableClear (self->surprisingValueTable); // the new number of surprises will be about the same
+  u32TableClear(self->surprisingValueTable); // the new number of surprises will be about the same
 
-  u32Table * table = self->surprisingValueTable;
-  U8 * window = self->slidingWindow;
-  U64 maskForClearingWindow = (0xffULL << newOffset) ^ ALL64BITS;
-  U64 maskForFlippingEarlyZone = (1ULL << newOffset) - 1;
+  u32Table* table = self->surprisingValueTable;
+  U8* window = self->slidingWindow;
+  const U64 maskForClearingWindow = (0xffULL << newOffset) ^ ALL64BITS;
+  const U64 maskForFlippingEarlyZone = (1ULL << newOffset) - 1;
   U64 allSurprisesORed = 0;
-  Long i = 0;
 
-  for (i = 0; i < k; i++) {
+  for (Long i = 0; i < k; i++) {
     U64 pattern = bitMatrix[i];
     window[i] = (U8) ((pattern >> newOffset) & 0xff);
     pattern &= maskForClearingWindow;
@@ -366,125 +328,103 @@ void modifyOffset (FM85 * self, Short newOffset) {
     pattern ^= maskForFlippingEarlyZone; 
     allSurprisesORed |= pattern; // a cheap way to recalculate firstInterestingColumn
     while (pattern != 0) {
-      Short col = countTrailingZerosInUnsignedLong (pattern);
+      const Short col = countTrailingZerosInUnsignedLong(pattern);
       pattern = pattern ^ (1ULL << col); // erase the 1.
-      U32 rowCol = (i << 6) | col;
-      Boolean isNovel = u32TableMaybeInsert (table, rowCol);
-      if (isNovel != 1) throw std::logic_error("isNovel != 1");
+      const U32 rowCol = (i << 6) | col;
+      const bool isNovel = u32TableMaybeInsert(table, rowCol);
+      if (!isNovel) throw std::logic_error("isNovel != true");
     }
   }
 
-  fm85free (bitMatrix);
+  fm85free(bitMatrix);
   self->windowOffset = newOffset;
 
-  self->firstInterestingColumn = countTrailingZerosInUnsignedLong (allSurprisesORed);
+  self->firstInterestingColumn = countTrailingZerosInUnsignedLong(allSurprisesORed);
   if (self->firstInterestingColumn > newOffset) self->firstInterestingColumn = newOffset; // corner case
 }
 
-
-  //  fprintf (stderr, "Changed the offset from %d to %d because C = %lld;", 
-  //	  (int) self->windowOffset, (int) newOffset, self->numCoupons); 
-  //  fprintf (stderr, "\t[%d]\n", (int) self->firstInterestingColumn);
-  // fflush (stderr);
-
-
-/*******************************************************/
 // Call this whenever a new coupon has been collected.
-
-void updateHIP (FM85 * self, Short rowCol) {
-  Long k = (1LL << self->lgK);
-  Short col = (Short) (rowCol & 63);  
-  double oneOverP = ((double) k) / self->kxp;
+void updateHIP(FM85* self, Short rowCol) {
+  const Long k = 1LL << self->lgK;
+  const Short col = (Short) (rowCol & 63);
+  const double oneOverP = ((double) k) / self->kxp;
   self->hipEstAccum += oneOverP;
   self->hipErrAccum += ((oneOverP * oneOverP) - oneOverP);
   self->kxp -= invPow2Tab[col+1]; // notice the "+1"
 }
 
-/*******************************************************/
-
-double getHIPEstimate (FM85 * self) {
+double getHIPEstimate(const FM85* self) {
   if (self->mergeFlag != 0) throw std::logic_error("tried to get HIP estimate of merged sketch");
   return (self->hipEstAccum);
 }
 
-/*******************************************************/
-
-void updateSparse (FM85 * self, U32 rowCol) {
-  Long k = (1LL << self->lgK);
-  Long c32pre = self->numCoupons << 5;
-  if (c32pre >= 3*k) throw std::logic_error("c32pre >= 3*k"); // C < 3K/32, in other words flavor == SPARSE
+void updateSparse(FM85* self, U32 rowCol) {
+  const Long k = 1LL << self->lgK;
+  const Long c32pre = self->numCoupons << 5;
+  if (c32pre >= 3 * k) throw std::logic_error("c32pre >= 3 * k"); // C < 3K/32, in other words flavor == SPARSE
   if (self->surprisingValueTable == NULL) throw std::logic_error("surprisingValueTable == NULL");
-  Boolean isNovel = u32TableMaybeInsert (self->surprisingValueTable, rowCol);
+  bool isNovel = u32TableMaybeInsert(self->surprisingValueTable, rowCol);
   if (isNovel) {
     self->numCoupons += 1;
-    updateHIP (self, rowCol);
-    Long c32post = self->numCoupons << 5;
-    if (c32post >= 3*k) { promoteSparseToWindowed (self); } // C >= 3K/32
+    updateHIP(self, rowCol);
+    const Long c32post = self->numCoupons << 5;
+    if (c32post >= 3 * k) { promoteSparseToWindowed(self); } // C >= 3K/32
   }
 }
 
-/*******************************************************/
-
 // the flavor is HYBRID, PINNED, or SLIDING.
-void updateWindowed (FM85 * self, U32 rowCol) {
+void updateWindowed(FM85* self, U32 rowCol) {
   if (self->windowOffset < 0 || self->windowOffset > 56) throw std::logic_error("windowOffset < 0 || windowOffset > 56");
-  Long k = (1LL << self->lgK);
-  Long c32pre = self->numCoupons << 5;
-  if (c32pre < 3*k) throw std::logic_error("c32pre < 3*k"); // C < 3K/32, in other words flavor >= HYBRID
-  Long c8pre = self->numCoupons << 3;
-  Long w8pre = ((Long) self->windowOffset) << 3;
+  const Long k = 1LL << self->lgK;
+  const Long c32pre = self->numCoupons << 5;
+  if (c32pre < 3 * k) throw std::logic_error("c32pre < 3 * k"); // C < 3K/32, in other words flavor >= HYBRID
+  const Long c8pre = self->numCoupons << 3;
+  const Long w8pre = ((Long) self->windowOffset) << 3;
   if (c8pre >= (27 + w8pre) * k) throw std::logic_error("c8pre is wrong"); // C < (K * 27/8) + (K * windowOffset)
 
-  Boolean isNovel = 0;
+  bool isNovel = false;
   Short col = (Short) (rowCol & 63);
 
   if (col < self->windowOffset) { // track the surprising 0's "before" the window
-    isNovel = u32TableMaybeDelete (self->surprisingValueTable, rowCol); // inverted logic
-  }
-  else if (col < self->windowOffset + 8) { // track the 8 bits inside the window
+    isNovel = u32TableMaybeDelete(self->surprisingValueTable, rowCol); // inverted logic
+  } else if (col < self->windowOffset + 8) { // track the 8 bits inside the window
     if (col < self->windowOffset) throw std::logic_error("col < windowOffset");
-    Long row = (Long) (rowCol >> 6);
-    U8 oldBits = self->slidingWindow[row];
-    U8 newBits = oldBits | (1 << (col - self->windowOffset));
+    const Long row = (Long) (rowCol >> 6);
+    const U8 oldBits = self->slidingWindow[row];
+    const U8 newBits = oldBits | (1 << (col - self->windowOffset));
     if (newBits != oldBits) {
       self->slidingWindow[row] = newBits;      
-      isNovel = 1;
+      isNovel = true;
     }
-  }
-  else { // track the surprising 1's "after" the window
+  } else { // track the surprising 1's "after" the window
     if (col < self->windowOffset + 8) throw std::logic_error("col < windowOffset + 8");
-    isNovel = u32TableMaybeInsert (self->surprisingValueTable, rowCol); // normal logic
+    isNovel = u32TableMaybeInsert(self->surprisingValueTable, rowCol); // normal logic
   }
 
   if (isNovel) {
     self->numCoupons += 1;
-    updateHIP (self, rowCol);
-    Long c8post = self->numCoupons << 3;
+    updateHIP(self, rowCol);
+    const Long c8post = self->numCoupons << 3;
     if (c8post >= (27 + w8pre) * k) { 
-      modifyOffset (self, self->windowOffset + 1);
+      modifyOffset(self, self->windowOffset + 1);
       if (self->windowOffset < 1 || self->windowOffset > 56) throw std::logic_error("windowOffset < 1 || windowOffset > 56");
-      Long w8post = ((Long) self->windowOffset) << 3;
+      const Long w8post = ((Long) self->windowOffset) << 3;
       if (c8post >= (27 + w8post) * k) throw std::logic_error("c8pre is wrong"); // C < (K * 27/8) + (K * windowOffset)
     }
   }
 }
 
-/*******************************************************/
-
-void fm85RowColUpdate (FM85 * self, U32 rowCol) {
-  Short col = (Short) (rowCol & 63);
+void fm85RowColUpdate(FM85* self, U32 rowCol) {
+  const Short col = (Short) (rowCol & 63);
   if (col < self->firstInterestingColumn) { return; } // important speed optimization
   if (self->isCompressed) std::logic_error("Cannot update a compressed sketch");
-  Long c = self->numCoupons;
-  if (c == 0) { promoteEmptyToSparse (self); }
-  Long k = (1LL << self->lgK);
-  if ((c << 5) < 3*k) { updateSparse (self, rowCol); }
-  else { updateWindowed (self, rowCol); }
+  const Long c = self->numCoupons;
+  if (c == 0) { promoteEmptyToSparse(self); }
+  const Long k = 1LL << self->lgK;
+  if ((c << 5) < 3 * k) { updateSparse(self, rowCol); }
+  else { updateWindowed(self, rowCol); }
 }
 
-
-void fm85Update (FM85 * self, U64 hash0, U64 hash1) {
-  U32 rowCol = rowColFromTwoHashes (hash0, hash1, self->lgK);
-  fm85RowColUpdate (self, rowCol);
+void fm85Update(FM85* self, U64 hash0, U64 hash1) {
+  fm85RowColUpdate(self, rowColFromTwoHashes(hash0, hash1, self->lgK));
 }
-
diff --git a/cpc/src/fm85Compression.cpp b/cpc/src/fm85Compression.cpp
index 50e8640..dd98274 100644
--- a/cpc/src/fm85Compression.cpp
+++ b/cpc/src/fm85Compression.cpp
@@ -25,132 +25,101 @@
 #include <stdexcept>
 #include <new>
 
-/*********************************/
 // The following material is in a separate file because it is so big.
-
 #include "compressionData.data"
 
-/***************************************************************/
-/***************************************************************/
 // Intentionally uses malloc instead of the custom allocator
 // since it is for global initialization, not for allocating instances.
-U8 * makeInversePermutation (U8 * permu, int length) {
-  U8 * inverse = (U8 *) malloc (((size_t) length) * sizeof(U8));
+U8* makeInversePermutation(const U8* permu, int length) {
+  U8* inverse = (U8*) malloc (((size_t) length) * sizeof(U8));
   if (inverse == NULL) throw std::bad_alloc();
-  int i;
-  for (i = 0; i < length; i++) {
+  for (int i = 0; i < length; i++) {
     inverse[permu[i]] = i;
   }
-  for (i = 0; i < length; i++) {
+  for (int i = 0; i < length; i++) {
     if (permu[inverse[i]] != i) throw std::logic_error("inverse permutation error");
   }
   return inverse;
 }
 
-/***************************************************************/
-/***************************************************************/
-
 /* Given an encoding table that maps unsigned bytes to codewords 
    of length at most 12, this builds a size-4096 decoding table */
 
 // The second argument is typically 256, but can be other values such as 65.
 // Intentionally uses malloc instead of the custom allocator
 // since it is for global initialization, not for allocating instances.
-U16 * makeDecodingTable (U16 * encodingTable, int numByteValues) { 
-  int byteValue;
-  U16 * decodingTable = (U16 *) malloc (((size_t) 4096) * sizeof(U16));
+U16* makeDecodingTable(const U16* encodingTable, int numByteValues) {
+  U16* decodingTable = (U16*) malloc(((size_t) 4096) * sizeof(U16));
   if (decodingTable == NULL) throw std::bad_alloc();
-  for (byteValue=0; byteValue < numByteValues; byteValue++) {
-    int encodingEntry = encodingTable [byteValue];
-    int codeValue = encodingEntry & 0xfff;
-    int codeLength = encodingEntry >> 12;    
-    int decodingEntry = (codeLength << 8) | byteValue;
-    int garbageLength = 12 - codeLength;
-    int numCopies = 1 << garbageLength;
-    int garbageBits;
-    for (garbageBits = 0; garbageBits < numCopies; garbageBits++) {
-      int extendedCodeValue = codeValue | (garbageBits << codeLength);
+  for (int byteValue = 0; byteValue < numByteValues; byteValue++) {
+    const int encodingEntry = encodingTable [byteValue];
+    const int codeValue = encodingEntry & 0xfff;
+    const int codeLength = encodingEntry >> 12;
+    const int decodingEntry = (codeLength << 8) | byteValue;
+    const int garbageLength = 12 - codeLength;
+    const int numCopies = 1 << garbageLength;
+    for (int garbageBits = 0; garbageBits < numCopies; garbageBits++) {
+      const int extendedCodeValue = codeValue | (garbageBits << codeLength);
       decodingTable[extendedCodeValue & 0xfff] = decodingEntry;
     }
   }
-  return (decodingTable);
+  return decodingTable;
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void validateDecodingTable (U16 * decodingTable, U16 * encodingTable) {
-  int decodeThis;
-  
-  for (decodeThis = 0; decodeThis < 4096; decodeThis++) {
-
-    int tmpD = decodingTable[decodeThis];
-    int decodedByte   = tmpD & 0xff;
-    int decodedLength = tmpD >> 8;
+void validateDecodingTable(const U16* decodingTable, const U16* encodingTable) {
+  for (int decodeThis = 0; decodeThis < 4096; decodeThis++) {
+    const int tmpD = decodingTable[decodeThis];
+    const int decodedByte   = tmpD & 0xff;
+    const int decodedLength = tmpD >> 8;
 
-    int tmpE = encodingTable[decodedByte];
-    int encodedBitpattern = tmpE & 0xfff;
-    int encodedLength = tmpE >> 12;
-
-    // encodedBitpattern++; // uncomment this line to test the test
-    // encodedLength++;     // uncomment this line to test the test
+    const int tmpE = encodingTable[decodedByte];
+    const int encodedBitpattern = tmpE & 0xfff;
+    const int encodedLength = tmpE >> 12;
 
     if (decodedLength != encodedLength) throw std::logic_error("decoded length error");
     if (encodedBitpattern != (decodeThis & ((1 << decodedLength) - 1))) throw std::logic_error("bit pattern error");
   }
-  
 }
 
-/***************************************************************/
-/***************************************************************/
+void makeTheDecodingTables() {
+  lengthLimitedUnaryDecodingTable65 = makeDecodingTable(lengthLimitedUnaryEncodingTable65, 65);
+  validateDecodingTable(lengthLimitedUnaryDecodingTable65, lengthLimitedUnaryEncodingTable65);
 
-void makeTheDecodingTables (void) {
-  int i;
-  lengthLimitedUnaryDecodingTable65 = makeDecodingTable (lengthLimitedUnaryEncodingTable65, 65);
-  validateDecodingTable (lengthLimitedUnaryDecodingTable65, lengthLimitedUnaryEncodingTable65);
-
-  for (i = 0; i < (16 + 6); i++) {
+  for (int i = 0; i < (16 + 6); i++) {
     decodingTablesForHighEntropyByte[i] = makeDecodingTable(encodingTablesForHighEntropyByte[i], 256);
-    validateDecodingTable (decodingTablesForHighEntropyByte[i], encodingTablesForHighEntropyByte[i]);
+    validateDecodingTable(decodingTablesForHighEntropyByte[i], encodingTablesForHighEntropyByte[i]);
   }
 
-  for (i = 0; i < 16; i++) {
-    columnPermutationsForDecoding[i] = makeInversePermutation(columnPermutationsForEncoding[i],56);
+  for (int i = 0; i < 16; i++) {
+    columnPermutationsForDecoding[i] = makeInversePermutation(columnPermutationsForEncoding[i], 56);
   }
-
-  //  fprintf (stderr, "tables okay\n"); fflush (stderr);
 }
 
-void freeTheDecodingTables (void) {
-  int i;
+void freeTheDecodingTables() {
   free(lengthLimitedUnaryDecodingTable65);
-  for (i = 0; i < (16 + 6); i++) {
+  for (int i = 0; i < (16 + 6); i++) {
     free(decodingTablesForHighEntropyByte[i]);
   }
-  for (i = 0; i < 16; i++) {
+  for (int i = 0; i < 16; i++) {
     free(columnPermutationsForDecoding[i]);
   }
 }
 
-/***************************************************************/
-/***************************************************************/
-
-static inline void writeUnary (U32 * compressedWords, 
-			       Long * nextWordIndexPtr,
-			       U64 * bitbufPtr, 
-			       int * bufbitsPtr,
-			       Long the_value)
+static inline void writeUnary(
+    U32* compressedWords,
+    Long* nextWordIndexPtr,
+    U64* bitbufPtr,
+    int* bufbitsPtr,
+    Long the_value)
 {
-  //  printf("%ld writing\n", the_value);
-
   if (compressedWords == NULL) throw std::logic_error("compressedWords == NULL");
   if (nextWordIndexPtr == NULL) throw std::logic_error("nextWordIndexPtr == NULL");
   if (bitbufPtr == NULL) throw std::logic_error("bitbufPtr == NULL");
   if (bufbitsPtr == NULL) throw std::logic_error("bufbitsPtr == NULL");
 
   Long nextWordIndex = *nextWordIndexPtr;
-  U64  bitbuf  = *bitbufPtr;
-  int  bufbits = *bufbitsPtr;
+  U64 bitbuf  = *bitbufPtr;
+  int bufbits = *bufbitsPtr;
   
   if (bufbits < 0 || bufbits > 31) throw std::out_of_range("bufbits out of range");
 
@@ -161,29 +130,25 @@ static inline void writeUnary (U32 * compressedWords,
     // Here we output 16 zeros, but we don't need to physically write them into bitbuf
     // because it already contains zeros in that region.
     bufbits += 16; // Record the fact that 16 bits of output have occurred.
-    MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+    MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
   }
 
   if (remaining < 0 || remaining > 15) throw std::out_of_range("remaining out of range");
 
-  U64 theUnaryCode = 1ULL << remaining;
+  const U64 theUnaryCode = 1ULL << remaining;
   bitbuf |= theUnaryCode << bufbits;
   bufbits += (1 + remaining);
-  MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+  MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
   
   *nextWordIndexPtr = nextWordIndex;
   *bitbufPtr  = bitbuf;
   *bufbitsPtr = bufbits;
-
 }
 
-/***************************************************************/
-/***************************************************************/
-
-static inline Long readUnary (U32 * compressedWords, 
-			      Long * nextWordIndexPtr,
-			      U64 * bitbufPtr, 
-			      int * bufbitsPtr)
+static inline Long readUnary(const U32* compressedWords,
+			      Long* nextWordIndexPtr,
+			      U64* bitbufPtr,
+			      int* bufbitsPtr)
 {
   if (compressedWords == NULL) throw std::logic_error("compressedWords == NULL");
   if (nextWordIndexPtr == NULL) throw std::logic_error("nextWordIndexPtr == NULL");
@@ -195,17 +160,12 @@ static inline Long readUnary (U32 * compressedWords,
   int  bufbits = *bufbitsPtr;
   Long subTotal = 0;
 
- readUnaryLoop:
-
-  MAYBE_FILL_BITBUF(compressedWords,nextWordIndex,8); // ensure 8 bits in bit buffer
+  readUnaryLoop:
 
-  //  if (bufbits < 8) {  // Prepare for an 8-bit peek into the bitstream.
-  //    bitbuf |= (((U64) compressedWords[nextWordIndex++]) << bufbits);
-  //    bufbits += 32;
-  //  }
+  MAYBE_FILL_BITBUF(compressedWords, nextWordIndex, 8); // ensure 8 bits in bit buffer
 
-  int peek8 = bitbuf & 0xffULL; // These 8 bits include either all or part of the Unary codeword.
-  int trailingZeros = byteTrailingZerosTable[peek8];
+  const int peek8 = bitbuf & 0xffULL; // These 8 bits include either all or part of the Unary codeword.
+  const int trailingZeros = byteTrailingZerosTable[peek8];
 
   if (trailingZeros < 0 || trailingZeros > 8) throw std::out_of_range("trailingZeros out of range");
 
@@ -216,27 +176,21 @@ static inline Long readUnary (U32 * compressedWords,
     goto readUnaryLoop;
   }
 
-  bufbits -= (1+trailingZeros);
-  bitbuf >>= (1+trailingZeros);
+  bufbits -= (1 + trailingZeros);
+  bitbuf >>= (1 + trailingZeros);
   *nextWordIndexPtr = nextWordIndex;
   *bitbufPtr  = bitbuf;
   *bufbitsPtr = bufbits;
 
-  //  printf("%ld READING\n", subTotal+trailingZeros); fflush (stdout);
-
-  return (subTotal+trailingZeros);
-
+  return subTotal + trailingZeros;
 }
 
-/***************************************************************/
-/***************************************************************/
 // This returns the number of compressedWords that were actually used.
 // It is the caller's responsibility to ensure that the compressedWords array is long enough.
-
-Long lowLevelCompressBytes (U8 * byteArray,          // input
-			    Long numBytesToEncode,   // input
-			    U16 * encodingTable,     // input 
-			    U32 * compressedWords) { // output
+Long lowLevelCompressBytes(const U8* byteArray, // input
+    Long numBytesToEncode,  // input
+    const U16* encodingTable,     // input
+    U32* compressedWords) { // output
 
   Long byteIndex = 0;
   Long nextWordIndex = 0;
@@ -245,17 +199,17 @@ Long lowLevelCompressBytes (U8 * byteArray,          // input
   int bufbits = 0; /* number of bits currently in bitbuf; must be between 0 and 31 */
 
   for (byteIndex = 0; byteIndex < numBytesToEncode; byteIndex++) {
-    U64 codeInfo = (U64) encodingTable[byteArray[byteIndex]];
-    U64 codeVal = codeInfo & 0xfff;
-    int codeLen = codeInfo >> 12;    
+    const U64 codeInfo = (U64) encodingTable[byteArray[byteIndex]];
+    const U64 codeVal = codeInfo & 0xfff;
+    const int codeLen = codeInfo >> 12;
     bitbuf |= (codeVal << bufbits);
     bufbits += codeLen;
-    MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+    MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
   }
 
-// Pad the bitstream with 11 zero-bits so that the decompressor's 12-bit peek can't overrun its input.
+  // Pad the bitstream with 11 zero-bits so that the decompressor's 12-bit peek can't overrun its input.
   bufbits += 11; 
-  MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+  MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
 
   if (bufbits > 0) { // We are done encoding now, so we flush the bit buffer.
     if (bufbits >= 32) throw std::logic_error("bufbits >= 32");
@@ -265,39 +219,28 @@ Long lowLevelCompressBytes (U8 * byteArray,          // input
   return nextWordIndex;
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void lowLevelUncompressBytes (U8 * byteArray,          // output
-			      Long numBytesToDecode,   // input (but refers to the output)
-			      U16 * decodingTable,     // input
-			      U32 * compressedWords,   // input
-			      Long numCompressedWords) { // input
+void lowLevelUncompressBytes(U8* byteArray, // output
+    Long numBytesToDecode, // input (but refers to the output)
+    const U16* decodingTable, // input
+    const U32* compressedWords, // input
+    Long numCompressedWords) { // input
   Long byteIndex = 0;
   Long wordIndex = 0;  
 
   U64 bitbuf = 0;
   int bufbits = 0;
 
-  //  printf ("Y\n"); fflush (stdout);
-
   if (byteArray == NULL) throw std::logic_error("byteArray == NULL");
   if (decodingTable == NULL) throw std::logic_error("decodingTable == NULL");
   if (compressedWords == NULL) throw std::logic_error("compressedWords == NULL");
 
   for (byteIndex = 0; byteIndex < numBytesToDecode; byteIndex++) {
+    MAYBE_FILL_BITBUF(compressedWords, wordIndex, 12); // ensure 12 bits in bit buffer
 
-    //    if (bufbits < 12) { // Prepare for a 12-bit peek into the bitstream.
-    //      bitbuf |= (((U64) compressedWords[wordIndex++]) << bufbits);
-    //      bufbits += 32;
-    //    }
-
-    MAYBE_FILL_BITBUF(compressedWords,wordIndex,12); // ensure 12 bits in bit buffer
-
-    int peek12 = bitbuf & 0xfffULL; // These 12 bits will include an entire Huffman codeword.
-    int lookup = decodingTable[peek12];
-    int codeWordLength = lookup >> 8;
-    U8 decodedByte = lookup & 0xff;
+    const int peek12 = bitbuf & 0xfffULL; // These 12 bits will include an entire Huffman codeword.
+    const int lookup = decodingTable[peek12];
+    const int codeWordLength = lookup >> 8;
+    const U8 decodedByte = lookup & 0xff;
     byteArray[byteIndex] = decodedByte;
     bitbuf >>= codeWordLength;
     bufbits -= codeWordLength;
@@ -305,71 +248,64 @@ void lowLevelUncompressBytes (U8 * byteArray,          // output
   // Buffer over-run should be impossible unless there is a bug.
   // However, we might as well check here.
   if (wordIndex > numCompressedWords) throw std::logic_error("wordIndex > numCompressedWords");
-
-  //  printf ("X\n"); fflush (stdout);
-
-  return;
 }
 
-/***************************************************************/
-/***************************************************************/
-
 // Here "pairs" refers to row/column pairs that specify 
 // the positions of surprising values in the bit matrix.
 
 // returns the number of compressedWords actually used
-Long lowLevelCompressPairs (U32 * pairArray,       // input
-			    Long numPairsToEncode, // input
-			    Long numBaseBits,      // input
-			    U32 * compressedWords) { // output
+Long lowLevelCompressPairs(const U32* pairArray, // input
+    Long numPairsToEncode, // input
+    Long numBaseBits,      // input
+    U32* compressedWords) { // output
   Long pairIndex = 0;
   Long nextWordIndex = 0;
   U64 bitbuf = 0; 
   int bufbits = 0; 
 
-  Long golombLoMask = (1LL << numBaseBits) - 1;
+  const Long golombLoMask = (1LL << numBaseBits) - 1;
 
   Long  predictedRowIndex = 0;
   Short predictedColIndex = 0;
 
   for (pairIndex = 0; pairIndex < numPairsToEncode; pairIndex++) {
-    U32 rowCol = pairArray[pairIndex];
-    Long  rowIndex = (Long)  (rowCol >> 6);
-    Short colIndex = (Short) (rowCol & 63);
+    const U32 rowCol = pairArray[pairIndex];
+    const Long  rowIndex = (Long)  (rowCol >> 6);
+    const Short colIndex = (Short) (rowCol & 63);
     
     if (rowIndex != predictedRowIndex) { predictedColIndex = 0; }
 
     if (rowIndex < predictedRowIndex) throw std::logic_error("rowIndex < predictedRowIndex");
     if (colIndex < predictedColIndex) throw std::logic_error("colIndex < predictedColIndex");
 
-    Long  yDelta = rowIndex - predictedRowIndex;
-    Short xDelta = colIndex - predictedColIndex;
+    const Long  yDelta = rowIndex - predictedRowIndex;
+    const Short xDelta = colIndex - predictedColIndex;
 
     predictedRowIndex = rowIndex;
     predictedColIndex = colIndex + 1;
 
-    U64 codeInfo = (U64) lengthLimitedUnaryEncodingTable65[xDelta];
-    U64 codeVal = codeInfo & 0xfff;
-    int codeLen = codeInfo >> 12;    
+    const U64 codeInfo = (U64) lengthLimitedUnaryEncodingTable65[xDelta];
+    const U64 codeVal = codeInfo & 0xfff;
+    const int codeLen = codeInfo >> 12;
     bitbuf |= (codeVal << bufbits);
     bufbits += codeLen;
-    MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+    MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
 
-    Long golombLo = yDelta & golombLoMask;
-    Long golombHi = yDelta >> numBaseBits;
+    const Long golombLo = yDelta & golombLoMask;
+    const Long golombHi = yDelta >> numBaseBits;
 
-    writeUnary (compressedWords, &nextWordIndex, &bitbuf, &bufbits, golombHi);
+    writeUnary(compressedWords, &nextWordIndex, &bitbuf, &bufbits, golombHi);
 
     bitbuf |= golombLo << bufbits;
     bufbits += numBaseBits;
-    MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+    MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
   }  
 
   // Pad the bitstream so that the decompressor's 12-bit peek can't overrun its input.
   Long padding = 10LL - numBaseBits; // should be 10LL
   if (padding < 0) padding = 0;
   bufbits += padding; 
-  MAYBE_FLUSH_BITBUF(compressedWords,nextWordIndex);
+  MAYBE_FLUSH_BITBUF(compressedWords, nextWordIndex);
 
   if (bufbits > 0) { // We are done encoding now, so we flush the bit buffer.
     if (bufbits >= 32) throw std::logic_error("bufbits >= 32");
@@ -377,23 +313,19 @@ Long lowLevelCompressPairs (U32 * pairArray,       // input
     bitbuf = 0; bufbits = 0; // not really necessary
   }
   return nextWordIndex;
-
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void lowLevelUncompressPairs (U32 * pairArray,         // output
-			      Long numPairsToDecode,   // input (but refers to the output)
-			      Long numBaseBits,        // input
-			      U32 * compressedWords,   // input
-			      Long numCompressedWords) { // input
+void lowLevelUncompressPairs(U32* pairArray, // output
+    Long numPairsToDecode,  // input (but refers to the output)
+    Long numBaseBits,       // input
+    const U32* compressedWords,   // input
+    Long numCompressedWords) { // input
   Long pairIndex = 0;
   Long wordIndex = 0;
   U64 bitbuf = 0; 
   int bufbits = 0; 
 
-  Long golombLoMask = (1LL << numBaseBits) - 1;
+  const Long golombLoMask = (1LL << numBaseBits) - 1;
 
   Long  predictedRowIndex = 0;
   Short predictedColIndex = 0;
@@ -404,52 +336,45 @@ void lowLevelUncompressPairs (U32 * pairArray,         // output
   // yDeltaLo (basebits)
 
   for (pairIndex = 0; pairIndex < numPairsToDecode; pairIndex++) {
-
-    MAYBE_FILL_BITBUF(compressedWords,wordIndex,12); // ensure 12 bits in bit buffer
-    int peek12 = bitbuf & 0xfffULL;
-    int lookup = lengthLimitedUnaryDecodingTable65[peek12];
-    int codeWordLength = lookup >> 8;
-    Short xDelta = lookup & 0xff;
+    MAYBE_FILL_BITBUF(compressedWords, wordIndex, 12); // ensure 12 bits in bit buffer
+    const int peek12 = bitbuf & 0xfffULL;
+    const int lookup = lengthLimitedUnaryDecodingTable65[peek12];
+    const int codeWordLength = lookup >> 8;
+    const Short xDelta = lookup & 0xff;
     bitbuf >>= codeWordLength;
     bufbits -= codeWordLength;
 
-    Long golombHi = readUnary (compressedWords, &wordIndex, &bitbuf, &bufbits);
+    const Long golombHi = readUnary(compressedWords, &wordIndex, &bitbuf, &bufbits);
 
-    MAYBE_FILL_BITBUF(compressedWords,wordIndex,numBaseBits); // ensure numBaseBits in bit buffer
-    Long golombLo = bitbuf & golombLoMask;
+    MAYBE_FILL_BITBUF(compressedWords, wordIndex, numBaseBits); // ensure numBaseBits in bit buffer
+    const Long golombLo = bitbuf & golombLoMask;
     bitbuf >>= numBaseBits;
     bufbits -= numBaseBits;
-    Long yDelta = (golombHi << numBaseBits) | golombLo;
+    const Long yDelta = (golombHi << numBaseBits) | golombLo;
 
     // Now that we have yDelta and xDelta, we can compute the pair's row and column.
     if (yDelta > 0) { predictedColIndex = 0; }
-    Long  rowIndex = predictedRowIndex + yDelta;
-    Short colIndex = predictedColIndex + xDelta;
-    U32 rowCol = (rowIndex << 6) | colIndex;
+    const Long  rowIndex = predictedRowIndex + yDelta;
+    const Short colIndex = predictedColIndex + xDelta;
+    const U32 rowCol = (rowIndex << 6) | colIndex;
     pairArray[pairIndex] = rowCol;
     predictedRowIndex = rowIndex;
     predictedColIndex = colIndex + 1;
-
   }
   if (wordIndex > numCompressedWords) throw std::logic_error("wordIndex > numCompressedWords"); // check for buffer over-run
 }
 
-
-/***************************************************************/
-/***************************************************************/
-
-Long safeLengthForCompressedPairBuf (Long k, Long numPairs, Long numBaseBits) {
+Long safeLengthForCompressedPairBuf(Long k, Long numPairs, Long numBaseBits) {
   if (numPairs <= 0) throw std::invalid_argument("numPairs <= 0");
   // Long ybits = k + numPairs; // simpler and safer UB
   // The following tighter UB on ybits is based on page 198 
   // of the textbook "Managing Gigabytes" by Witten, Moffat, and Bell.
   // Notice that if numBaseBits == 0 it coincides with (k + numPairs).
-  Long ybits = numPairs * (1LL + numBaseBits) + (k >> numBaseBits);
-  Long xbits = 12 * numPairs;
+  const Long ybits = numPairs * (1LL + numBaseBits) + (k >> numBaseBits);
+  const Long xbits = 12 * numPairs;
   Long padding = 10LL - numBaseBits;
   if (padding < 0) padding = 0;
-  Long bits = xbits + ybits + padding;
-  return (divideLongsRoundingUp(bits, 32));
+  return divideLongsRoundingUp(xbits + ybits + padding, 32);
 }
 
 // Explanation of padding: we write 
@@ -459,172 +384,136 @@ Long safeLengthForCompressedPairBuf (Long k, Long numPairs, Long numBaseBits) {
 // So the 12-bit lookahead is the tight constraint, but there are at least (2 + B) bits emitted,
 // so we would be safe with max (0, 10 - B) bits of padding at the end of the bitstream.
 
-/***************************************************************/
-
-Long safeLengthForCompressedWindowBuf (Long k) { // measured in 32-bit words
+Long safeLengthForCompressedWindowBuf(Long k) { // measured in 32-bit words
   Long bits = 12 * k + 11; // 11 bits of padding, due to 12-bit lookahead, with 1 bit certainly present.
-  return (divideLongsRoundingUp(bits, 32));
+  return divideLongsRoundingUp(bits, 32);
 }
 
-/***************************************************************/
-/***************************************************************/
-
-Short determinePseudoPhase (Short lgK, Long c) {
-  Long k = (1LL << lgK);  
- // This midrange logic produces pseudo-phases. They are used to select encoding tables.
- // The thresholds were chosen by hand after looking at plots of measured compression.
+Short determinePseudoPhase(Short lgK, Long c) {
+  const Long k = 1LL << lgK;
+  // This mid-range logic produces pseudo-phases. They are used to select encoding tables.
+  // The thresholds were chosen by hand after looking at plots of measured compression.
   if (1000 * c < 2375 * k) {
-    if      (   4 * c <    3 * k) return ( 16 + 0 );  // midrange table
-    else if (  10 * c <   11 * k) return ( 16 + 1 );  // midrange table
-    else if ( 100 * c <  132 * k) return ( 16 + 2 );  // midrange table
-    else if (   3 * c <    5 * k) return ( 16 + 3 );  // midrange table
-    else if (1000 * c < 1965 * k) return ( 16 + 4 );  // midrange table
-    else if (1000 * c < 2275 * k) return ( 16 + 5 );  // midrange table
-    else return ( 6 );  // steady-state table employed before its actual phase
-  } 
-  else { // This steady-state logic produces true phases. They are used to select
+    if      (   4 * c <    3 * k) return 16 + 0; // mid-range table
+    else if (  10 * c <   11 * k) return 16 + 1; // mid-range table
+    else if ( 100 * c <  132 * k) return 16 + 2; // mid-range table
+    else if (   3 * c <    5 * k) return 16 + 3; // mid-range table
+    else if (1000 * c < 1965 * k) return 16 + 4; // mid-range table
+    else if (1000 * c < 2275 * k) return 16 + 5; // mid-range table
+    else return 6;  // steady-state table employed before its actual phase
+  } else { // This steady-state logic produces true phases. They are used to select
          // encoding tables, and also column permutations for the "Sliding" flavor.
     if (lgK < 4) throw std::logic_error("lgK < 4");
-    Long tmp = c >> (lgK - 4);
-    Long phase = tmp & 15;
+    const Long tmp = c >> (lgK - 4);
+    const Long phase = tmp & 15;
     if (phase < 0 || phase >= 16) throw std::out_of_range("wrong phase");
-    return ((Short) phase);
+    return (Short) phase;
   }
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void compressTheWindow (FM85 * target, FM85 * source) {
-  Long k = (1LL << source->lgK);  
-  Long windowBufLen = safeLengthForCompressedWindowBuf (k);
-  U32 * windowBuf = (U32 *) fm85alloc ((size_t) (windowBufLen * sizeof(U32)));
+void compressTheWindow(FM85* target, FM85* source) {
+  const Long k = 1LL << source->lgK;
+  const Long windowBufLen = safeLengthForCompressedWindowBuf (k);
+  U32* windowBuf = (U32 *) fm85alloc ((size_t) (windowBufLen * sizeof(U32)));
   if (windowBuf == NULL) throw std::logic_error("windowBuf == NULL");
-  Short pseudoPhase = determinePseudoPhase (source->lgK, source->numCoupons);
-  target->cwLength = lowLevelCompressBytes (source->slidingWindow, k,
+  const Short pseudoPhase = determinePseudoPhase(source->lgK, source->numCoupons);
+  target->cwLength = lowLevelCompressBytes(source->slidingWindow, k,
 					    encodingTablesForHighEntropyByte[pseudoPhase],
 					    windowBuf);
 
   // At this point we free the unused portion of the compression output buffer.
   // Note: realloc caused strange timing spikes for lgK = 11 and 12.
 
-  U32 * shorterBuf = (U32 *) fm85alloc (((size_t) target->cwLength) * sizeof(U32));
+  U32* shorterBuf = (U32*) fm85alloc(((size_t) target->cwLength) * sizeof(U32));
   if (shorterBuf == NULL) throw std::bad_alloc();
-  memcpy ((void *) shorterBuf, (void *) windowBuf, ((size_t) target->cwLength) * sizeof(U32));
-  fm85free (windowBuf);
+  memcpy((void*) shorterBuf, (void*) windowBuf, ((size_t) target->cwLength) * sizeof(U32));
+  fm85free(windowBuf);
   target->compressedWindow = shorterBuf;
-
-  return;
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void uncompressTheWindow (FM85 * target, FM85 * source) {
-  Long k = (1LL << source->lgK);  
-  U8 * window = (U8 *) fm85alloc ((size_t) (k * sizeof(U8)));
+void uncompressTheWindow(FM85* target, FM85* source) {
+  const Long k = 1LL << source->lgK;
+  U8* window = (U8*) fm85alloc((size_t) (k * sizeof(U8)));
   if (window == NULL) throw std::bad_alloc();
   // zeroing not needed here (unlike the Hybrid Flavor)
   if (target->slidingWindow != NULL) throw std::logic_error("target->slidingWindow != NULL");
   target->slidingWindow = window;
-  Short pseudoPhase = determinePseudoPhase (source->lgK, source->numCoupons);
+  const Short pseudoPhase = determinePseudoPhase(source->lgK, source->numCoupons);
   if (source->compressedWindow == NULL) throw std::logic_error("source->compressedWindow == NULL");
-  lowLevelUncompressBytes (target->slidingWindow, k,
+  lowLevelUncompressBytes(target->slidingWindow, k,
 			   decodingTablesForHighEntropyByte[pseudoPhase],
 			   source->compressedWindow,
 			   source->cwLength);
-  return;
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void compressTheSurprisingValues (FM85 * target, FM85 * source, U32 * pairs, Long numPairs) {
+void compressTheSurprisingValues(FM85* target, FM85* source, U32* pairs, Long numPairs) {
   if (numPairs <= 0) throw std::invalid_argument("numPairs <= 0");
   target->numCompressedSurprisingValues = numPairs;  
-  Long k = (1LL << source->lgK);
-  Long numBaseBits = golombChooseNumberOfBaseBits (k + numPairs, numPairs);
-  Long pairBufLen = safeLengthForCompressedPairBuf (k, numPairs, numBaseBits);
-  U32 * pairBuf = (U32 *) fm85alloc ((size_t) (pairBufLen * sizeof(U32)));
+  const Long k = 1LL << source->lgK;
+  const Long numBaseBits = golombChooseNumberOfBaseBits(k + numPairs, numPairs);
+  const Long pairBufLen = safeLengthForCompressedPairBuf(k, numPairs, numBaseBits);
+  U32* pairBuf = (U32*) fm85alloc((size_t) (pairBufLen * sizeof(U32)));
   if (pairBuf == NULL) throw std::bad_alloc();
 
-  target->csvLength = lowLevelCompressPairs (pairs, numPairs, numBaseBits, pairBuf);
+  target->csvLength = lowLevelCompressPairs(pairs, numPairs, numBaseBits, pairBuf);
 
   // At this point we free the unused portion of the compression output buffer.
   // Note: realloc caused strange timing spikes for lgK = 11 and 12.
 
-  U32 * shorterBuf = (U32 *) fm85alloc (((size_t) target->csvLength) * sizeof(U32));
+  U32* shorterBuf = (U32*) fm85alloc(((size_t) target->csvLength) * sizeof(U32));
   if (shorterBuf == NULL) throw std::bad_alloc();
-  memcpy ((void *) shorterBuf, (void *) pairBuf, ((size_t) target->csvLength) * sizeof(U32));
-  fm85free (pairBuf);
+  memcpy((void*) shorterBuf, (void*) pairBuf, ((size_t) target->csvLength) * sizeof(U32));
+  fm85free(pairBuf);
   target->compressedSurprisingValues = shorterBuf;
 }
 
-/***************************************************************/
-/***************************************************************/
 // allocates and returns an array of uncompressed pairs.
 // the length of this array is known to the source sketch.
-
-U32 * uncompressTheSurprisingValues (FM85 * source) {
-  if (source->isCompressed != 1) throw std::logic_error("not compressed");
-  Long k = (1LL << source->lgK);  
-  Long numPairs = source->numCompressedSurprisingValues;
+U32* uncompressTheSurprisingValues(FM85* source) {
+  if (!source->isCompressed) throw std::logic_error("not compressed");
+  const Long k = 1LL << source->lgK;
+  const Long numPairs = source->numCompressedSurprisingValues;
   if (numPairs <= 0) throw std::logic_error("numPairs <= 0");
-  U32 * pairs = (U32 *) fm85alloc ((size_t) numPairs * sizeof(U32));
+  U32 * pairs = (U32 *) fm85alloc((size_t) numPairs * sizeof(U32));
   if (pairs == NULL) throw std::bad_alloc();
-  Long numBaseBits = golombChooseNumberOfBaseBits (k + numPairs, numPairs);
+  Long numBaseBits = golombChooseNumberOfBaseBits(k + numPairs, numPairs);
   lowLevelUncompressPairs(pairs, numPairs, numBaseBits, 
 			  source->compressedSurprisingValues, source->csvLength);
-  return (pairs);
+  return pairs;
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void compressEmptyFlavor (FM85 * target, FM85 * source) {
+void compressEmptyFlavor(FM85* target, FM85* source) {
   return; // nothing to do, so just return
 }
 
-/***************************************************************/
-
-void uncompressEmptyFlavor (FM85 * target, FM85 * source) {
+void uncompressEmptyFlavor(FM85* target, FM85* source) {
   return; // nothing to do, so just return
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void compressSparseFlavor (FM85 * target, FM85 * source) {
+void compressSparseFlavor(FM85* target, FM85* source) {
   if (source->slidingWindow != NULL) throw std::logic_error("source->slidingWindow != NULL"); // there is no window to compress
   Long numPairs = 0;
-  U32 * pairs = u32TableUnwrappingGetItems (source->surprisingValueTable, &numPairs);
-  introspectiveInsertionSort(pairs, 0, numPairs-1);
-  compressTheSurprisingValues (target, source, pairs, numPairs);
-  if (pairs) fm85free (pairs);
-  return;
+  U32* pairs = u32TableUnwrappingGetItems(source->surprisingValueTable, &numPairs);
+  introspectiveInsertionSort(pairs, 0, numPairs - 1);
+  compressTheSurprisingValues(target, source, pairs, numPairs);
+  if (pairs) fm85free(pairs);
 }
 
-/***************************************************************/
-
-void uncompressSparseFlavor (FM85 * target, FM85 * source) {
+void uncompressSparseFlavor(FM85* target, FM85* source) {
   if (source->compressedWindow != NULL) throw std::logic_error("source->compressedWindow != NULL");
   if (source->compressedSurprisingValues == NULL) throw std::logic_error("source->compressedSurprisingValues == NULL");
-  U32 * pairs = uncompressTheSurprisingValues (source);
-  Long numPairs = source->numCompressedSurprisingValues;
-  u32Table * table = makeU32TableFromPairsArray (pairs, numPairs, source->lgK);
+  U32* pairs = uncompressTheSurprisingValues (source);
+  const Long numPairs = source->numCompressedSurprisingValues;
+  u32Table* table = makeU32TableFromPairsArray(pairs, numPairs, source->lgK);
   target->surprisingValueTable = table;
-  fm85free (pairs);
-  return;
+  fm85free(pairs);
 }
 
-/***************************************************************/
-/***************************************************************/
 // The empty space that this leaves at the beginning of the output array
 // will be filled in later by the caller.
-
-U32 * trickyGetPairsFromWindow (U8 * window, Long k, Long numPairsToGet, Long emptySpace) {
-  Long outputLength = emptySpace + numPairsToGet;
-  U32 * pairs = (U32 *) fm85alloc ((size_t) (outputLength * sizeof(U32)));
+U32* trickyGetPairsFromWindow(U8* window, Long k, Long numPairsToGet, Long emptySpace) {
+  const Long outputLength = emptySpace + numPairsToGet;
+  U32* pairs = (U32*) fm85alloc((size_t) (outputLength * sizeof(U32)));
   if (pairs == NULL) throw std::bad_alloc();
   Long rowIndex = 0;
   Long pairIndex = emptySpace;
@@ -638,66 +527,56 @@ U32 * trickyGetPairsFromWindow (U8 * window, Long k, Long numPairsToGet, Long em
     }
   }
   if (pairIndex != outputLength) throw std::logic_error("pairIndex != outputLength");
-  return (pairs);
+  return pairs;
 }
 
-/***************************************************************/
 // This is complicated because it effectively builds a Sparse version
 // of a Pinned sketch before compressing it. Hence the name Hybrid.
-
-void compressHybridFlavor (FM85 * target, FM85 * source) {
-  //  Long i;
-  Long k = (1LL << source->lgK);
+void compressHybridFlavor(FM85* target, FM85* source) {
+  const Long k = 1LL << source->lgK;
   Long numPairsFromTable = 0; 
-  U32 * pairsFromTable = u32TableUnwrappingGetItems (source->surprisingValueTable, &numPairsFromTable);
+  U32* pairsFromTable = u32TableUnwrappingGetItems(source->surprisingValueTable, &numPairsFromTable);
   introspectiveInsertionSort(pairsFromTable, 0, numPairsFromTable-1);
   if (source->slidingWindow == NULL) throw std::logic_error("source->slidingWindow == NULL");
   if (source->windowOffset != 0) throw std::logic_error("source->windowOffset != 0");
-  Long numPairsFromArray = source->numCoupons - numPairsFromTable; // because the window offset is zero
+  const Long numPairsFromArray = source->numCoupons - numPairsFromTable; // because the window offset is zero
 
-  U32 * allPairs = trickyGetPairsFromWindow (source->slidingWindow, k, numPairsFromArray, numPairsFromTable);
+  U32* allPairs = trickyGetPairsFromWindow(source->slidingWindow, k, numPairsFromArray, numPairsFromTable);
 
-  u32Merge (pairsFromTable, 0, numPairsFromTable,
+  u32Merge(pairsFromTable, 0, numPairsFromTable,
 	    allPairs, numPairsFromTable, numPairsFromArray,
 	    allPairs, 0);  // note the overlapping subarray trick
 
-  //  for (i = 0; i < source->numCoupons-1; i++) { assert (allPairs[i] < allPairs[i+1]); }
-
-  compressTheSurprisingValues (target, source, allPairs, source->numCoupons);
-  if (pairsFromTable) fm85free (pairsFromTable);
-  fm85free (allPairs);
-  return;
+  compressTheSurprisingValues(target, source, allPairs, source->numCoupons);
+  if (pairsFromTable) fm85free(pairsFromTable);
+  fm85free(allPairs);
 }
 
-/***************************************************************/
-
-void uncompressHybridFlavor (FM85 * target, FM85 * source) {
+void uncompressHybridFlavor(FM85* target, FM85* source) {
   if (source->compressedWindow != NULL) throw std::logic_error("source->compressedWindow != NULL");
   if (source->compressedSurprisingValues == NULL) throw std::logic_error("source->compressedSurprisingValues == NULL");
-  U32 * pairs = uncompressTheSurprisingValues (source);
-  Long numPairs = source->numCompressedSurprisingValues;
+  U32* pairs = uncompressTheSurprisingValues(source);
+  const Long numPairs = source->numCompressedSurprisingValues;
   // In the hybrid flavor, some of these pairs actually
   // belong in the window, so we will separate them out,
   // moving the "true" pairs to the bottom of the array.
 
-  Long k = (1LL << source->lgK);
+  const Long k = 1LL << source->lgK;
 
-  U8 * window = (U8 *) fm85alloc ((size_t) (k * sizeof(U8)));
+  U8* window = (U8*) fm85alloc((size_t) (k * sizeof(U8)));
   if (window == NULL) throw std::bad_alloc();
-  memset ((void *) window, 0, (size_t) k); // important: zero the memory
+  memset((void*) window, 0, (size_t) k); // important: zero the memory
   
   Long nextTruePair = 0;
-  Long i;
 
-  for (i = 0; i < numPairs; i++) {
-    U32 rowCol = pairs[i];
+  for (Long i = 0; i < numPairs; i++) {
+    const U32 rowCol = pairs[i];
     if (rowCol == ALL32BITS) throw std::logic_error("rowCol == ALL32BITS");
-    Short col = (Short) (rowCol & 63);
+    const Short col = (Short) (rowCol & 63);
     if (col < 8) {
-      Long  row = (Long) (rowCol >> 6);
+      const Long row = (Long) (rowCol >> 6);
       window[row] |= (1 << col); // set the window bit
-    }
-    else {
+    } else {
       pairs[nextTruePair++] = rowCol; // move true pair down
     }
   }
@@ -705,101 +584,80 @@ void uncompressHybridFlavor (FM85 * target, FM85 * source) {
   if (source->windowOffset != 0) throw std::logic_error("source->windowOffset != 0");
   target->windowOffset = 0;
 
-  u32Table * table = makeU32TableFromPairsArray (pairs, 
-						 nextTruePair,
-						 source->lgK);
+  u32Table* table = makeU32TableFromPairsArray(pairs, nextTruePair, source->lgK);
   target->surprisingValueTable = table;
   target->slidingWindow = window;
 
-  fm85free (pairs);
-
-  return;
+  fm85free(pairs);
 }
 
-/***************************************************************/
-/***************************************************************/
-
-void compressPinnedFlavor (FM85 * target, FM85 * source) {
-
-  compressTheWindow (target, source);
-
-  Long numPairs = source->surprisingValueTable->numItems;
+void compressPinnedFlavor(FM85* target, FM85* source) {
+  compressTheWindow(target, source);
+  const Long numPairs = source->surprisingValueTable->numItems;
   if (numPairs > 0) {
     Long chkNumPairs;
-    U32 * pairs = u32TableUnwrappingGetItems (source->surprisingValueTable, &chkNumPairs);
+    U32* pairs = u32TableUnwrappingGetItems(source->surprisingValueTable, &chkNumPairs);
     if (chkNumPairs != numPairs) throw std::logic_error("chkNumPairs != numPairs");
 
     // Here we subtract 8 from the column indices.  Because they are stored in the low 6 bits 
     // of each rowCol pair, and because no column index is less than 8 for a "Pinned" sketch,
     // I believe we can simply subtract 8 from the pairs themselves.
 
-    Long i; // shift the columns over by 8 positions before compressing (because of the window)
-    for (i = 0; i < numPairs; i++) { 
+    // shift the columns over by 8 positions before compressing (because of the window)
+    for (Long i = 0; i < numPairs; i++) {
       if ((pairs[i] & 63) < 8) throw std::logic_error("(pairs[i] & 63) < 8");
       pairs[i] -= 8; 
     }
 
     introspectiveInsertionSort(pairs, 0, numPairs-1);
-    compressTheSurprisingValues (target, source, pairs, numPairs);
-    if (pairs) fm85free (pairs);
+    compressTheSurprisingValues(target, source, pairs, numPairs);
+    if (pairs) fm85free(pairs);
   }
-  return;
 }
 
-/***************************************************************/
-
-void uncompressPinnedFlavor (FM85 * target, FM85 * source) {
+void uncompressPinnedFlavor(FM85* target, FM85* source) {
   if (source->compressedWindow == NULL) throw std::logic_error("source->compressedWindow == NULL");
-  uncompressTheWindow (target, source);
-  Long numPairs = source->numCompressedSurprisingValues;
+  uncompressTheWindow(target, source);
+  const Long numPairs = source->numCompressedSurprisingValues;
   if (numPairs == 0) {
-    target->surprisingValueTable = u32TableMake (2, 6 + source->lgK);
-  }
-  else {
+    target->surprisingValueTable = u32TableMake(2, 6 + source->lgK);
+  } else {
     if (numPairs <= 0) throw std::logic_error("numPairs <= 0");
     if (source->compressedSurprisingValues == NULL) throw std::logic_error("source->compressedSurprisingValues == NULL");
-    U32 * pairs = uncompressTheSurprisingValues (source);
-    Long i; // undo the compressor's 8-column shift
-    for (i = 0; i < numPairs; i++) { 
+    U32* pairs = uncompressTheSurprisingValues(source);
+    // undo the compressor's 8-column shift
+    for (Long i = 0; i < numPairs; i++) {
       if ((pairs[i] & 63) >= 56) throw std::logic_error("(pairs[i] & 63) >= 56");
       pairs[i] += 8; 
     }
-    u32Table * table = makeU32TableFromPairsArray (pairs, numPairs, source->lgK);
+    u32Table* table = makeU32TableFromPairsArray(pairs, numPairs, source->lgK);
     target->surprisingValueTable = table;
-    fm85free (pairs);
+    fm85free(pairs);
   }
-  return;
 }
 
-/***************************************************************/
-/***************************************************************/
 // Complicated by the existence of both a left fringe and a right fringe.
-
-void compressSlidingFlavor (FM85 * target, FM85 * source) {
-
-  compressTheWindow (target, source);
-
-  Long numPairs = source->surprisingValueTable->numItems;
-
+void compressSlidingFlavor(FM85* target, FM85* source) {
+  compressTheWindow(target, source);
+  const Long numPairs = source->surprisingValueTable->numItems;
   if (numPairs > 0) {
     Long chkNumPairs;
-    U32 * pairs = u32TableUnwrappingGetItems (source->surprisingValueTable, &chkNumPairs);
+    U32* pairs = u32TableUnwrappingGetItems(source->surprisingValueTable, &chkNumPairs);
     if (chkNumPairs != numPairs) throw std::logic_error("chkNumPairs != numPairs");
 
     // Here we apply a complicated transformation to the column indices, which
     // changes the implied ordering of the pairs, so we must do it before sorting.
 
-    Short pseudoPhase = determinePseudoPhase (source->lgK, source->numCoupons); // NB
+    const Short pseudoPhase = determinePseudoPhase(source->lgK, source->numCoupons); // NB
     if (pseudoPhase >= 16) throw std::logic_error("pseudoPhase >= 16");
-    U8 * permutation = columnPermutationsForEncoding[pseudoPhase];
+    const U8* permutation = columnPermutationsForEncoding[pseudoPhase];
 
     Short offset = source->windowOffset;
     if (offset <= 0 || offset > 56) throw std::out_of_range("offset out of range");
 
-    Long i; 
-    for (i = 0; i < numPairs; i++) { 
-      U32 rowCol = pairs[i];
-      Long  row = (Long)  (rowCol >> 6);
+    for (Long i = 0; i < numPairs; i++) {
+      const U32 rowCol = pairs[i];
+      const Long row = (Long)  (rowCol >> 6);
       Short col = (Short) (rowCol & 63);
       // first rotate the columns into a canonical configuration: new = ((old - (offset+8)) + 64) mod 64
       col = (col + 56 - offset) & 63;
@@ -809,39 +667,33 @@ void compressSlidingFlavor (FM85 * target, FM85 * source) {
       pairs[i] = (U32) ((row << 6) | col);
     }
 
-    introspectiveInsertionSort(pairs, 0, numPairs-1);
-    compressTheSurprisingValues (target, source, pairs, numPairs);
-    if (pairs) fm85free (pairs);
+    introspectiveInsertionSort(pairs, 0, numPairs - 1);
+    compressTheSurprisingValues(target, source, pairs, numPairs);
+    if (pairs) fm85free(pairs);
   }
-  return;
 }
 
-/***************************************************************/
-
-void uncompressSlidingFlavor (FM85 * target, FM85 * source) {
+void uncompressSlidingFlavor(FM85* target, FM85* source) {
   if (source->compressedWindow == NULL) throw std::logic_error("source->compressedWindow == NULL");
-  uncompressTheWindow (target, source);
-
-  Long numPairs = source->numCompressedSurprisingValues;
+  uncompressTheWindow(target, source);
+  const Long numPairs = source->numCompressedSurprisingValues;
   if (numPairs == 0) {
-    target->surprisingValueTable = u32TableMake (2, 6 + source->lgK);
-  }
-  else {
+    target->surprisingValueTable = u32TableMake(2, 6 + source->lgK);
+  } else {
     if (numPairs <= 0) throw std::logic_error("numPairs <= 0");
     if (source->compressedSurprisingValues == NULL) throw std::logic_error("source->compressedSurprisingValues == NULL");
-    U32 * pairs = uncompressTheSurprisingValues (source);
+    U32* pairs = uncompressTheSurprisingValues(source);
 
     Short pseudoPhase = determinePseudoPhase (source->lgK, source->numCoupons); // NB
     if (pseudoPhase >= 16) throw std::logic_error("pseudoPhase >= 16");
-    U8 * permutation = columnPermutationsForDecoding[pseudoPhase];
+    const U8* permutation = columnPermutationsForDecoding[pseudoPhase];
 
-    Short offset = source->windowOffset;
+    const Short offset = source->windowOffset;
     if (offset <= 0 || offset > 56) throw std::out_of_range("offset out of range");
 
-    Long i; 
-    for (i = 0; i < numPairs; i++) { 
-      U32 rowCol = pairs[i];
-      Long  row = (Long)  (rowCol >> 6);
+    for (Long i = 0; i < numPairs; i++) {
+      const U32 rowCol = pairs[i];
+      const Long row = (Long) (rowCol >> 6);
       Short col = (Short) (rowCol & 63);
       // first undo the permutation
       col = permutation[col];
@@ -850,23 +702,17 @@ void uncompressSlidingFlavor (FM85 * target, FM85 * source) {
       pairs[i] = (U32) ((row << 6) | col);
     }
 
-    u32Table * table = makeU32TableFromPairsArray (pairs, numPairs, source->lgK);
+    u32Table* table = makeU32TableFromPairsArray(pairs, numPairs, source->lgK);
     target->surprisingValueTable = table;
 
     fm85free (pairs);
   }
-  return;
 }
 
-/***************************************************************/
-/***************************************************************/
-
-// Note: in the final system, compressed and uncompressed sketches will have different types
+FM85* fm85Compress(FM85* source) {
+  if (source->isCompressed) throw std::invalid_argument("already compressed");
 
-FM85 * fm85Compress (FM85 * source) {
-  if (source->isCompressed != 0) throw std::invalid_argument("already compressed");
-
-  FM85 * target = (FM85 *) fm85alloc (sizeof(FM85));
+  FM85* target = (FM85*) fm85alloc(sizeof(FM85));
   if (target == NULL) throw std::bad_alloc();
 
   target->lgK = source->lgK;
@@ -878,7 +724,7 @@ FM85 * fm85Compress (FM85 * source) {
   target->hipEstAccum = source->hipEstAccum;
   target->hipErrAccum = source->hipErrAccum;
 
-  target->isCompressed = 1;
+  target->isCompressed = true;
 
   // initialize the variables that belong in a compressed sketch
   target->numCompressedSurprisingValues = 0;
@@ -893,26 +739,24 @@ FM85 * fm85Compress (FM85 * source) {
 
   enum flavorType flavor = determineSketchFlavor(source);
   switch (flavor) {
-  case EMPTY: compressEmptyFlavor  (target, source); break;
+  case EMPTY: compressEmptyFlavor(target, source); break;
   case SPARSE:
-    compressSparseFlavor (target, source); 
+    compressSparseFlavor(target, source);
     if (target->compressedWindow != NULL) throw std::logic_error("target->compressedWindow != NULL");
     if (target->compressedSurprisingValues == NULL) throw std::logic_error("target->compressedSurprisingValues == NULL");
     break;
   case HYBRID:  
-    compressHybridFlavor (target, source); 
+    compressHybridFlavor(target, source);
     if (target->compressedWindow != NULL) throw std::logic_error("target->compressedWindow != NULL");
     if (target->compressedSurprisingValues == NULL) throw std::logic_error("target->compressedSurprisingValues == NULL");
     break;
   case PINNED:  
-    compressPinnedFlavor (target, source); 
+    compressPinnedFlavor(target, source);
     if (target->compressedWindow == NULL) throw std::logic_error("target->compressedWindow != NULL");
-    //    assert (target->compressedSurprisingValues != NULL);
     break;
   case SLIDING: 
     compressSlidingFlavor(target, source); 
     if (target->compressedWindow == NULL) throw std::logic_error("target->compressedWindow == NULL");
-    //    assert (target->compressedSurprisingValues != NULL);
     break;
   default: throw std::logic_error("Unknown sketch flavor");
   }
@@ -920,14 +764,10 @@ FM85 * fm85Compress (FM85 * source) {
   return target;
 }
 
-/***************************************************************/
-/***************************************************************/
-// Note: in the final system, compressed and uncompressed sketches will have different types
-
-FM85 * fm85Uncompress (FM85 * source) {
-  if (source->isCompressed != 1) throw std::invalid_argument("not compressed");
+FM85* fm85Uncompress(FM85* source) {
+  if (!source->isCompressed) throw std::invalid_argument("not compressed");
 
-  FM85 * target = (FM85 *) fm85alloc (sizeof(FM85));
+  FM85* target = (FM85*) fm85alloc(sizeof(FM85));
   if (target == NULL) throw std::bad_alloc();
 
   target->lgK = source->lgK;
@@ -939,17 +779,17 @@ FM85 * fm85Uncompress (FM85 * source) {
   target->hipEstAccum = source->hipEstAccum;
   target->hipErrAccum = source->hipErrAccum;
 
-  target->isCompressed = 0;
+  target->isCompressed = false;
 
   // initialize the variables that belong in an updateable sketch
-  target->slidingWindow = (U8 *) NULL;
-  target->surprisingValueTable = (u32Table *) NULL;
+  target->slidingWindow = (U8*) NULL;
+  target->surprisingValueTable = (u32Table*) NULL;
 
   // clear the variables that don't belong in an updateable sketch
   target->numCompressedSurprisingValues = 0;
-  target->compressedSurprisingValues = (U32 *) NULL;
+  target->compressedSurprisingValues = (U32*) NULL;
   target->csvLength = 0;
-  target->compressedWindow = (U32 *) NULL;
+  target->compressedWindow = (U32*) NULL;
   target->cwLength = 0;
 
   enum flavorType flavor = determineSketchFlavor(source);
diff --git a/cpc/src/fm85Confidence.cpp b/cpc/src/fm85Confidence.cpp
index 0117e4e..5c37042 100644
--- a/cpc/src/fm85Confidence.cpp
+++ b/cpc/src/fm85Confidence.cpp
@@ -19,20 +19,17 @@
 
 // author Kevin Lang, Oath Research
 
-/*******************************************************/
-
 #include "common.h"
 #include "fm85.h"
 #include "iconEstimator.h"
 
 #include <stdexcept>
 
-/*******************************************************/
 // ln 2.0
-double iconErrorConstant = 0.693147180559945286;
+const double iconErrorConstant = 0.693147180559945286;
 
 //  1,    2,    3, // kappa
-Short iconLowSideData [33] = {   // Empirically measured at N = 1000 * K.
+const Short iconLowSideData [33] = {   // Empirically measured at N = 1000 * K.
  6037, 5720, 5328, // 4 1000000
  6411, 6262, 5682, // 5 1000000
  6724, 6403, 6127, // 6 1000000
@@ -47,7 +44,7 @@ Short iconLowSideData [33] = {   // Empirically measured at N = 1000 * K.
 };                // lgK numtrials
 
 //  1,    2,    3, // kappa
-Short iconHighSideData [33] = {   // Empirically measured at N = 1000 * K.
+const Short iconHighSideData [33] = {   // Empirically measured at N = 1000 * K.
  8031, 8559, 9309, // 4 1000000
  7084, 7959, 8660, // 5 1000000
  7141, 7514, 7876, // 6 1000000
@@ -61,12 +58,11 @@ Short iconHighSideData [33] = {   // Empirically measured at N = 1000 * K.
  6944, 6966, 7004, // 14 1000297
 };                // lgK numtrials
 
-/*******************************************************/
 // sqrt((ln 2.0) / 2.0)
-double hipErrorConstant = 0.588705011257737332;
+const double hipErrorConstant = 0.588705011257737332;
 
 //  1,    2,    3, // kappa
-Short hipLowSideData [33] = {   // Empirically measured at N = 1000 * K.
+const Short hipLowSideData [33] = {   // Empirically measured at N = 1000 * K.
  5871, 5247, 4826, // 4 1000000
  5877, 5403, 5070, // 5 1000000
  5873, 5533, 5304, // 6 1000000
@@ -81,7 +77,7 @@ Short hipLowSideData [33] = {   // Empirically measured at N = 1000 * K.
 };                // lgK numtrials
 
 //  1,    2,    3, // kappa
-Short hipHighSideData [33] = {   // Empirically measured at N = 1000 * K.
+const Short hipHighSideData [33] = {   // Empirically measured at N = 1000 * K.
  5855, 6688, 7391, // 4 1000000
  5886, 6444, 6923, // 5 1000000
  5885, 6254, 6594, // 6 1000000
@@ -95,73 +91,66 @@ Short hipHighSideData [33] = {   // Empirically measured at N = 1000 * K.
  5880, 5914, 5953, // 14 1000297
 };                // lgK numtrials
 
-/*******************************************************/
-
-double getIconConfidenceLB (FM85 * sketch, int kappa) {
+double getIconConfidenceLB(const FM85* sketch, int kappa) {
   if (sketch->numCoupons == 0) return 0.0;
-  int lgK = sketch->lgK;
-  long k = (1LL << lgK);
+  const int lgK = sketch->lgK;
+  const long k = 1LL << lgK;
   if (lgK < 4) throw std::logic_error("lgk < 4");
   if (kappa < 1 || kappa > 3) throw std::invalid_argument("kappa must be between 1 and 3");
   double x = iconErrorConstant;
-  if (lgK <= 14) x = ((double) iconHighSideData[3*(lgK-4) + (kappa-1)]) / 10000.0;
-  double rel = x / (sqrt((double) k));
-  double eps = ((double) kappa) * rel;
-  double est = getIconEstimate (lgK, sketch->numCoupons);
+  if (lgK <= 14) x = ((double) iconHighSideData[3 * (lgK - 4) + (kappa - 1)]) / 10000.0;
+  const double rel = x / (sqrt((double) k));
+  const double eps = ((double) kappa) * rel;
+  const double est = getIconEstimate (lgK, sketch->numCoupons);
   double result = est / (1.0 + eps);
-  double check = (double) sketch->numCoupons;
+  const double check = (double) sketch->numCoupons;
   if (result < check) result = check;
-  return (result);
+  return result;
 }
 
-double getIconConfidenceUB (FM85 * sketch, int kappa) {
+double getIconConfidenceUB(const FM85* sketch, int kappa) {
   if (sketch->numCoupons == 0) return 0.0;
-  int lgK = sketch->lgK;
-  long k = (1LL << lgK);
+  const int lgK = sketch->lgK;
+  const long k = 1LL << lgK;
   if (lgK < 4) throw std::logic_error("lgk < 4");
   if (kappa < 1 || kappa > 3) throw std::invalid_argument("kappa must be between 1 and 3");
   double x = iconErrorConstant;
-  if (lgK <= 14) x = ((double) iconLowSideData[3*(lgK-4) + (kappa-1)]) / 10000.0;
-  double rel = x / (sqrt((double) k));
-  double eps = ((double) kappa) * rel;
-  double est = getIconEstimate (lgK, sketch->numCoupons);
-  double result = est / (1.0 - eps);
-  return (ceil(result));  // widening for coverage
+  if (lgK <= 14) x = ((double) iconLowSideData[3 * (lgK - 4) + (kappa - 1)]) / 10000.0;
+  const double rel = x / (sqrt((double) k));
+  const double eps = ((double) kappa) * rel;
+  const double est = getIconEstimate (lgK, sketch->numCoupons);
+  const double result = est / (1.0 - eps);
+  return ceil(result);  // widening for coverage
 }
 
-/*******************************************************/
-
-double getHIPConfidenceLB (FM85 * sketch, int kappa) {
+double getHIPConfidenceLB(const FM85 * sketch, int kappa) {
   if (sketch->numCoupons == 0) return 0.0;
-  int lgK = sketch->lgK;
-  long k = (1LL << lgK);
+  const int lgK = sketch->lgK;
+  const long k = 1LL << lgK;
   if (lgK < 4) throw std::logic_error("lgk < 4");
   if (kappa < 1 || kappa > 3) throw std::invalid_argument("kappa must be between 1 and 3");
   double x = hipErrorConstant;
-  if (lgK <= 14) x = ((double) hipHighSideData[3*(lgK-4) + (kappa-1)]) / 10000.0;
-  double rel = x / (sqrt((double) k));
-  double eps = ((double) kappa) * rel;
-  double est = getHIPEstimate (sketch);
+  if (lgK <= 14) x = ((double) hipHighSideData[3 * (lgK - 4) + (kappa - 1)]) / 10000.0;
+  const double rel = x / (sqrt((double) k));
+  const double eps = ((double) kappa) * rel;
+  const double est = getHIPEstimate(sketch);
   double result = est / (1.0 + eps);
-  double check = (double) sketch->numCoupons;
+  const double check = (double) sketch->numCoupons;
   if (result < check) result = check;
-  return (result);
+  return result;
 }
 
-double getHIPConfidenceUB (FM85 * sketch, int kappa) {
+double getHIPConfidenceUB(const FM85* sketch, int kappa) {
   if (sketch->numCoupons == 0) return 0.0;
-  int lgK = sketch->lgK;
-  long k = (1LL << lgK);
+  const int lgK = sketch->lgK;
+  const long k = 1LL << lgK;
   if (lgK < 4) throw std::logic_error("lgk < 4");
   if (kappa < 1 || kappa > 3) throw std::invalid_argument("kappa must be between 1 and 3");
   double x = hipErrorConstant;
-  if (lgK <= 14) x = ((double) hipLowSideData[3*(lgK-4) + (kappa-1)]) / 10000.0;
-  double rel = x / (sqrt((double) k));
-  double eps = ((double) kappa) * rel;
-  double est = getHIPEstimate (sketch);
-  double result = est / (1.0 - eps);
-  return (ceil(result)); // widening for coverage
+  if (lgK <= 14) x = ((double) hipLowSideData[3 * (lgK - 4) + (kappa - 1)]) / 10000.0;
+  const double rel = x / (sqrt((double) k));
+  const double eps = ((double) kappa) * rel;
+  const double est = getHIPEstimate(sketch);
+  const double result = est / (1.0 - eps);
+  return ceil(result); // widening for coverage
 }
-
-/*******************************************************/
-
diff --git a/cpc/src/fm85Merging.cpp b/cpc/src/fm85Merging.cpp
index eecdd6d..c7b7e44 100644
--- a/cpc/src/fm85Merging.cpp
+++ b/cpc/src/fm85Merging.cpp
@@ -24,55 +24,47 @@
 #include <stdexcept>
 #include <new>
 
-UG85 * ug85Make (Short lgK) {
+UG85* ug85Make(Short lgK) {
   if (lgK < 4) throw std::invalid_argument("lgK < 4");
-  UG85 * self = (UG85 *) fm85alloc (sizeof(UG85));
+  UG85* self = (UG85*) fm85alloc(sizeof(UG85));
   if (self == NULL) throw std::bad_alloc();
   self->lgK = lgK;
   // We begin with the accumulator holding an EMPTY sketch object.
   // As an optimization the accumulator could start as NULL, but that would require changes elsewhere.
-  self->accumulator = fm85Make (lgK);
+  self->accumulator = fm85Make(lgK);
   self->bitMatrix = NULL;
-  return (self);
+  return self;
 }
 
-/*******************************************************************************************/
-
-void ug85Free (UG85 * self) {
+void ug85Free(UG85* self) {
   if (self != NULL) {
-    if (self->accumulator != NULL) { fm85Free (self->accumulator); }
-    if (self->bitMatrix != NULL) { fm85free (self->bitMatrix); }
-    fm85free (self);
+    if (self->accumulator != NULL) { fm85Free(self->accumulator); }
+    if (self->bitMatrix != NULL) { fm85free(self->bitMatrix); }
+    fm85free(self);
   }
 }
 
-/*******************************************************************************************/
-
 // This is used for testing purposes only.
-U64 * bitMatrixOfUG85 (UG85 * self, Boolean * needToFreePtr) {
+U64* bitMatrixOfUG85(const UG85* self, bool* needToFreePtr) {
   if (self->bitMatrix != NULL) { // return the matrix
     if (self->accumulator != NULL) throw std::logic_error("accumulator is not null");
-    *needToFreePtr = 0;  // or we could make a copy of the bitmatrix
+    *needToFreePtr = false;  // or we could make a copy of the bitmatrix
     return (self->bitMatrix);
-  }
-  else { // construct a matrix
+  } else { // construct a matrix
     if (self->accumulator == NULL) throw std::logic_error("accumulator is null");
-    *needToFreePtr = 1;
-    return (bitMatrixOfSketch (self->accumulator));
+    *needToFreePtr = true;
+    return bitMatrixOfSketch(self->accumulator);
   }
 }
 
-/*******************************************************************************************/
-/*******************************************************************************************/
-
-void walkTableUpdatingSketch (FM85 * dest, u32Table * table) {
-  U32 * slots = table->slots;
-  Long numSlots = (1LL << table->lgSize); 
+void walkTableUpdatingSketch(FM85* dest, const u32Table* table) {
+  const U32* slots = table->slots;
+  const Long numSlots = 1LL << table->lgSize;
   if (dest->lgK > 26) throw std::logic_error("dest->lgK > 26");
-  U32 destMask = (((1 << dest->lgK) - 1) << 6) | 63;  // downsamples when destlgK < srcLgK
+  const U32 destMask = (((1 << dest->lgK) - 1) << 6) | 63;  // downsamples when destlgK < srcLgK
 
   // Using a golden ratio stride fixes the snowplow effect.
-  double golden = 0.6180339887498949025;
+  const double golden = 0.6180339887498949025;
   Long stride = (Long) (golden * ((double) numSlots));
   if (stride < 2) throw std::logic_error("stride < 2");
   if (stride == ((stride >> 1) << 1)) { stride += 1; }; // force the stride to be odd
@@ -80,70 +72,58 @@ void walkTableUpdatingSketch (FM85 * dest, u32Table * table) {
 
   Long i,j;
   for (i = 0, j = 0; i < numSlots; i++, j += stride) {
-    j &= (numSlots - 1LL);
-    U32 rowCol = slots[j];
+    j &= numSlots - 1LL;
+    const U32 rowCol = slots[j];
     if (rowCol != ALL32BITS) {
-      fm85RowColUpdate (dest, rowCol & destMask); 
+      fm85RowColUpdate(dest, rowCol & destMask);
     }
   }
 }
 
-/*******************************************************************************************/
-
-void orTableIntoMatrix (U64 * bitMatrix, Short destLgK, u32Table * table) {
-  U32 * slots = table->slots;
-  Long numSlots = (1LL << table->lgSize); 
-  Long destMask = (1LL << destLgK) - 1LL;  // downsamples when destlgK < srcLgK
-  Long i = 0;
-  for (i = 0; i < numSlots; i++) { 
-    U32 rowCol = slots[i];
+void orTableIntoMatrix(U64* bitMatrix, Short destLgK, const u32Table* table) {
+  const U32* slots = table->slots;
+  const Long numSlots = 1LL << table->lgSize;
+  const Long destMask = (1LL << destLgK) - 1LL;  // downsamples when destlgK < srcLgK
+  for (Long i = 0; i < numSlots; i++) {
+    const U32 rowCol = slots[i];
     if (rowCol != ALL32BITS) {
-      Short col = (Short) (rowCol & 63);
-      Long  row = (Long)  (rowCol >> 6);
+      const Short col = (Short) (rowCol & 63);
+      const Long  row = (Long)  (rowCol >> 6);
       bitMatrix[row & destMask] |= (1ULL << col); // Set the bit.
     }
   }
 }
 
-/*******************************************************************************************/
-
-void orWindowIntoMatrix (U64 * destMatrix, Short destLgK, U8 * srcWindow, Short srcOffset, Short srcLgK) {
+void orWindowIntoMatrix(U64* destMatrix, Short destLgK, const U8* srcWindow, Short srcOffset, Short srcLgK) {
   if (destLgK > srcLgK) throw std::logic_error("destLgK > srcLgK");
-  Long destMask = (1LL << destLgK) - 1LL;  // downsamples when destlgK < srcLgK
-  Long srcK = (1LL << srcLgK);
-  Long srcRow = 0;
-  for (srcRow = 0; srcRow < srcK; srcRow++) {
+  const Long destMask = (1LL << destLgK) - 1LL;  // downsamples when destlgK < srcLgK
+  const Long srcK = 1LL << srcLgK;
+  for (Long srcRow = 0; srcRow < srcK; srcRow++) {
     destMatrix[srcRow & destMask] |= (((U64) srcWindow[srcRow]) << srcOffset);
   }
 }
 
-/*******************************************************************************************/
-
-void orMatrixIntoMatrix (U64 * destMatrix, Short destLgK, U64 * srcMatrix, Short srcLgK) {
+void orMatrixIntoMatrix(U64* destMatrix, Short destLgK, const U64* srcMatrix, Short srcLgK) {
   if (destLgK > srcLgK) throw std::logic_error("destLgK > srcLgK");
-  Long destMask = (1LL << destLgK) - 1LL; // downsamples when destlgK < srcLgK
-  Long srcK = (1LL << srcLgK);
-  Long srcRow = 0;
-  for (srcRow = 0; srcRow < srcK; srcRow++) {
+  const Long destMask = (1LL << destLgK) - 1LL; // downsamples when destlgK < srcLgK
+  const Long srcK = 1LL << srcLgK;
+  for (Long srcRow = 0; srcRow < srcK; srcRow++) {
     destMatrix[srcRow & destMask] |= srcMatrix[srcRow];
   }
 }
 
-/*******************************************************************************************/
-
-void ug85ReduceK (UG85 * unioner, Short newLgK) {
+void ug85ReduceK(UG85* unioner, Short newLgK) {
   if (newLgK >= unioner->lgK) throw std::logic_error("newLgK >= unioner->lgK");
   if (unioner->accumulator == NULL && unioner->bitMatrix == NULL) throw std::logic_error("both accumulator and bitMatrix are null");
 
   if (unioner->bitMatrix != NULL) { // downsample the unioner's bit matrix
     if (unioner->accumulator != NULL) throw std::logic_error("accumulator is not null");
-    Long newK = (1LL << newLgK);
-    U64 * newMatrix = (U64 *) fm85alloc ((size_t) (newK * sizeof(U64)));
+    const Long newK = 1LL << newLgK;
+    U64* newMatrix = (U64*) fm85alloc((size_t) (newK * sizeof(U64)));
     if (newMatrix == NULL) throw std::bad_alloc();
-    Long i = 0;
-    for (i = 0; i < newK; i++) { newMatrix[i] = 0LL; } // clear the bit matrix
-    orMatrixIntoMatrix (newMatrix, newLgK, unioner->bitMatrix, unioner->lgK);
-    fm85free (unioner->bitMatrix);
+    for (Long i = 0; i < newK; i++) { newMatrix[i] = 0LL; } // clear the bit matrix
+    orMatrixIntoMatrix(newMatrix, newLgK, unioner->bitMatrix, unioner->lgK);
+    fm85free(unioner->bitMatrix);
     unioner->bitMatrix = newMatrix;
     unioner->lgK = newLgK;
     return;
@@ -151,7 +131,7 @@ void ug85ReduceK (UG85 * unioner, Short newLgK) {
 
   if (unioner->accumulator != NULL) { // downsample the unioner's sketch
     if (unioner->bitMatrix != NULL) throw std::logic_error("bitMatrix is not null");
-    FM85 * oldSketch = unioner->accumulator;
+    FM85* oldSketch = unioner->accumulator;
 
     if (oldSketch->numCoupons == 0) { // if the accumulator is EMPTY, simply change its K.
       if (oldSketch->surprisingValueTable != NULL) throw std::logic_error("oldSketch->surprisingValueTable is not null");
@@ -160,24 +140,23 @@ void ug85ReduceK (UG85 * unioner, Short newLgK) {
       return;
     }
 
-    FM85 * newSketch = fm85Make (newLgK);
+    FM85* newSketch = fm85Make(newLgK);
     if (oldSketch->slidingWindow != NULL || oldSketch->surprisingValueTable == NULL) throw std::logic_error("invalid state");
-    walkTableUpdatingSketch (newSketch, oldSketch->surprisingValueTable);
+    walkTableUpdatingSketch(newSketch, oldSketch->surprisingValueTable);
 
     enum flavorType finalNewFlavor = determineSketchFlavor(newSketch);
     if (finalNewFlavor == EMPTY) throw std::logic_error("finalNewFlavor == EMPTY");
     if (finalNewFlavor == SPARSE) {
       unioner->accumulator = newSketch;
       unioner->lgK = newLgK;
-      fm85Free (oldSketch);
+      fm85Free(oldSketch);
       return;
-    }
-    else { // the new sketch has graduated beyond sparse, so convert to bitMatrix
+    } else { // the new sketch has graduated beyond sparse, so convert to bitMatrix
       unioner->accumulator = NULL;
-      unioner->bitMatrix = bitMatrixOfSketch (newSketch);
+      unioner->bitMatrix = bitMatrixOfSketch(newSketch);
       unioner->lgK = newLgK;
-      fm85Free (oldSketch);
-      fm85Free (newSketch);
+      fm85Free(oldSketch);
+      fm85Free(newSketch);
       return;
     }
   }
@@ -185,16 +164,14 @@ void ug85ReduceK (UG85 * unioner, Short newLgK) {
   throw std::logic_error("invalid state");
 }
 
-/*******************************************************************************************/
-
-void ug85MergeInto (UG85 * unioner, FM85 * source) {
+void ug85MergeInto(UG85* unioner, const FM85* source) {
   if (NULL == unioner) throw std::invalid_argument("unioner is null");
   if (NULL == source) return;
   
   enum flavorType sourceFlavor = determineSketchFlavor(source);
   if (EMPTY == sourceFlavor) return;
 
-  if (source->lgK < unioner->lgK) { ug85ReduceK (unioner, source->lgK); }
+  if (source->lgK < unioner->lgK) { ug85ReduceK(unioner, source->lgK); }
 
   if (source->lgK < unioner->lgK) throw std::logic_error("source->lgK < unioner->lgK");
 
@@ -202,22 +179,22 @@ void ug85MergeInto (UG85 * unioner, FM85 * source) {
 
   if (SPARSE == sourceFlavor && unioner->accumulator != NULL)  { // Case A
     if (unioner->bitMatrix != NULL) throw std::logic_error("unioner->bitMatrix != NULL");
-    enum flavorType initialDestFlavor = determineSketchFlavor (unioner->accumulator);
+    enum flavorType initialDestFlavor = determineSketchFlavor(unioner->accumulator);
     if (EMPTY != initialDestFlavor && SPARSE != initialDestFlavor) throw std::logic_error("wrong flavor");
 
     // The following partially fixes the snowplow problem provided that the K's are equal.
     // A complete fix is coming soon.
     if (EMPTY == initialDestFlavor && unioner->lgK == source->lgK) { 
-      fm85Free (unioner->accumulator);      
+      fm85Free(unioner->accumulator);
       unioner->accumulator = fm85Copy(source);
     }
 
-    walkTableUpdatingSketch (unioner->accumulator, source->surprisingValueTable);
+    walkTableUpdatingSketch(unioner->accumulator, source->surprisingValueTable);
     enum flavorType finalDestFlavor = determineSketchFlavor(unioner->accumulator);
     // if the accumulator has graduated beyond sparse, switch to a bitMatrix representation
     if (finalDestFlavor != EMPTY && finalDestFlavor != SPARSE) {
-      unioner->bitMatrix = bitMatrixOfSketch (unioner->accumulator);
-      fm85Free (unioner->accumulator);
+      unioner->bitMatrix = bitMatrixOfSketch(unioner->accumulator);
+      fm85Free(unioner->accumulator);
       unioner->accumulator = NULL;
     }
     return;
@@ -225,7 +202,7 @@ void ug85MergeInto (UG85 * unioner, FM85 * source) {
 
   if (SPARSE == sourceFlavor && unioner->bitMatrix != NULL)  { // Case B
     if (unioner->accumulator != NULL) throw std::logic_error("unioner->accumulator != NULL");
-    orTableIntoMatrix (unioner->bitMatrix, unioner->lgK, source->surprisingValueTable);
+    orTableIntoMatrix(unioner->bitMatrix, unioner->lgK, source->surprisingValueTable);
     return;
   }
 
@@ -234,33 +211,29 @@ void ug85MergeInto (UG85 * unioner, FM85 * source) {
  // source is past SPARSE mode, so make sure that dest is a bitMatrix.
   if (unioner->accumulator != NULL) {
     if (unioner->bitMatrix != NULL) throw std::logic_error("unioner->bitMatrix != NULL");
-    enum flavorType destFlavor = determineSketchFlavor (unioner->accumulator);
+    enum flavorType destFlavor = determineSketchFlavor(unioner->accumulator);
     if (EMPTY != destFlavor && SPARSE != destFlavor) throw std::logic_error("wrong flavor");
-    unioner->bitMatrix = bitMatrixOfSketch (unioner->accumulator);
-    fm85Free (unioner->accumulator);
+    unioner->bitMatrix = bitMatrixOfSketch(unioner->accumulator);
+    fm85Free(unioner->accumulator);
     unioner->accumulator = NULL;
   }
   if (unioner->bitMatrix == NULL) throw std::logic_error("unioner->bitMatrix == NULL");
 
   if (HYBRID == sourceFlavor || PINNED == sourceFlavor) { // Case C
-    orWindowIntoMatrix (unioner->bitMatrix, unioner->lgK, source->slidingWindow, source->windowOffset, source->lgK);
-    orTableIntoMatrix (unioner->bitMatrix, unioner->lgK, source->surprisingValueTable);
+    orWindowIntoMatrix(unioner->bitMatrix, unioner->lgK, source->slidingWindow, source->windowOffset, source->lgK);
+    orTableIntoMatrix(unioner->bitMatrix, unioner->lgK, source->surprisingValueTable);
     return;
   }
   
   // SLIDING mode involves inverted logic, so we can't just walk the source sketch.
   // Instead, we convert it to a bitMatrix that can be OR'ed into the destination.
   if (SLIDING != sourceFlavor) throw std::logic_error("wrong flavor"); // Case D
-  U64 * sourceMatrix = bitMatrixOfSketch (source);
-  orMatrixIntoMatrix (unioner->bitMatrix, unioner->lgK, sourceMatrix, source->lgK);
-  fm85free (sourceMatrix);
-
-  return;
+  U64* sourceMatrix = bitMatrixOfSketch(source);
+  orMatrixIntoMatrix(unioner->bitMatrix, unioner->lgK, sourceMatrix, source->lgK);
+  fm85free(sourceMatrix);
 }
 
-/*******************************************************************************************/
-
-FM85 * ug85GetResult (UG85 * unioner) {
+FM85* ug85GetResult(const UG85* unioner) {
   if (unioner == NULL) throw std::invalid_argument("unioner == NULL");
   if (unioner->accumulator == NULL && unioner->bitMatrix == NULL) throw std::logic_error("both accumulator and bitMatrix are null");
 
@@ -268,34 +241,34 @@ FM85 * ug85GetResult (UG85 * unioner) {
     if (unioner->bitMatrix != NULL) throw std::logic_error("unioner->bitMatrix != NULL");
     if (unioner->lgK != unioner->accumulator->lgK) throw std::logic_error("unioner->lgK != unioner->accumulator->lgK");
     if (unioner->accumulator->numCoupons == 0) {
-      FM85 * result = fm85Make (unioner->lgK);
+      FM85* result = fm85Make(unioner->lgK);
       result->mergeFlag = 1;
-      return (result);
+      return result;
     }
     if (SPARSE != determineSketchFlavor(unioner->accumulator)) throw std::logic_error("wrong flavor");
-    FM85 * result = fm85Copy (unioner->accumulator);
+    FM85* result = fm85Copy(unioner->accumulator);
     result->mergeFlag = 1;
-    return (result);
+    return result;
   } // end of case where unioner contains a sketch
 
   // start of case where unioner contains a bitMatrix
   if (unioner->bitMatrix == NULL) throw std::logic_error("unioner->bitMatrix == NULL");
   if (unioner->accumulator != NULL) throw std::logic_error("unioner->accumulator != NULL");
-  U64 * matrix = unioner->bitMatrix;
-  Short lgK = unioner->lgK;
-  FM85 * result = fm85Make (unioner->lgK); 
+  const U64* matrix = unioner->bitMatrix;
+  const Short lgK = unioner->lgK;
+  FM85* result = fm85Make(unioner->lgK);
 
-  Long k = (1LL << lgK);
-  Long numCoupons = countBitsSetInMatrix (matrix, k);
+  const Long k = 1LL << lgK;
+  const Long numCoupons = countBitsSetInMatrix(matrix, k);
   result->numCoupons = numCoupons;
 
-  enum flavorType flavor = determineFlavor (lgK, numCoupons);
+  const enum flavorType flavor = determineFlavor(lgK, numCoupons);
   if (flavor != HYBRID && flavor != PINNED && flavor != SLIDING) throw std::logic_error("wrong flavor");
 
-  Short offset = determineCorrectOffset (lgK, numCoupons);
+  const Short offset = determineCorrectOffset(lgK, numCoupons);
   result->windowOffset = offset;
 
-  U8 * window = (U8 *) fm85alloc ((size_t) (k * sizeof(U8)));
+  U8* window = (U8*) fm85alloc((size_t) (k * sizeof(U8)));
   if (window == NULL) throw std::bad_alloc();
   // don't need to zero the window's memory
   if (result->slidingWindow != NULL) throw std::logic_error("result->slidingWindow != NULL");
@@ -304,41 +277,40 @@ FM85 * ug85GetResult (UG85 * unioner) {
   //  u32Table * table = u32TableMake (2, 6 + lgK); // dynamically growing caused snowplow effect
   Short newTableSize = lgK - 4; //   K/16; in some cases this will end up being oversized
   if (newTableSize < 2) newTableSize = 2;
-  u32Table * table = u32TableMake (newTableSize, 6 + lgK); 
+  u32Table* table = u32TableMake(newTableSize, 6 + lgK);
   if (result->surprisingValueTable != NULL) throw std::logic_error("result->surprisingValueTable != NULL");
   result->surprisingValueTable = table;
 
   // I believe that the following works even when the offset is zero.
-  U64 maskForClearingWindow = (0xffULL << offset) ^ ALL64BITS;
-  U64 maskForFlippingEarlyZone = (1ULL << offset) - 1;
+  const U64 maskForClearingWindow = (0xffULL << offset) ^ ALL64BITS;
+  const U64 maskForFlippingEarlyZone = (1ULL << offset) - 1;
   U64 allSurprisesORed = 0;
-  Long i = 0;
 
   // The snowplow effect was caused by processing the rows in order,
   // but we have fixed it by using a sufficiently large hash table.
-  for (i = 0; i < k; i++) {
+  for (Long i = 0; i < k; i++) {
     U64 pattern = matrix[i];
     window[i] = (U8) ((pattern >> offset) & 0xff);
     pattern &= maskForClearingWindow;
     pattern ^= maskForFlippingEarlyZone; // This flipping converts surprising 0's to 1's.
     allSurprisesORed |= pattern;
     while (pattern != 0) {
-      Short col = countTrailingZerosInUnsignedLong (pattern);
+      Short col = countTrailingZerosInUnsignedLong(pattern);
       pattern = pattern ^ (1ULL << col); // erase the 1.
-      U32 rowCol = (i << 6) | col;
-      Boolean isNovel = u32TableMaybeInsert (table, rowCol);
-      if (isNovel != 1) throw std::logic_error("isNovel != 1");
+      const U32 rowCol = (i << 6) | col;
+      bool isNovel = u32TableMaybeInsert(table, rowCol);
+      if (!isNovel) throw std::logic_error("isNovel != true");
     }
   }
 
   // At this point we could shrink an oversized hash table, but the relative waste isn't very big.
 
-  result->firstInterestingColumn = countTrailingZerosInUnsignedLong (allSurprisesORed);
+  result->firstInterestingColumn = countTrailingZerosInUnsignedLong(allSurprisesORed);
   if (result->firstInterestingColumn > offset) result->firstInterestingColumn = offset; // corner case
 
   // NB: the HIP-related fields will contain bogus values, but that is okay.
 
-  result->mergeFlag = 1;
+  result->mergeFlag = true;
   return result;
   // end of case where unioner contains a bitMatrix
 }
diff --git a/cpc/src/fm85Util.cpp b/cpc/src/fm85Util.cpp
index 1f6e8a2..c08f604 100644
--- a/cpc/src/fm85Util.cpp
+++ b/cpc/src/fm85Util.cpp
@@ -26,43 +26,33 @@
 
 extern void* (*fm85alloc)(size_t);
 
-/******************************************/
-
-void * shallowCopy (void * oldObject, size_t numBytes) {
+void* shallowCopy(const void* oldObject, size_t numBytes) {
   if (oldObject == NULL || numBytes == 0) throw std::invalid_argument("shallowCopyObject: bad argument");
-  void * newObject = fm85alloc (numBytes);
+  void* newObject = fm85alloc(numBytes);
   if (newObject == NULL) throw std::bad_alloc();
-  memcpy (newObject, oldObject, numBytes);
-  return (newObject);
+  memcpy(newObject, oldObject, numBytes);
+  return newObject;
 }
 
-/******************************************/
-
 U8 byteLeadingZerosTable[256];
 
-U8 slow_count_leading_zeros_in_byte (U8 the_byte)
-{
-  int shift;
+U8 slow_count_leading_zeros_in_byte(U8 the_byte) {
   int count = 0;
-  for (shift = 7; shift >= 0; shift--) {
-    int is_zero = !((the_byte >> shift) & 1);
-    if (is_zero)
+  for (int shift = 7; shift >= 0; shift--) {
+    if (((the_byte >> shift) & 1) == 0) {
       count++;
-    else
+    } else {
       break;
+    }
   }
   return count;
 }
 
-void fillByteLeadingZerosTable(void)
-{
-  int j;
-  for (j = 0; j < 256; j++)
+void fillByteLeadingZerosTable(void) {
+  for (int j = 0; j < 256; j++)
     byteLeadingZerosTable[j] = slow_count_leading_zeros_in_byte ((U8) j);
 }
 
-/******************************************/
-
 #define FCLZ_MASK_56 ((U64) 0x00ffffffffffffff)
 #define FCLZ_MASK_48 ((U64) 0x0000ffffffffffff)
 #define FCLZ_MASK_40 ((U64) 0x000000ffffffffff)
@@ -71,7 +61,7 @@ void fillByteLeadingZerosTable(void)
 #define FCLZ_MASK_16 ((U64) 0x000000000000ffff)
 #define FCLZ_MASK_08 ((U64) 0x00000000000000ff)
 
-Short countLeadingZerosInUnsignedLong (U64 theInput) {
+Short countLeadingZerosInUnsignedLong(U64 theInput) {
   if (theInput > FCLZ_MASK_56)
     return ((Short) ( 0 + byteLeadingZerosTable[(theInput >> 56) & FCLZ_MASK_08]));
   if (theInput > FCLZ_MASK_48)
@@ -90,125 +80,101 @@ Short countLeadingZerosInUnsignedLong (U64 theInput) {
     return ((Short) (56 + byteLeadingZerosTable[(theInput >>  0) & FCLZ_MASK_08]));
 }
 
-/******************************************/
-
 U8 byteTrailingZerosTable[256];
 
-// U8 lookupByteTrailingZeros (int x) { return (byteTrailingZerosTable[x]); }
-
-U8 slow_count_trailing_zeros_in_byte (U8 the_byte)
-{
-  int shift;
+U8 slow_count_trailing_zeros_in_byte(U8 the_byte) {
   int count = 0;
-  for (shift = 0; shift <= 7; shift++) {
-    int is_zero = !((the_byte >> shift) & 1);
-    if (is_zero)
+  for (int shift = 0; shift <= 7; shift++) {
+    if (((the_byte >> shift) & 1) == 0) {
       count++;
-    else
+    } else {
       break;
+    }
   }
   return count;
 }
 
-void fillByteTrailingZerosTable(void)
-{
-  int j;
-  for (j = 0; j < 256; j++)
-    byteTrailingZerosTable[j] = slow_count_trailing_zeros_in_byte ((U8) j);    
+void fillByteTrailingZerosTable(void) {
+  for (int j = 0; j < 256; j++)
+    byteTrailingZerosTable[j] = slow_count_trailing_zeros_in_byte((U8) j);
 }
 
-Short countTrailingZerosInUnsignedLong (U64 theInput) {
+Short countTrailingZerosInUnsignedLong(U64 theInput) {
   U64 tmp = theInput;
-  int byte;
-  int j = 0;
-  for (j = 0; j < 8; j++) {
-    byte = (tmp & 0xffULL);
+  for (int j = 0; j < 8; j++) {
+    const int byte = (tmp & 0xffULL);
     if (byte != 0) return ((Short) ((j << 3) + byteTrailingZerosTable[byte]));
     tmp >>= 8;
   }
   return ((Short) (64));
 }
 
-/******************************************/
-
 double invPow2Tab[256];
 
-void fillInvPow2Tab (void)
-{
-  int j;
-  for (j = 0; j < 256; j++) {
+void fillInvPow2Tab(void) {
+  for (int j = 0; j < 256; j++) {
     invPow2Tab[j] = pow (2.0, (-1.0 * ((double) j)));
   }
 }
 
-/******************************************/
-
 double kxpByteLookup[256];
 
-void fillKxpByteLookup (void) // must call fillInvPow2Tab() first
-{
-  int byte, col;
-  for (byte = 0; byte < 256; byte++) {
+void fillKxpByteLookup(void) { // must call fillInvPow2Tab() first
+  for (int byte = 0; byte < 256; byte++) {
     double sum = 0.0;
-    for (col = 0; col < 8; col++) {
+    for (int col = 0; col < 8; col++) {
       int bit = (byte >> col) & 1;
       if (bit == 0) { // note the inverted logic
-	sum += invPow2Tab[col+1]; // note the "+1"
+        sum += invPow2Tab[col+1]; // note the "+1"
       }
-    }      
+    }
     kxpByteLookup[byte] = sum;
   }
 }
 
-
-/******************************************/
-
-Long divideLongsRoundingUp (Long x, Long y) {
+Long divideLongsRoundingUp(Long x, Long y) {
   if (x < 0 || y <= 0) throw std::invalid_argument("divideLongsRoundingUp: bad argument");
-  Long quotient = x / y;
+  const Long quotient = x / y;
   if (quotient * y == x) return (quotient);
   else return (quotient + 1);
 }
 
-Long longFloorLog2OfLong (Long x) {
+Long longFloorLog2OfLong(Long x) {
   if (x < 1L) throw std::invalid_argument("longFloorLog2OfLong: bad argument");
   Long p = 0;
   Long y = 1;
- log2Loop:
-  if (y == x) return (p);
-  if (y  > x) return (p-1);
-  p  += 1;
-  y <<= 1;
-  goto log2Loop;
+  while (true) {
+    if (y == x) return p;
+    if (y  > x) return p - 1;
+    p += 1;
+    y <<= 1;
+  }
 }
 
-/***********************************/
-
 // returns an integer that is between 
 // zero and ceiling(log_2(k))-1, inclusive
 
-Long golombChooseNumberOfBaseBits (Long k, Long count) {
+Long golombChooseNumberOfBaseBits(Long k, Long count) {
   if (k < 1L) throw std::invalid_argument("golombChooseNumberOfBaseBits: k < 1");
   if (count < 1L) throw std::invalid_argument("golombChooseNumberOfBaseBits: count < 1");
-  Long quotient = (k - count) / count; // integer division
+  const Long quotient = (k - count) / count; // integer division
   if (quotient == 0) return (0);
   else return (longFloorLog2OfLong(quotient));
 }
 
 
-/*******************************************************/
 // This place-holder code was inadequate because it caused
 // the cost of the post-merge getResult() operation to be O(C)
 // instead of O(K). It did have the advantage of being
 // very simple and trustworthy during initial testing.
 
-Long wegnerCountBitsSetInMatrix (U64 * array, Long length) {
+Long wegnerCountBitsSetInMatrix(const U64* array, Long length) {
   Long i = 0;
   U64 pattern = 0;
   Long count = 0;
   //  clock_t t0, t1;
   //  t0 = clock();
-// Wegner's Bit-Counting Algorithm, CACM 3 (1960), p. 322.
+  // Wegner's Bit-Counting Algorithm, CACM 3 (1960), p. 322.
   for (i = 0; i < length; i++) {
     pattern = array[i];
     while (pattern != 0) { 
@@ -223,8 +189,7 @@ Long wegnerCountBitsSetInMatrix (U64 * array, Long length) {
   return count;
 }
 
-/*******************************************************/
-// Note: this is an adaptation of the Java code that Lee sent me,
+// Note: this is an adaptation of the Java code,
 // which is apparently a variation of Figure 5-2 in "Hacker's Delight"
 // by Henry S. Warren.
 
@@ -238,28 +203,25 @@ static inline Long warrenBitCount(U64 i) {
   return (Long)i & 0x7f;
 }
 
-Long warrenCountBitsSetInMatrix (U64 * array, Long length) {
-  Long i = 0;
+Long warrenCountBitsSetInMatrix(const U64* array, Long length) {
   Long count = 0;
-  for (i = 0; i < length; i++) {
+  for (Long i = 0; i < length; i++) {
     count += warrenBitCount(array[i]);
   }
   return count;
 }
 
-/*******************************************************/
 // This code is Figure 5-9 in "Hacker's Delight" by Henry S. Warren.
 
 #define CSA(h,l,a,b,c) {U64 u = a^b; U64 v = c; h = (a&b) | (u&v); l = u^v;}
 
-Long countBitsSetInMatrix (U64 * A, Long length) {
+Long countBitsSetInMatrix(const U64* A, Long length) {
   if ((length & 0x7) != 0) throw std::invalid_argument("the length of the array must be a multiple of 8");
-  Long tot, i;
+  Long tot = 0;
   U64 ones, twos, twosA, twosB, fours, foursA, foursB, eights;
-  tot = 0;
   fours = twos = ones = 0;
 
-  for (i = 0; i <= length - 8; i = i + 8) {
+  for (Long i = 0; i <= length - 8; i = i + 8) {
     CSA(twosA, ones, ones, A[i+0], A[i+1]);
     CSA(twosB, ones, ones, A[i+2], A[i+3]);
     CSA(foursA, twos, twos, twosA, twosB);
@@ -272,7 +234,7 @@ Long countBitsSetInMatrix (U64 * A, Long length) {
 
     tot += warrenBitCount(eights);
   }
-  tot = 8*tot + 4*warrenBitCount(fours) + 2*warrenBitCount(twos) + warrenBitCount(ones);
+  tot = 8 * tot + 4 * warrenBitCount(fours) + 2 * warrenBitCount(twos) + warrenBitCount(ones);
 
   // Because I still don't fully trust this fancy version
   // assert(tot == wegnerCountBitsSetInMatrix(A, length));
@@ -280,7 +242,6 @@ Long countBitsSetInMatrix (U64 * A, Long length) {
   return (tot);
 }
 
-/*********************************************/
 // Here are some timings made with quickTestMerge.c
 // for the "5 5" case:
 
diff --git a/cpc/src/iconEstimator.cpp b/cpc/src/iconEstimator.cpp
index d1d1e48..3b12437 100644
--- a/cpc/src/iconEstimator.cpp
+++ b/cpc/src/iconEstimator.cpp
@@ -28,8 +28,6 @@
 
 #include <stdexcept>
 
-/******************************************************************************************/
-
 // The ICON estimator for FM85 sketches is defined by the arXiv paper.
 
 // The current file provides exact and approximate implementations of this estimator.
@@ -47,8 +45,6 @@
 // This file also provides a validation procedure that compares its approximate 
 // and exact implementations of the FM85 ICON estimator.
 
-/******************************************************************************************/
-
 #define iconMinLogK 4
 
 #define iconMaxLogK 26
@@ -59,9 +55,8 @@
 
 #define iconTableSize (iconPolynomialNumCoefficients * (1 + (iconMaxLogK - iconMinLogK)))
 
-/******************************************************************************************/
 
-double iconPolynomialCoefficents [iconTableSize] = {
+const double iconPolynomialCoefficents[iconTableSize] = {
 
  // log K = 4
  0.9895027971889700513, 0.3319496644645180128, 0.1242818722715769986, -0.03324149686026930256, -0.2985637298081619817,
@@ -241,67 +236,57 @@ double iconPolynomialCoefficents [iconTableSize] = {
 #endif
 };
 
-/******************************************************************************************/
-
-double evaluatePolynomial (double * coefficients, int start, int num, double x) {
-  int final = start + num - 1;
+double evaluatePolynomial(const double* coefficients, int start, int num, double x) {
+  const int final = start + num - 1;
   double total = coefficients[final];
-  int j;
-  for (j = final-1; j >= start; j--) {
+  for (int j = final - 1; j >= start; j--) {
     total *= x;
     total += coefficients[j];
   }
   return total;
 }
 
-/******************************************************************************************/
-
-double iconExponentialApproximation (double k, double c) {
+double iconExponentialApproximation(double k, double c) {
   return (0.7940236163830469 * k * pow(2.0, c / k));
 }
-/******************************************************************************************/
 
-double getIconEstimate (Short lgK, Long c) {
+double getIconEstimate(Short lgK, Long c) {
   if (lgK < iconMinLogK || lgK > iconMaxLogK) throw std::out_of_range("lgK out of range");
   if (c < 2L) return ((c == 0L) ? 0.0 : 1.0);
-  Long k = 1L << lgK;  
-  double doubleK = (double) k;
-  double doubleC = (double) c;
+  const Long k = 1L << lgK;
+  const double doubleK = (double) k;
+  const double doubleC = (double) c;
   // Differing thresholds ensure that the approximated estimator is monotonically increasing.
-  double thresholdFactor = ((lgK < 14) ? 5.7 : 5.6); 
-  if (doubleC > (thresholdFactor * doubleK)) return (iconExponentialApproximation (doubleK, doubleC));
-  double factor = evaluatePolynomial (iconPolynomialCoefficents,
+  const double thresholdFactor = ((lgK < 14) ? 5.7 : 5.6);
+  if (doubleC > (thresholdFactor * doubleK)) return iconExponentialApproximation(doubleK, doubleC);
+  const double factor = evaluatePolynomial(iconPolynomialCoefficents,
 				      iconPolynomialNumCoefficients * (lgK - iconMinLogK),
 				      iconPolynomialNumCoefficients,
   // The somewhat arbitrary constant 2.0 is baked into the table iconPolynomialCoefficents[].
 				      doubleC / (2.0 * doubleK)); 
-  double ratio = doubleC / doubleK;
+  const double ratio = doubleC / doubleK;
   // The somewhat arbitrary constant 66.774757 is baked into the table iconPolynomialCoefficents[].
-  double term = 1.0 + (ratio * ratio * ratio / 66.774757);
-  double result = doubleC * factor * term;
+  const double term = 1.0 + (ratio * ratio * ratio / 66.774757);
+  const double result = doubleC * factor * term;
   if (result >= doubleC) return result;
   else return doubleC;
 }
 
-/******************************************************************************************/
-/******************************************************************************************/
-
 #ifdef SLOW_EXACT_VERSION
 
 // Important note: do not change anything in the following function.
 // It has been carefully designed and tested for numerical accuracy.
 // In particular, the use of log1p and expm1 is critically important.
 
-static inline double qnj (double kf, double nf, int col) {
-  double tmp1 = -1.0 / (kf * (pow (2.0, ((double) col))));
-  double tmp2 = log1p (tmp1);
-  return (-1.0 * (expm1 (nf * tmp2)));
+static inline double qnj(double kf, double nf, int col) {
+  const double tmp1 = -1.0 / (kf * (pow(2.0, ((double) col))));
+  const double tmp2 = log1p(tmp1);
+  return (-1.0 * (expm1(nf * tmp2)));
 }
 
-double exactCofN (double kf, double nf) {
+double exactCofN(double kf, double nf) {
   double total = 0.0;
-  int col;
-  for (col=128; col >= 1; col--) { 
+  for (int col = 128; col >= 1; col--) {
     total += qnj (kf, nf, col);
   };
   return (kf * total);
@@ -309,7 +294,7 @@ double exactCofN (double kf, double nf) {
 
 #define iconInversionTolerance 1.0e-15
 
-double exactIconEstimatorBinarySearch (double kf, double targetC, double nLoIn, double nHiIn) {
+double exactIconEstimatorBinarySearch(double kf, double targetC, double nLoIn, double nHiIn) {
   int depth = 0;
   double nLo = nLoIn;
   double nHi = nHiIn;
@@ -319,14 +304,14 @@ double exactIconEstimatorBinarySearch (double kf, double targetC, double nLoIn,
   double nMid = nLo + 0.5 * (nHi - nLo);
   if (nMid <= nLo || nMid >= nHi) throw std::logic_error("binary search error");
   if (((nHi - nLo) / nMid) < iconInversionTolerance) return (nMid);
-  double midC = exactCofN (kf, nMid);
+  double midC = exactCofN(kf, nMid);
   if (midC == targetC) return (nMid);
   if (midC  < targetC) {nLo = nMid; depth++; goto tailRecurse;}
   if (midC  > targetC) {nHi = nMid; depth++; goto tailRecurse;}
   throw std::logic_error("bad value in binary search");
 }
 
-double exactIconEstimatorBracketHi (double kf, double targetC, double nLo) {
+double exactIconEstimatorBracketHi(double kf, double targetC, double nLo) {
   int depth = 0;
   double curN = 2.0 * nLo;
   double curC = exactCofN(kf, curN);
@@ -337,43 +322,37 @@ double exactIconEstimatorBracketHi (double kf, double targetC, double nLo) {
     curC = exactCofN(kf, curN);
   }
   if (curC <= targetC) throw std::logic_error("error in exactIconEstimatorBracketHi");
-  return (curN);
+  return curN;
 }
 
-double exactIconEstimator (int lgK, long c) {
+double exactIconEstimator(int lgK, long c) {
   double targetC = (double) c;
   if (c == 0L || c == 1L) return (targetC);
   double kf = (double) (1L << lgK);
   double nLo = targetC; if (exactCofN(kf, nLo) >= targetC) throw std::logic_error("bracket lo error"); // bracket lo
-  double nHi = exactIconEstimatorBracketHi (kf, targetC, nLo); // bracket hi
-  return (exactIconEstimatorBinarySearch (kf, targetC, nLo, nHi));
+  double nHi = exactIconEstimatorBracketHi(kf, targetC, nLo); // bracket hi
+  return exactIconEstimatorBinarySearch(kf, targetC, nLo, nHi);
 }
 
-/*
-  while  (exactCofN(kf, nHi) <= targetC) {nHi *= 2.0;} // bracket
-*/
-
 #endif
 
-/*******************************************************/
-
 #ifdef TESTING_DRIVER
 
-int main (int argc, char ** argv) {
+int main(int argc, char ** argv) {
   if (argc != 2) {
-    fprintf (stderr, "Usage: %s lg_k > output_file\n", argv[0]); fflush (stderr);
+    fprintf(stderr, "Usage: %s lg_k > output_file\n", argv[0]); fflush(stderr);
     exit(EXIT_FAILURE);
   }
   int lgK = atoi(argv[1]);
-  long k = (1L << lgK);
+  const long k = 1L << lgK;
   long c = 1;
   while (c < k * 64) { // was k * 15
-    double exact  = exactIconEstimator (lgK, c);
-    double approx = approximateIconEstimator (lgK, c);
-    double relDiff = (approx - exact) / exact;
-    printf ("%ld\t%.19g\t%.19g\t%.19g\n", c, relDiff, exact, approx);
-    long a = c+1;
-    long b = 1001 * c / 1000;
+    const double exact  = exactIconEstimator(lgK, c);
+    const double approx = approximateIconEstimator(lgK, c);
+    const double relDiff = (approx - exact) / exact;
+    printf("%ld\t%.19g\t%.19g\t%.19g\n", c, relDiff, exact, approx);
+    const long a = c + 1;
+    const long b = 1001 * c / 1000;
     c = ((a > b) ? a : b);
   }
 }
diff --git a/cpc/src/u32Table.cpp b/cpc/src/u32Table.cpp
index 8b19d5c..ef4a0c1 100644
--- a/cpc/src/u32Table.cpp
+++ b/cpc/src/u32Table.cpp
@@ -29,52 +29,39 @@
 extern void* (*fm85alloc)(size_t);
 extern void (*fm85free)(void*);
 
-/*******************************************************/
-
-u32Table * u32TableMake (Short lgSize, Short numValidBits) {
+u32Table* u32TableMake(Short lgSize, Short numValidBits) {
   if (lgSize < 2) throw std::invalid_argument("lgSize must be >= 2");
-  Long numSlots = (1LL << lgSize);
-  u32Table * self = (u32Table *) fm85alloc (sizeof(u32Table));
+  const Long numSlots = 1LL << lgSize;
+  u32Table* self = (u32Table*) fm85alloc(sizeof(u32Table));
   if (self == NULL) throw std::bad_alloc();
-  U32 * arr = (U32 *) fm85alloc ((size_t) (numSlots * sizeof(U32)));
+  U32* arr = (U32*) fm85alloc((size_t) (numSlots * sizeof(U32)));
   if (arr == NULL) throw std::bad_alloc();
-  Long i = 0;
-  for (i = 0; i < numSlots; i++) { arr[i] = ALL32BITS; }
+  for (Long i = 0; i < numSlots; i++) { arr[i] = ALL32BITS; }
   if (numValidBits < 1 || numValidBits > 32) throw std::invalid_argument("numValidBits must be between 1 and 32");
   self->validBits = numValidBits;
   self->lgSize = lgSize;
   self->numItems = 0;
   self->slots = arr;
-  return (self);
+  return self;
 }
 
-/*******************************************************/
-
-u32Table * u32TableCopy (u32Table * self) {
+u32Table* u32TableCopy(const u32Table* self) {
   if (self == NULL) throw std::invalid_argument("self is null");
   if (self->slots == NULL) throw std::invalid_argument("no slots");
-  Long numSlots = (1LL << self->lgSize);
-  u32Table * newObj = (u32Table *) shallowCopy ((void *) self, sizeof(u32Table));
-  newObj->slots = (U32 *) shallowCopy ((void *) self->slots, ((size_t) numSlots) * sizeof(U32));
-  return (newObj);
+  const Long numSlots = 1LL << self->lgSize;
+  u32Table* newObj = (u32Table*) shallowCopy((void*) self, sizeof(u32Table));
+  newObj->slots = (U32*) shallowCopy((void*) self->slots, ((size_t) numSlots) * sizeof(U32));
+  return newObj;
 }
 
-//  newObj->validBits = self->validBits;
-//  newObj->lgSize    = self->lgSize;
-//  newObj->numItems  = self->numItems;
-
-/*******************************************************/
-
-void u32TableFree (u32Table * self) {
+void u32TableFree(u32Table* self) {
   if (self != NULL) {
-    if (self->slots != NULL) fm85free (self->slots);
-    fm85free (self);
+    if (self->slots != NULL) fm85free(self->slots);
+    fm85free(self);
   }
 }
 
-/*******************************************************/
-
-void u32TableShow (u32Table * self) {
+void u32TableShow(const u32Table* self) {
   Long tableSize = 1LL << self->lgSize;
   printf ("\nu32Table (%d valid bits; %lld of %lld slots occupied)\n",
 	  self->validBits, (long long int) self->numItems, (long long int) tableSize);
@@ -87,45 +74,35 @@ void u32TableShow (u32Table * self) {
   fflush (stdout);
 }
 
-/*******************************************************/
-
-void u32TableClear (u32Table * self) { // clear the table without resizing it
-  Long tableSize = 1LL << self->lgSize;
-  U32 * arr = self->slots;
-  Long i;
-  for (i = 0; i < tableSize; i++) { arr[i] = ALL32BITS; }
+void u32TableClear(u32Table* self) { // clear the table without resizing it
+  const Long tableSize = 1LL << self->lgSize;
+  U32* arr = self->slots;
+  for (Long i = 0; i < tableSize; i++) { arr[i] = ALL32BITS; }
   self->numItems = 0;
 }
 
-/*******************************************************/
-
-void printU32Array (U32 * array, Long arrayLength) {
-  Long i = 0;
+void printU32Array(const U32* array, Long arrayLength) {
   printf ("\nu32Array [%lld]\n", (long long int) arrayLength);
-  for (i = 0; i < arrayLength; i++) {
+  for (Long i = 0; i < arrayLength; i++) {
     printf ("%d:\t%8X\n", (int) i, array[i]);    
   }
-  fflush (stdout);
+  fflush(stdout);
 }
 
-/*******************************************************/
-
 #define U32_TABLE_LOOKUP_SHARED_CODE_SECTION \
-  Long tableSize = 1LL << self->lgSize; \
-  Long mask = tableSize - 1LL; \
-  Short shift = self->validBits - self->lgSize; \
+  const Long tableSize = 1LL << self->lgSize; \
+  const Long mask = tableSize - 1LL; \
+  const Short shift = self->validBits - self->lgSize; \
   Long probe = ((Long) item) >> shift; \
   if (probe < 0 || probe > mask) throw std::out_of_range("probe out of range"); \
-  U32 * arr = self->slots; \
+  U32* arr = self->slots; \
   U32 fetched = arr[probe]; \
   while (fetched != item && fetched != ALL32BITS) { \
     probe = (probe + 1) & mask; \
     fetched = arr[probe]; \
   }
 
-/*******************************************************/
-
-void u32TableMustInsert (u32Table * self, U32 item) {
+void u32TableMustInsert(u32Table* self, U32 item) {
   U32_TABLE_LOOKUP_SHARED_CODE_SECTION;
   if (fetched == item) { throw std::logic_error("item exists"); }
   else {
@@ -135,58 +112,48 @@ void u32TableMustInsert (u32Table * self, U32 item) {
   }
 }
 
-/*******************************************************/
-
 // This one is specifically tailored to be part of our fm85 decompression scheme.
 
-u32Table * makeU32TableFromPairsArray (U32 * pairs, Long numPairs, Short sketchLgK) {
+u32Table* makeU32TableFromPairsArray(const U32* pairs, Long numPairs, Short sketchLgK) {
   Short lgNumSlots = 2;
   while (u32TableUpsizeDenom * numPairs > u32TableUpsizeNumer * (1LL << lgNumSlots)) { lgNumSlots++; }
-  u32Table * table = u32TableMake (lgNumSlots, 6 + sketchLgK); // Already filled with the "Empty" value which is ALL32BITS.
-  Long i = 0;
+  u32Table* table = u32TableMake(lgNumSlots, 6 + sketchLgK); // Already filled with the "Empty" value which is ALL32BITS.
   // Note: there is a possible "snowplow effect" here because the caller is passing in a sorted pairs array.
   // However, we are starting out with the correct final table size, so the problem might not occur.
-  for (i = 0; i < numPairs; i++) {
-    u32TableMustInsert (table, pairs[i]);
+  for (Long i = 0; i < numPairs; i++) {
+    u32TableMustInsert(table, pairs[i]);
   }
   table->numItems = numPairs;
-  return (table);
+  return table;
 }
 
-/*******************************************************/
-
-void privateU32TableRebuild (u32Table * self, Short newLgSize) {
+void privateU32TableRebuild(u32Table* self, Short newLgSize) {
   if (newLgSize < 2) throw std::logic_error("newLgSize < 2");
-  Long newSize = (1LL << newLgSize);
-  Long oldSize = (1LL << self->lgSize);
-  //  printf ("rebuilding: %lld -> %lld; %lld items in table\n", oldSize, newSize, self->numItems); fflush (stdout);
+  const Long newSize = 1LL << newLgSize;
+  const Long oldSize = 1LL << self->lgSize;
   if (newSize <= self->numItems) throw std::logic_error("newSize <= numItems");
-  U32 * oldSlots = self->slots;
-  U32 * newSlots = (U32 *) fm85alloc ((size_t) (newSize * sizeof(U32)));
+  U32* oldSlots = self->slots;
+  U32* newSlots = (U32*) fm85alloc((size_t) (newSize * sizeof(U32)));
   if (newSlots == NULL) throw std::bad_alloc();
-  Long i;
-  for (i = 0; i < newSize; i++) { 
+  for (Long i = 0; i < newSize; i++) {
     newSlots[i] = ALL32BITS;
   }  
   self->slots = newSlots;
   self->lgSize = newLgSize;
-  for (i = 0; i < oldSize; i++) {
+  for (Long i = 0; i < oldSize; i++) {
     U32 item = oldSlots[i];
     if (item != ALL32BITS) {
-      u32TableMustInsert (self, item);
+      u32TableMustInsert(self, item);
     }
   }
-  fm85free (oldSlots);
-  return;
+  fm85free(oldSlots);
 }
 
-/*******************************************************/
-
 // Returns true iff the item was new and was therefore added to the table.
 
-Boolean u32TableMaybeInsert (u32Table * self, U32 item) {
+bool u32TableMaybeInsert(u32Table* self, U32 item) {
   U32_TABLE_LOOKUP_SHARED_CODE_SECTION;
-  if (fetched == item) { return 0; }
+  if (fetched == item) { return false; }
   else {
     if (fetched != ALL32BITS) throw std::logic_error("could not insert");
     arr[probe] = item;
@@ -194,17 +161,15 @@ Boolean u32TableMaybeInsert (u32Table * self, U32 item) {
     while (u32TableUpsizeDenom * self->numItems > u32TableUpsizeNumer * (1LL << self->lgSize)) {
       privateU32TableRebuild(self, self->lgSize + 1);
     }
-    return 1;
+    return true;
   }
 }
 
-/*******************************************************/
-
 // Returns true iff the item was present and was therefore removed from the table.
 
-Boolean u32TableMaybeDelete (u32Table * self, U32 item) {
+bool u32TableMaybeDelete(u32Table* self, U32 item) {
   U32_TABLE_LOOKUP_SHARED_CODE_SECTION;
-  if (fetched == ALL32BITS) { return 0; }
+  if (fetched == ALL32BITS) { return false; }
   else {
     if (fetched != item) throw std::logic_error("item does not exist");
     // delete the item
@@ -224,24 +189,22 @@ Boolean u32TableMaybeDelete (u32Table * self, U32 item) {
     while (u32TableDownsizeDenom * self->numItems < u32TableDownsizeNumer * (1LL << self->lgSize) && self->lgSize > 2) {
       privateU32TableRebuild(self, self->lgSize - 1);
     }
-    return 1;
+    return true;
   }
 }
 
-/*******************************************************/
-
 // While extracting the items from a linear probing hashtable,
 // this will usually undo the wrap-around provided that the table 
 // isn't too full. Experiments suggest that for sufficiently large tables 
 // the load factor would have to be over 90 percent before this would fail frequently, 
 // and even then the subsequent sort would fix things up.
 
-U32 * u32TableUnwrappingGetItems (u32Table * self, Long * returnNumItems) {
+U32* u32TableUnwrappingGetItems(const u32Table* self, Long* returnNumItems) {
   *returnNumItems = self->numItems;
   if (self->numItems < 1) { return (NULL); }
-  U32 * slots = self->slots;
-  Long tableSize = (1LL << self->lgSize);
-  U32 * result = (U32 *) fm85alloc ((size_t) (self->numItems * sizeof(U32)));
+  U32* slots = self->slots;
+  const Long tableSize = 1LL << self->lgSize;
+  U32* result = (U32*) fm85alloc((size_t) (self->numItems * sizeof(U32)));
   if (result == NULL) throw std::bad_alloc();
   Long i = 0;
   Long l = 0;
@@ -261,32 +224,31 @@ U32 * u32TableUnwrappingGetItems (u32Table * self, Long * returnNumItems) {
     if (look != ALL32BITS) { result[l++] = look; }
   }
   if (l != r + 1) throw std::logic_error("unwrapping error");
-  return (result);
+  return result;
 }
 
 
-/*******************************************************/
 // The Java version won't need this, because it provides a good array sort.
 
-void u32KnuthShellSort3(U32 a[], Long l, Long r)
-{ Long i, h;
-  for (h = 1; h <= (r-l)/9; h = 3*h+1) ;
+void u32KnuthShellSort3(U32 a[], Long l, Long r) {
+  Long h;
+  for (h = 1; h <= (r-l)/9; h = 3*h+1);
   for ( ; h > 0; h /= 3) {
-    for (i = l+h; i <= r; i++) {
-      Long j = i; U32 v = a[i]; 
-      while (j >= l+h && v < a[j-h])
-	{ a[j] = a[j-h]; j -= h; }
+    for (Long i = l+h; i <= r; i++) {
+      Long j = i; U32 v = a[i];
+      while (j >= l + h && v < a[j - h]) {
+        a[j] = a[j - h]; j -= h;
+      }
       a[j] = v; 
     } 
   }
   Long bad = 0;
-  for (i = l; i < r-1; i++) {
-    if (a[i] > a[i+1]) bad++;
+  for (Long i = l; i < r - 1; i++) {
+    if (a[i] > a[i + 1]) bad++;
   };
   if (bad != 0) throw std::logic_error("sorting error");
 }
 
-/*******************************************************/
 // In applications where the input array is already nearly sorted,
 // insertion sort runs in linear time with a very small constant.
 // This introspective version of insertion sort protects against
@@ -294,49 +256,38 @@ void u32KnuthShellSort3(U32 a[], Long l, Long r)
 // It keeps track of how much work has been done, and if that exceeds a
 // constant times the array length, it switches to a different sorting algorithm.
 
-void introspectiveInsertionSort(U32 a[], Long l, Long r) // r points AT the rightmost element
-{ Long i;
-  Long length = r - l + 1;
+void introspectiveInsertionSort(U32 a[], Long l, Long r) { // r points AT the rightmost element
+  const Long length = r - l + 1;
   Long cost = 0;
   Long costLimit = 8 * length;
-  for (i = l+1; i <= r; i++) {
+  for (Long i = l + 1; i <= r; i++) {
     Long j = i; 
     U32 v = a[i]; 
-    while (j >= l+1 && v < a[j-1]) { 
-      a[j] = a[j-1]; 
+    while (j >= l + 1 && v < a[j - 1]) {
+      a[j] = a[j - 1];
       j -= 1; 
     }
     a[j] = v; 
-    cost += (i - j); // distance moved is a measure of work
+    cost += i - j; // distance moved is a measure of work
     if (cost > costLimit) {
-      //fprintf (stderr, "switching to the other sorting algorithm\n"); fflush (stderr);
       u32KnuthShellSort3(a, l, r); // In the Java version, this should be the system's array sort.
       return;
     }
   } 
-  // The following sanity check can eventually go away, but it seems like a
-  // good idea to perform it while the code is under development.
-  //  Long bad = 0;
-  //  for (i = l; i < r-1; i++) {
-  //    if (a[i] > a[i+1]) bad++;
-  //  };
-  //  assert (bad == 0);
 }
 
 
-//  printf ("cost was %lld (arrlen=%lld)\n", cost, length); fflush (stdout);
-
-
-/******************************************************/
 // This merge is safe to use in carefully designed overlapping scenarios.
 
-void u32Merge (U32 * arrA, Long startA, Long lengthA, // input
-	       U32 * arrB, Long startB, Long lengthB, // input
-	       U32 * arrC, Long startC) { // output
-  Long lengthC = lengthA + lengthB;
-  Long limA = startA + lengthA;
-  Long limB = startB + lengthB;
-  Long limC = startC + lengthC;
+void u32Merge(
+    const U32* arrA, Long startA, Long lengthA, // input
+    const U32* arrB, Long startB, Long lengthB, // input
+    U32* arrC, Long startC) // output
+{
+  const Long lengthC = lengthA + lengthB;
+  const Long limA = startA + lengthA;
+  const Long limB = startB + lengthB;
+  const Long limC = startC + lengthC;
   Long a = startA;
   Long b = startB;
   Long c = startC;
@@ -350,12 +301,9 @@ void u32Merge (U32 * arrA, Long startA, Long lengthA, // input
 }
 
 
-
-/*******************************************************/
-
 #ifdef TOKUDA
 
-Long tokudaIncrements [48] = 
+const Long tokudaIncrements [48] =
   { 1LL, 4LL, 9LL, 20LL, 46LL, 103LL, 233LL, 525LL, 1182LL, 2660LL, 5985LL, 13467LL, 30301LL, 68178LL,
     153401LL, 345152LL, 776591LL, 1747331LL, 3931496LL, 8845866LL, 19903198LL, 44782196LL,
     100759940LL, 226709866LL, 510097200LL, 1147718700LL, 2582367076LL, 5810325920LL,
@@ -367,15 +315,16 @@ Long tokudaIncrements [48] =
 
 // Call with r pointing AT the rightmost element of the subarray.
 
-void u32TokudaShellSort(U32 a[], Long l, Long r)
-{ Long i, h, k;
-  for (k = 0; tokudaIncrements[k] <= (r-l)/5; k++) ;
+void u32TokudaShellSort(U32 a[], Long l, Long r) {
+  Long k;
+  for (k = 0; tokudaIncrements[k] <= (r - l) / 5; k++);
   for (; k >= 0; k--) {
-    h = tokudaIncrements[k];
-    for (i = l+h; i <= r; i++) {
+    Long h = tokudaIncrements[k];
+    for (Long i = l + h; i <= r; i++) {
       Long j = i; U32 v = a[i]; 
-      while (j >= l+h && v < a[j-h])
-	{ a[j] = a[j-h]; j -= h; }
+      while (j >= l+h && v < a[j - h]) {
+        a[j] = a[j - h]; j -= h;
+      }
       a[j] = v; 
     } 
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org