| 928 | // }); |
| 929 | template <class MapContainer, typename Function> |
| 930 | std::pair<typename MapContainer::mapped_type* const, bool> |
| 931 | ComputePairIfAbsentReturnAbsense(MapContainer* container, |
| 932 | const typename MapContainer::key_type& key, |
| 933 | Function compute_pair_func) { |
| 934 | typename MapContainer::iterator iter = container->find(key); |
| 935 | bool new_value = iter == container->end(); |
| 936 | if (new_value) { |
| 937 | auto p = compute_pair_func(); |
| 938 | std::pair<typename MapContainer::iterator, bool> result = |
| 939 | container->emplace(std::move(p.first), std::move(p.second)); |
| 940 | DCHECK(result.second) << "duplicate key: " << key; |
| 941 | iter = result.first; |
| 942 | } |
| 943 | return std::make_pair(&iter->second, new_value); |
| 944 | } |
| 945 | template <class MapContainer, typename Function> |
| 946 | std::pair<typename MapContainer::mapped_type* const, bool> |
| 947 | ComputeIfAbsentReturnAbsense(MapContainer* container, |