in quantiles/include/quantiles_sketch_impl.hpp [831:863]
void quantiles_sketch<T, C, A>::check_header_validity(uint8_t preamble_longs, uint8_t flags_byte, uint8_t serial_version) {
const bool empty = (flags_byte & (1 << flags::IS_EMPTY)) > 0;
const bool compact = (flags_byte & (1 << flags::IS_COMPACT)) > 0;
const uint8_t sw = (compact ? 1 : 0) + (2 * (empty ? 1 : 0))
+ (4 * (serial_version & 0xF)) + (32 * (preamble_longs & 0x3F));
bool valid = true;
switch (sw) { // exhaustive list and description of all valid cases
case 38 : break; //!compact, empty, serVer = 1, preLongs = 1; always stored as not compact
case 164 : break; //!compact, !empty, serVer = 1, preLongs = 5; always stored as not compact
case 42 : break; //!compact, empty, serVer = 2, preLongs = 1; always stored as compact
case 72 : break; //!compact, !empty, serVer = 2, preLongs = 2; always stored as compact
case 47 : break; // compact, empty, serVer = 3, preLongs = 1;
case 46 : break; //!compact, empty, serVer = 3, preLongs = 1;
case 79 : break; // compact, empty, serVer = 3, preLongs = 2;
case 78 : break; //!compact, empty, serVer = 3, preLongs = 2;
case 77 : break; // compact, !empty, serVer = 3, preLongs = 2;
case 76 : break; //!compact, !empty, serVer = 3, preLongs = 2;
default : //all other case values are invalid
valid = false;
}
if (!valid) {
std::ostringstream os;
os << "Possible sketch corruption. Inconsistent state: "
<< "preamble_longs = " << preamble_longs
<< ", empty = " << (empty ? "true" : "false")
<< ", serialization_version = " << serial_version
<< ", compact = " << (compact ? "true" : "false");
throw std::invalid_argument(os.str());
}
}