124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFAttribute.h ----------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#ifndef SymbolFileDWARF_DWARFAttribute_h_ 11d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#define SymbolFileDWARF_DWARFAttribute_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDefines.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAttribute 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFAttribute(dw_attr_t attr, dw_form_t form) : 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_attr_form ( attr << 16 | form ) 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void set(dw_attr_t attr, dw_form_t form) { m_attr_form = (attr << 16) | form; } 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void set_attr(dw_attr_t attr) { m_attr_form = (m_attr_form & 0x0000ffffu) | (attr << 16); } 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void set_form(dw_form_t form) { m_attr_form = (m_attr_form & 0xffff0000u) | form; } 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_attr_t get_attr() const { return m_attr_form >> 16; } 2836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton dw_form_t get_form() const { return (dw_form_t)m_attr_form; } 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void get(dw_attr_t& attr, dw_form_t& form) const 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner register uint32_t attr_form = m_attr_form; 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner attr = attr_form >> 16; 3336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton form = (dw_form_t)attr_form; 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool operator == (const DWARFAttribute& rhs) const { return m_attr_form == rhs.m_attr_form; } 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<DWARFAttribute> collection; 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::iterator iterator; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::const_iterator const_iterator; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_attr_form; // Upper 16 bits is attribute, lower 16 bits is form 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#endif // SymbolFileDWARF_DWARFAttribute_h_ 46