size_t get_lz4_compressed_size_split()

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);
}