for (auto &&item: object_list) { \
auto names = text::StringBuilder::split(item.name, "."); \
index += static_cast<uint16_t>(names.size()); \
std::string name; \
bool first = true; \
auto pos = 0; \
auto iterator0 = compress_mapping.find(item.name); \
if (iterator0 == compress_mapping.end()) { \
iterator0 = compress_mapping.insert({item.name, Index::CompressMapping{}}).first; \
} \
for (auto i = static_cast<uint16_t>(names.size()); i > 0; i--) { \
if (!first) \
name = "." + name; \
name = names[i - 1] + name; \
auto iterator1 = compress_string_index.find(name); \
if (iterator1 == compress_string_index.end()) { \
auto tmp = static_cast<uint16_t>(index - pos); \
pos++; \
compress_string_index[name] = {tmp, name, 0}; \
iterator0->second.emplace(tmp); \
} else { \
iterator0->second.emplace(iterator1->second.index); \
} \
first = false; \
} \
}