/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef XPCOM_DS_NSTHASHMAP_H_ #define XPCOM_DS_NSTHASHMAP_H_ #include "mozilla/Attributes.h" #include "mozilla/RefPtr.h" #include "mozilla/UniquePtr.h" #include "nsBaseHashtable.h" #include "nsCOMPtr.h" #include "nsHashKeys.h" #include "nsAtomHashKeys.h" #include "nsHashtablesFwd.h" #include namespace mozilla::detail { template struct nsKeyClass< KeyType, std::enable_if_t>> { using type = KeyType; }; template struct nsKeyClass { using type = nsPtrHashKey; }; template <> struct nsKeyClass { using type = nsWeakAtomHashKey; }; template struct nsKeyClass { using type = nsFuncPtrHashKey; }; template <> struct nsKeyClass { using type = nsCStringHashKey; }; // This uses the case-sensitive hash key class, if you want the // case-insensitive hash key, use nsStringCaseInsensitiveHashKey explicitly. template <> struct nsKeyClass { using type = nsStringHashKey; }; template struct nsKeyClass || std::is_enum_v>> { using type = nsIntegralHashKey; }; template <> struct nsKeyClass> { using type = nsISupportsHashKey; }; template struct nsKeyClass> { using type = nsRefPtrHashKey; }; template <> struct nsKeyClass> { using type = nsAtomHashKey; }; template <> struct nsKeyClass { using type = nsIDHashKey; }; } // namespace mozilla::detail // The actual definition of nsTHashMap is in nsHashtablesFwd.h, since it is a // type alias. #endif // XPCOM_DS_NSTHASHMAP_H_