Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- NamedStreamMap.h - PDB Named Stream Map ------------------*- 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_PDB_NATIVE_NAMEDSTREAMMAP_H
  10. #define LLVM_DEBUGINFO_PDB_NATIVE_NAMEDSTREAMMAP_H
  11.  
  12. #include "llvm/ADT/StringMap.h"
  13. #include "llvm/ADT/StringRef.h"
  14. #include "llvm/DebugInfo/PDB/Native/HashTable.h"
  15. #include "llvm/Support/Error.h"
  16. #include <cstdint>
  17.  
  18. namespace llvm {
  19.  
  20. class BinaryStreamReader;
  21. class BinaryStreamWriter;
  22.  
  23. namespace pdb {
  24.  
  25. class NamedStreamMap;
  26.  
  27. struct NamedStreamMapTraits {
  28.   NamedStreamMap *NS;
  29.  
  30.   explicit NamedStreamMapTraits(NamedStreamMap &NS);
  31.   uint16_t hashLookupKey(StringRef S) const;
  32.   StringRef storageKeyToLookupKey(uint32_t Offset) const;
  33.   uint32_t lookupKeyToStorageKey(StringRef S);
  34. };
  35.  
  36. class NamedStreamMap {
  37.   friend class NamedStreamMapBuilder;
  38.  
  39. public:
  40.   NamedStreamMap();
  41.  
  42.   Error load(BinaryStreamReader &Stream);
  43.   Error commit(BinaryStreamWriter &Writer) const;
  44.   uint32_t calculateSerializedLength() const;
  45.  
  46.   uint32_t size() const;
  47.   bool get(StringRef Stream, uint32_t &StreamNo) const;
  48.   void set(StringRef Stream, uint32_t StreamNo);
  49.  
  50.   uint32_t appendStringData(StringRef S);
  51.   StringRef getString(uint32_t Offset) const;
  52.   uint32_t hashString(uint32_t Offset) const;
  53.  
  54.   StringMap<uint32_t> entries() const;
  55.  
  56. private:
  57.   NamedStreamMapTraits HashTraits;
  58.   /// Closed hash table from Offset -> StreamNumber, where Offset is the offset
  59.   /// of the stream name in NamesBuffer.
  60.   HashTable<support::ulittle32_t> OffsetIndexMap;
  61.  
  62.   /// Buffer of string data.
  63.   std::vector<char> NamesBuffer;
  64. };
  65.  
  66. } // end namespace pdb
  67.  
  68. } // end namespace llvm
  69.  
  70. #endif // LLVM_DEBUGINFO_PDB_NATIVE_NAMEDSTREAMMAP_H
  71.