crashpad/util/stdlib/map_insert.h
Mark Mentovai 6278690abe Update copyright boilerplate, 2022 edition (Crashpad)
sed -i '' -E -e 's/Copyright (.+) The Crashpad Authors\. All rights reserved\.$/Copyright \1 The Crashpad Authors/' $(git grep -El 'Copyright (.+) The Crashpad Authors\. All rights reserved\.$')

Bug: chromium:1098010
Change-Id: I8d6138469ddbe3d281a5d83f64cf918ec2491611
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3878262
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
Commit-Queue: Mark Mentovai <mark@chromium.org>
2022-09-06 23:54:07 +00:00

57 lines
2.1 KiB
C++

// Copyright 2015 The Crashpad Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef CRASHPAD_UTIL_STDLIB_MAP_INSERT_H_
#define CRASHPAD_UTIL_STDLIB_MAP_INSERT_H_
#include <map>
#include <utility>
namespace crashpad {
//! \brief Inserts a mapping from \a key to \a value into \a map, or replaces
//! an existing mapping so that \a key maps to \a value.
//!
//! This behaves similarly to `std::map<>::%insert_or_assign()` proposed for
//! C++17, except that the \a old_value parameter is added.
//!
//! \param[in,out] map The map to operate on.
//! \param[in] key The key that should be mapped to \a value.
//! \param[in] value The value that \a key should map to.
//! \param[out] old_value If \a key was previously present in \a map, this will
//! be set to its previous value. This parameter is optional and may be
//! `nullptr` if this information is not required.
//!
//! \return `false` if \a key was previously present in \a map. If \a old_value
//! is not `nullptr`, it will be set to the previous value. `true` if \a
//! key was not present in the map and was inserted.
template <typename T>
bool MapInsertOrReplace(T* map,
const typename T::key_type& key,
const typename T::mapped_type& value,
typename T::mapped_type* old_value) {
const auto result = map->insert(std::make_pair(key, value));
if (!result.second) {
if (old_value) {
*old_value = result.first->second;
}
result.first->second = value;
}
return result.second;
}
} // namespace crashpad
#endif // CRASHPAD_UTIL_STDLIB_MAP_INSERT_H_