in dedupe_estimator.cpp [287:314]
size_t get_lz4_compressed_size_split(std::string& s) {
size_t rem = s.length() % 4;
std::string sa(s.length() / 4 + (rem >= 1), 0);
std::string sb(s.length() / 4 + (rem >= 2), 0);
std::string sc(s.length() / 4 + (rem >= 3), 0);
std::string sd(s.length() / 4, 0);
for (size_t i = 0;i < s.length() / 4; ++i) {
sa[i] = s[4 * i];
sb[i] = s[4 * i + 1];
sc[i] = s[4 * i + 2];
sd[i] = s[4 * i + 3];
}
switch (rem) {
case 1:
sa[s.length() / 4] = s[s.length() - 1];
break;
case 2:
sa[s.length() / 4] = s[s.length() - 2];
sb[s.length() / 4] = s[s.length() - 1];
break;
case 3:
sa[s.length() / 4] = s[s.length() - 3];
sb[s.length() / 4] = s[s.length() - 2];
sc[s.length() / 4] = s[s.length() - 1];
break;
}
return get_lz4_compressed_size(sa) + get_lz4_compressed_size(sb) + get_lz4_compressed_size(sc) + get_lz4_compressed_size(sd);
}