PageRenderTime 22ms CodeModel.GetById 12ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 1ms

/thirdparty/breakpad/third_party/protobuf/protobuf/src/google/protobuf/stubs/map-util.h

http://github.com/tomahawk-player/tomahawk
C++ Header | 119 lines | 57 code | 11 blank | 51 comment | 7 complexity | d391071d2b278937c11129b1f8818f74 MD5 | raw file
  1// Protocol Buffers - Google's data interchange format
  2// Copyright 2008 Google Inc.  All rights reserved.
  3// http://code.google.com/p/protobuf/
  4//
  5// Redistribution and use in source and binary forms, with or without
  6// modification, are permitted provided that the following conditions are
  7// met:
  8//
  9//     * Redistributions of source code must retain the above copyright
 10// notice, this list of conditions and the following disclaimer.
 11//     * Redistributions in binary form must reproduce the above
 12// copyright notice, this list of conditions and the following disclaimer
 13// in the documentation and/or other materials provided with the
 14// distribution.
 15//     * Neither the name of Google Inc. nor the names of its
 16// contributors may be used to endorse or promote products derived from
 17// this software without specific prior written permission.
 18//
 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 30
 31// from google3/util/gtl/map-util.h
 32// Author: Anton Carver
 33
 34#ifndef GOOGLE_PROTOBUF_STUBS_MAP_UTIL_H__
 35#define GOOGLE_PROTOBUF_STUBS_MAP_UTIL_H__
 36
 37#include <google/protobuf/stubs/common.h>
 38
 39namespace google {
 40namespace protobuf {
 41
 42// Perform a lookup in a map or hash_map.
 43// If the key is present in the map then the value associated with that
 44// key is returned, otherwise the value passed as a default is returned.
 45template <class Collection>
 46const typename Collection::value_type::second_type&
 47FindWithDefault(const Collection& collection,
 48                const typename Collection::value_type::first_type& key,
 49                const typename Collection::value_type::second_type& value) {
 50  typename Collection::const_iterator it = collection.find(key);
 51  if (it == collection.end()) {
 52    return value;
 53  }
 54  return it->second;
 55}
 56
 57// Perform a lookup in a map or hash_map.
 58// If the key is present a const pointer to the associated value is returned,
 59// otherwise a NULL pointer is returned.
 60template <class Collection>
 61const typename Collection::value_type::second_type*
 62FindOrNull(const Collection& collection,
 63           const typename Collection::value_type::first_type& key) {
 64  typename Collection::const_iterator it = collection.find(key);
 65  if (it == collection.end()) {
 66    return 0;
 67  }
 68  return &it->second;
 69}
 70
 71// Perform a lookup in a map or hash_map whose values are pointers.
 72// If the key is present a const pointer to the associated value is returned,
 73// otherwise a NULL pointer is returned.
 74// This function does not distinguish between a missing key and a key mapped
 75// to a NULL value.
 76template <class Collection>
 77const typename Collection::value_type::second_type
 78FindPtrOrNull(const Collection& collection,
 79              const typename Collection::value_type::first_type& key) {
 80  typename Collection::const_iterator it = collection.find(key);
 81  if (it == collection.end()) {
 82    return 0;
 83  }
 84  return it->second;
 85}
 86
 87// Change the value associated with a particular key in a map or hash_map.
 88// If the key is not present in the map the key and value are inserted,
 89// otherwise the value is updated to be a copy of the value provided.
 90// True indicates that an insert took place, false indicates an update.
 91template <class Collection, class Key, class Value>
 92bool InsertOrUpdate(Collection * const collection,
 93                   const Key& key, const Value& value) {
 94  pair<typename Collection::iterator, bool> ret =
 95    collection->insert(typename Collection::value_type(key, value));
 96  if (!ret.second) {
 97    // update
 98    ret.first->second = value;
 99    return false;
100  }
101  return true;
102}
103
104// Insert a new key and value into a map or hash_map.
105// If the key is not present in the map the key and value are
106// inserted, otherwise nothing happens. True indicates that an insert
107// took place, false indicates the key was already present.
108template <class Collection, class Key, class Value>
109bool InsertIfNotPresent(Collection * const collection,
110                        const Key& key, const Value& value) {
111  pair<typename Collection::iterator, bool> ret =
112    collection->insert(typename Collection::value_type(key, value));
113  return ret.second;
114}
115
116}  // namespace protobuf
117}  // namespace google
118
119#endif  // GOOGLE_PROTOBUF_STUBS_MAP_UTIL_H__