1226584Sdim//===-- DWARFDebugAbbrev.h --------------------------------------*- C++ -*-===//
2226584Sdim//
3226584Sdim//                     The LLVM Compiler Infrastructure
4226584Sdim//
5226584Sdim// This file is distributed under the University of Illinois Open Source
6226584Sdim// License. See LICENSE.TXT for details.
7226584Sdim//
8226584Sdim//===----------------------------------------------------------------------===//
9226584Sdim
10226584Sdim#ifndef LLVM_DEBUGINFO_DWARFDEBUGABBREV_H
11226584Sdim#define LLVM_DEBUGINFO_DWARFDEBUGABBREV_H
12226584Sdim
13226584Sdim#include "DWARFAbbreviationDeclaration.h"
14226584Sdim#include <list>
15226584Sdim#include <map>
16226584Sdim#include <vector>
17226584Sdim
18226584Sdimnamespace llvm {
19226584Sdim
20226584Sdimtypedef std::vector<DWARFAbbreviationDeclaration>
21226584Sdim  DWARFAbbreviationDeclarationColl;
22226584Sdimtypedef DWARFAbbreviationDeclarationColl::iterator
23226584Sdim  DWARFAbbreviationDeclarationCollIter;
24226584Sdimtypedef DWARFAbbreviationDeclarationColl::const_iterator
25226584Sdim  DWARFAbbreviationDeclarationCollConstIter;
26226584Sdim
27226584Sdimclass DWARFAbbreviationDeclarationSet {
28234353Sdim  uint32_t Offset;
29226584Sdim  uint32_t IdxOffset;
30226584Sdim  std::vector<DWARFAbbreviationDeclaration> Decls;
31226584Sdim  public:
32226584Sdim  DWARFAbbreviationDeclarationSet()
33226584Sdim    : Offset(0), IdxOffset(0) {}
34226584Sdim
35234353Sdim  DWARFAbbreviationDeclarationSet(uint32_t offset, uint32_t idxOffset)
36226584Sdim    : Offset(offset), IdxOffset(idxOffset) {}
37226584Sdim
38226584Sdim  void clear() {
39226584Sdim    IdxOffset = 0;
40226584Sdim    Decls.clear();
41226584Sdim  }
42234353Sdim  uint32_t getOffset() const { return Offset; }
43226584Sdim  void dump(raw_ostream &OS) const;
44226584Sdim  bool extract(DataExtractor data, uint32_t* offset_ptr);
45226584Sdim
46226584Sdim  const DWARFAbbreviationDeclaration *
47226584Sdim    getAbbreviationDeclaration(uint32_t abbrCode) const;
48226584Sdim};
49226584Sdim
50226584Sdimclass DWARFDebugAbbrev {
51226584Sdimpublic:
52226584Sdim  typedef std::map<uint64_t, DWARFAbbreviationDeclarationSet>
53226584Sdim    DWARFAbbreviationDeclarationCollMap;
54226584Sdim  typedef DWARFAbbreviationDeclarationCollMap::iterator
55226584Sdim    DWARFAbbreviationDeclarationCollMapIter;
56226584Sdim  typedef DWARFAbbreviationDeclarationCollMap::const_iterator
57226584Sdim    DWARFAbbreviationDeclarationCollMapConstIter;
58226584Sdim
59226584Sdimprivate:
60226584Sdim  DWARFAbbreviationDeclarationCollMap AbbrevCollMap;
61226584Sdim  mutable DWARFAbbreviationDeclarationCollMapConstIter PrevAbbrOffsetPos;
62226584Sdim
63226584Sdimpublic:
64226584Sdim  DWARFDebugAbbrev();
65226584Sdim  const DWARFAbbreviationDeclarationSet *
66226584Sdim    getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const;
67226584Sdim  void dump(raw_ostream &OS) const;
68226584Sdim  void parse(DataExtractor data);
69226584Sdim};
70226584Sdim
71226584Sdim}
72226584Sdim
73226584Sdim#endif
74