1//===- llvm/CodeGen/DwarfStringPoolEntry.h - String pool entry --*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H
11#define LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H
12
13#include "llvm/ADT/StringMap.h"
14
15namespace llvm {
16
17class MCSymbol;
18
19/// Data for a string pool entry.
20struct DwarfStringPoolEntry {
21  MCSymbol *Symbol;
22  unsigned Offset;
23  unsigned Index;
24};
25
26/// String pool entry reference.
27struct DwarfStringPoolEntryRef {
28  const StringMapEntry<DwarfStringPoolEntry> *I = nullptr;
29
30public:
31  DwarfStringPoolEntryRef() = default;
32  explicit DwarfStringPoolEntryRef(
33      const StringMapEntry<DwarfStringPoolEntry> &I)
34      : I(&I) {}
35
36  explicit operator bool() const { return I; }
37  MCSymbol *getSymbol() const {
38    assert(I->second.Symbol && "No symbol available!");
39    return I->second.Symbol;
40  }
41  unsigned getOffset() const { return I->second.Offset; }
42  unsigned getIndex() const { return I->second.Index; }
43  StringRef getString() const { return I->first(); }
44
45  bool operator==(const DwarfStringPoolEntryRef &X) const { return I == X.I; }
46  bool operator!=(const DwarfStringPoolEntryRef &X) const { return I != X.I; }
47};
48
49} // end namespace llvm
50
51#endif
52