Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- FileEntry.h ----------------------------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_DEBUGINFO_GSYM_FILEENTRY_H
  10. #define LLVM_DEBUGINFO_GSYM_FILEENTRY_H
  11.  
  12. #include "llvm/ADT/DenseMapInfo.h"
  13. #include "llvm/ADT/Hashing.h"
  14. #include <functional>
  15. #include <stdint.h>
  16.  
  17. namespace llvm {
  18. namespace gsym {
  19.  
  20. /// Files in GSYM are contained in FileEntry structs where we split the
  21. /// directory and basename into two different strings in the string
  22. /// table. This allows paths to shared commont directory and filename
  23. /// strings and saves space.
  24. struct FileEntry {
  25.  
  26.   /// Offsets in the string table.
  27.   /// @{
  28.   uint32_t Dir = 0;
  29.   uint32_t Base = 0;
  30.   /// @}
  31.  
  32.   FileEntry() = default;
  33.   FileEntry(uint32_t D, uint32_t B) : Dir(D), Base(B) {}
  34.  
  35.   // Implement operator== so that FileEntry can be used as key in
  36.   // unordered containers.
  37.   bool operator==(const FileEntry &RHS) const {
  38.     return Base == RHS.Base && Dir == RHS.Dir;
  39.   };
  40.   bool operator!=(const FileEntry &RHS) const {
  41.     return Base != RHS.Base || Dir != RHS.Dir;
  42.   };
  43. };
  44.  
  45. } // namespace gsym
  46.  
  47. template <> struct DenseMapInfo<gsym::FileEntry> {
  48.   static inline gsym::FileEntry getEmptyKey() {
  49.     uint32_t key = DenseMapInfo<uint32_t>::getEmptyKey();
  50.     return gsym::FileEntry(key, key);
  51.   }
  52.   static inline gsym::FileEntry getTombstoneKey() {
  53.     uint32_t key = DenseMapInfo<uint32_t>::getTombstoneKey();
  54.     return gsym::FileEntry(key, key);
  55.   }
  56.   static unsigned getHashValue(const gsym::FileEntry &Val) {
  57.     return llvm::hash_combine(DenseMapInfo<uint32_t>::getHashValue(Val.Dir),
  58.                               DenseMapInfo<uint32_t>::getHashValue(Val.Base));
  59.   }
  60.   static bool isEqual(const gsym::FileEntry &LHS, const gsym::FileEntry &RHS) {
  61.     return LHS == RHS;
  62.   }
  63. };
  64.  
  65. } // namespace llvm
  66. #endif // LLVM_DEBUGINFO_GSYM_FILEENTRY_H
  67.