root/tools/android/forwarder2/util.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// 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_

/* [<][>][^][v][top][bottom][index][help] */