mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
// Copyright 2013 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef TOOLS_ANDROID_FORWARDER2_UTIL_H_
|
|
#define TOOLS_ANDROID_FORWARDER2_UTIL_H_
|
|
|
|
#include "base/logging.h"
|
|
|
|
namespace forwarder2 {
|
|
|
|
// Safely deletes a ref-counted value in a provided map by unlinking the object
|
|
// from the map before deleting it in case its destructor would access the map.
|
|
// Deletion will only happen by definition if the object's refcount is set to 1
|
|
// before this function gets called. Returns whether the element could be found
|
|
// in the map.
|
|
template <typename Map, typename K>
|
|
bool DeleteRefCountedValueInMap(const K& key, Map* map) {
|
|
const typename Map::iterator it = map->find(key);
|
|
if (it == map->end())
|
|
return false;
|
|
DeleteRefCountedValueInMapFromIterator(it, map);
|
|
return true;
|
|
}
|
|
|
|
// See DeleteRefCountedValuetInMap() above.
|
|
template <typename Map, typename Iterator>
|
|
void DeleteRefCountedValueInMapFromIterator(Iterator it, Map* map) {
|
|
DCHECK(it != map->end());
|
|
const typename Map::value_type::second_type shared_ptr_copy = it->second;
|
|
map->erase(it);
|
|
}
|
|
|
|
} // namespace forwarder2
|
|
|
|
#endif // TOOLS_ANDROID_FORWARDER2_UTIL_H_
|