本文整理汇总了C++中boost::optional::erase方法的典型用法代码示例。如果您正苦于以下问题:C++ optional::erase方法的具体用法?C++ optional::erase怎么用?C++ optional::erase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类boost::optional
的用法示例。
在下文中一共展示了optional::erase方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dedup_methods_helper
size_t dedup_methods_helper(
const Scope& scope,
const std::vector<DexMethod*>& to_dedup,
std::vector<DexMethod*>& replacements,
boost::optional<std::unordered_map<DexMethod*, MethodOrderedSet>>&
new_to_old) {
if (to_dedup.size() <= 1) {
replacements = to_dedup;
return 0;
}
size_t dedup_count = 0;
auto grouped_methods = group_identical_methods(to_dedup);
std::unordered_map<DexMethod*, DexMethod*> duplicates_to_replacement;
for (auto& group : grouped_methods) {
auto replacement = *group.begin();
for (auto m : group) {
duplicates_to_replacement[m] = replacement;
// Update dedup map
if (new_to_old == boost::none) {
continue;
}
if (new_to_old->count(m) > 0) {
auto orig_old_list = new_to_old->at(m);
new_to_old->erase(m);
for (auto orig_old : orig_old_list) {
new_to_old.get()[replacement].insert(orig_old);
}
}
new_to_old.get()[replacement].insert(m);
}
if (new_to_old != boost::none) {
new_to_old.get()[replacement].insert(replacement);
}
replacements.push_back(replacement);
if (group.size() > 1) {
dedup_count += group.size() - 1;
TRACE(METH_DEDUP,
9,
"dedup: group %d replacement %s\n",
group.size(),
SHOW(replacement));
}
}
method_reference::update_call_refs_simple(scope, duplicates_to_replacement);
return dedup_count;
}