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