in glean/rts/nat.cpp [238:290]
size_t storeNat(unsigned char* out, uint64_t val) {
// There is probably ample room for improvement here.
if (val < 0x80) {
*out = static_cast<unsigned char>(val);
return 1;
} else if (val < 0x4080) {
folly::storeUnaligned<uint16_t>(
out, folly::Endian::big(static_cast<uint16_t>(val - 0x80)) | 0x80);
return 2;
} else if (val < 0x204080) {
val -= 0x4080;
out[0] = 0xC0 | static_cast<unsigned char>(val >> 16);
folly::storeUnaligned<uint16_t>(
out + 1, folly::Endian::big(static_cast<uint16_t>(val)));
return 3;
} else if (val < 0x10204080) {
val -= 0x204080;
folly::storeUnaligned<uint32_t>(
out, folly::Endian::big(static_cast<uint32_t>(val | 0xE0000000)));
return 4;
} else if (val < 0x0810204080) {
val -= 0x10204080;
out[0] = 0xF0 | static_cast<unsigned char>(val >> 32);
folly::storeUnaligned<uint32_t>(
out + 1, folly::Endian::big(static_cast<uint32_t>(val)));
return 5;
} else if (val < 0x040810204080) {
val -= 0x0810204080;
folly::storeUnaligned<uint16_t>(
out, folly::Endian::big(static_cast<uint16_t>((val >> 32) | 0xF800)));
folly::storeUnaligned<uint32_t>(
out + 2, folly::Endian::big(static_cast<uint32_t>(val)));
return 6;
} else if (val < 0x02040810204080) {
val -= 0x040810204080;
out[0] = 0xFC | static_cast<unsigned char>(val >> 48);
folly::storeUnaligned<uint16_t>(
out + 1, folly::Endian::big(static_cast<uint16_t>(val >> 32)));
folly::storeUnaligned<uint32_t>(
out + 3, folly::Endian::big(static_cast<uint32_t>(val)));
return 7;
} else if (val < 0x0102040810204080) {
val -= 0x02040810204080;
folly::storeUnaligned<uint64_t>(
out, folly::Endian::big(val | 0xFE00000000000000Ul));
return 8;
} else {
val -= 0x0102040810204080;
out[0] = 0xFF;
folly::storeUnaligned<uint64_t>(out + 1, folly::Endian::big(val));
return 9;
}
}