/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkTHash_DEFINED #define SkTHash_DEFINED #include "include/core/SkTypes.h" #include "src/base/SkMathPriv.h" #include "src/core/SkChecksum.h" #include <initializer_list> #include <memory> #include <new> #include <type_traits> #include <utility> namespace skia_private { // Before trying to use THashTable, look below to see if THashMap or THashSet works for you. // They're easier to use, usually perform the same, and have fewer sharp edges. // T and K are treated as ordinary copyable C++ types. // Traits must have: // - static K GetKey(T) // - static uint32_t Hash(K) // If the key is large and stored inside T, you may want to make K a const&. // Similarly, if T is large you might want it to be a pointer. template <typename T, typename K, typename Traits = T> class THashTable { … }; // Maps K->V. A more user-friendly wrapper around THashTable, suitable for most use cases. // K and V are treated as ordinary copyable C++ types, with no assumed relationship between the two. template <typename K, typename V, typename HashK = SkGoodHash> class THashMap { … }; // A set of T. T is treated as an ordinary copyable C++ type. template <typename T, typename HashT = SkGoodHash> class THashSet { … }; } // namespace skia_private #endif // SkTHash_DEFINED