152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton//===-- UniqueDWARFASTType.h ------------------------------------*- C++ -*-===// 252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// 352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// The LLVM Compiler Infrastructure 452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// 552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// This file is distributed under the University of Illinois Open Source 652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// License. See LICENSE.TXT for details. 752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// 852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton//===----------------------------------------------------------------------===// 952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 1052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton#ifndef lldb_UniqueDWARFASTType_h_ 1152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton#define lldb_UniqueDWARFASTType_h_ 1252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 1352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// C Includes 1452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// C++ Includes 1552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton#include <vector> 1652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 1752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// Other libraries and framework includes 1852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton#include "llvm/ADT/DenseMap.h" 1952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 2052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton// Project includes 2152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton#include "lldb/Symbol/Declaration.h" 2252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 2352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonclass DWARFCompileUnit; 2452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonclass DWARFDebugInfoEntry; 2552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonclass SymbolFileDWARF; 2652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 2752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonclass UniqueDWARFASTType 2852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton{ 2952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonpublic: 3052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton //------------------------------------------------------------------ 3152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton // Constructors and Destructors 3252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton //------------------------------------------------------------------ 3352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTType () : 3452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_type_sp (), 35f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_symfile (NULL), 36f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_cu (NULL), 3752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_die (NULL), 38f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_declaration (), 39f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_byte_size (-1) // Set to negative value to make sure we have a valid value 4052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 4152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 4252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 4352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTType (lldb::TypeSP &type_sp, 44f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton SymbolFileDWARF *symfile, 45f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton DWARFCompileUnit *cu, 4652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton DWARFDebugInfoEntry *die, 47f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const lldb_private::Declaration &decl, 48f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton int32_t byte_size) : 4952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_type_sp (type_sp), 50f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_symfile (symfile), 51f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_cu (cu), 5252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_die (die), 53f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_declaration (decl), 54f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_byte_size (byte_size) 5552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 5652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 5752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 5852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTType (const UniqueDWARFASTType &rhs) : 5952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_type_sp (rhs.m_type_sp), 60f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_symfile (rhs.m_symfile), 61f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_cu (rhs.m_cu), 6252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_die (rhs.m_die), 63f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_declaration (rhs.m_declaration), 64f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_byte_size (rhs.m_byte_size) 6552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 6652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 6752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 6852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton ~UniqueDWARFASTType() 6952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 7052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 7152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 7252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTType & 7352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton operator= (const UniqueDWARFASTType &rhs) 7452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 7552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton if (this != &rhs) 7652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 7752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_type_sp = rhs.m_type_sp; 78f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_symfile = rhs.m_symfile; 79f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_cu = rhs.m_cu; 8052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_die = rhs.m_die; 8152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_declaration = rhs.m_declaration; 82f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton m_byte_size = rhs.m_byte_size; 8352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 8452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton return *this; 8552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 8652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 8752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton lldb::TypeSP m_type_sp; 88f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton SymbolFileDWARF *m_symfile; 89f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const DWARFCompileUnit *m_cu; 9052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton const DWARFDebugInfoEntry *m_die; 91f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton lldb_private::Declaration m_declaration; 92f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton int32_t m_byte_size; 9352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton}; 9452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 9552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonclass UniqueDWARFASTTypeList 9652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton{ 9752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonpublic: 9852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTTypeList () : 9952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_collection() 10052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 10152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 10252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 10352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton ~UniqueDWARFASTTypeList () 10452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 10552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 10652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 10752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton uint32_t 10852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton GetSize() 10952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 11052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton return (uint32_t)m_collection.size(); 11152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 11252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 11352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton void 11452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton Append (const UniqueDWARFASTType &entry) 11552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 11652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_collection.push_back (entry); 11752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 11852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 11952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton bool 120f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton Find (SymbolFileDWARF *symfile, 121f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const DWARFCompileUnit *cu, 122f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const DWARFDebugInfoEntry *die, 12352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton const lldb_private::Declaration &decl, 124f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const int32_t byte_size, 12552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTType &entry) const; 12652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 12752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonprotected: 12852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton typedef std::vector<UniqueDWARFASTType> collection; 12952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton collection m_collection; 13052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton}; 13152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 13252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonclass UniqueDWARFASTTypeMap 13352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton{ 13452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonpublic: 13552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTTypeMap () : 13652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_collection () 13752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 13852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 13952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 14052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton ~UniqueDWARFASTTypeMap () 14152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 14252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 14352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 14452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton void 14552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton Insert (const lldb_private::ConstString &name, 14652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton const UniqueDWARFASTType &entry) 14752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 14852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton m_collection[name.GetCString()].Append (entry); 14952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 15052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 15152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton bool 15252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton Find (const lldb_private::ConstString &name, 153f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton SymbolFileDWARF *symfile, 154f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const DWARFCompileUnit *cu, 15552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton const DWARFDebugInfoEntry *die, 15652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton const lldb_private::Declaration &decl, 157f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton const int32_t byte_size, 15852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton UniqueDWARFASTType &entry) const 15952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 16052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton const char *unique_name_cstr = name.GetCString(); 16152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton collection::const_iterator pos = m_collection.find (unique_name_cstr); 16252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton if (pos != m_collection.end()) 16352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton { 164f1b73af504369d6f6eb113b98d77b06a3c8527d5Greg Clayton return pos->second.Find (symfile, cu, die, decl, byte_size, entry); 16552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 16652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton return false; 16752fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton } 16852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 16952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Claytonprotected: 17052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton // A unique name string should be used 17152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton typedef llvm::DenseMap<const char *, UniqueDWARFASTTypeList> collection; 17252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton collection m_collection; 17352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton}; 17452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton 17552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton#endif // lldb_UniqueDWARFASTType_h_ 176