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