// Copyright 2015 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 PDFIUM_THIRD_PARTY_BASE_STL_UTIL_H_
|
#define PDFIUM_THIRD_PARTY_BASE_STL_UTIL_H_
|
|
#include <algorithm>
|
#include <set>
|
|
#include "third_party/base/numerics/safe_conversions.h"
|
|
namespace pdfium {
|
|
// Test to see if a set, map, hash_set or hash_map contains a particular key.
|
// Returns true if the key is in the collection.
|
template <typename Collection, typename Key>
|
bool ContainsKey(const Collection& collection, const Key& key) {
|
return collection.find(key) != collection.end();
|
}
|
|
// Test to see if a collection like a vector contains a particular value.
|
// Returns true if the value is in the collection.
|
template <typename Collection, typename Value>
|
bool ContainsValue(const Collection& collection, const Value& value) {
|
return std::find(collection.begin(), collection.end(), value) !=
|
collection.end();
|
}
|
|
// Convenience routine for "int-fected" code, so that the stl collection
|
// size_t size() method return values will be checked.
|
template <typename ResultType, typename Collection>
|
ResultType CollectionSize(const Collection& collection) {
|
return pdfium::base::checked_cast<ResultType, size_t>(collection.size());
|
}
|
|
// Track the addition of an object to a set, removing it automatically when
|
// the ScopedSetInsertion goes out of scope.
|
template <typename T>
|
class ScopedSetInsertion {
|
public:
|
ScopedSetInsertion(std::set<T>* org_set, T elem)
|
: m_Set(org_set), m_Entry(elem) {
|
m_Set->insert(m_Entry);
|
}
|
~ScopedSetInsertion() { m_Set->erase(m_Entry); }
|
|
private:
|
std::set<T>* const m_Set;
|
const T m_Entry;
|
};
|
|
} // namespace pdfium
|
|
#endif // PDFIUM_THIRD_PARTY_BASE_STL_UTIL_H_
|